From 80773499c1cdf8d774fdf728df72da5ea00804f5 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 03 三月 2025 14:20:02 +0800
Subject: [PATCH] 完成8体系管理要求

---
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeetingDetail.java                                      |   53 
 basic-server/src/main/resources/mapper/StandardProductListMapper.xml                                            |   10 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordAuditServiceImpl.java                       |  670 +
 basic-server/src/main/resources/mapper/StructureTestObjectPartMapper.xml                                        |    2 
 performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java      |    4 
 basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListService2.java                           |   13 
 cnas-manage/src/main/resources/mapper/ManageRecordCancelMapper.xml                                              |   34 
 cnas-manage/src/main/java/com/ruoyi/manage/vo/MeetingParticipantsDetailsVo.java                                 |   15 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheck.java                                              |   80 
 basic-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java                                                 |   23 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentIssueRecycle.java                                 |  107 
 performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryCorrectionHoursServiceImpl.java    |    5 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCancelMapper.java                                 |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIssueRecycleController.java                   |   67 
 inspect-server/pom.xml                                                                                          |   36 
 basic-server/src/main/resources/mapper/StandardMethodMapper.xml                                                 |    6 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervals.java                                      |   61 
 basic-server/src/main/java/com/ruoyi/inspect/controller/CapacityScopeController.java                            |  393 +
 cnas-manage/src/main/resources/mapper/ManageRecordAuditMapper.xml                                               |   50 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplement.java                                          |  107 
 basic-server/src/main/resources/mapper/ProductPartMapper.xml                                                    |    2 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentIssueRecycleMapper.java                         |   24 
 cnas-manage/src/main/resources/mapper/ClientSatisfactionAnalyseFileMapper.xml                                   |   18 
 inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java                                              |   90 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageControlPlanListService.java                            |   24 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentListService.java                               |   29 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordTotal.java                                          |   74 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingMapper.java                                      |   22 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanDetailService.java                               |   16 
 basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantitySupplierDto.java                           |  124 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/CapacityScopeServiceImpl.java                         |  185 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductSupplierDensityServiceImpl.java                |   64 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordAuditController.java                          |   83 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewReportService.java                               |   24 
 basic-server/src/main/java/com/ruoyi/inspect/controller/StandardTreeController.java                             |  276 
 cnas-manage/src/main/resources/lib/aspose-words-15.12.0-jdk16.jar                                               |    0 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureItemParameter.java                                   |  121 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramMapper.java                                |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalReportMapper.java                                     |   28 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingParticipantsDto.java                                |   21 
 cnas-manage/src/main/resources/mapper/InternalPlanDetailMapper.xml                                              |    6 
 cnas-manage/src/main/resources/static/internal-check.docx                                                       |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanDetailServiceImpl.java                      |   20 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentControlledController.java                   |   72 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsMapper.java                              |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java             |  124 
 basic-server/src/main/java/com/ruoyi/inspect/excel/StructureTestObjectData.java                                 |   25 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardTemplateMapper.java                                 |   32 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanService.java                                     |   77 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanServiceImpl.java                            |  252 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentIssueRecycleServiceImpl.java              |  197 
 cnas-manage/src/main/resources/mapper/ManageReviewProgramFileMapper.xml                                         |   17 
 pom.xml                                                                                                         |   37 
 basic-server/src/main/java/com/ruoyi/inspect/excel/StructureTestObjectListener.java                             |   38 
 basic-server/src/main/resources/mapper/ProductSupplierDensityMapper.xml                                         |    2 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramController.java                        |   66 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingDto.java                                          |   22 
 cnas-manage/src/main/resources/mapper/ManageRecordVerifyMapper.xml                                              |   23 
 basic-server/src/main/java/com/ruoyi/inspect/service/ProductSupplierDensityService.java                         |   22 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardMethodMapper.java                                   |   26 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectFileService.java                              |   16 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingDetailMapper.java                              |   16 
 basic-server/src/main/java/com/ruoyi/inspect/service/ProductPartService.java                                    |   14 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalImplementController.java                          |  107 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsService.java                            |   31 
 basic-server/src/main/java/com/ruoyi/inspect/service/StandardTemplateService.java                               |   34 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeeting.java                                            |   56 
 cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageRiskAssessmentResultsVo.java                                |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckService.java                                    |   69 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/IfsInventoryQuantityMapper.java                             |   42 
 cnas-manage/src/main/resources/static/check-deal.docx                                                           |    0 
 cnas-manage/src/main/resources/mapper/ManageControlPlanListMapper.xml                                           |   33 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementDetailServiceImpl.java                 |   19 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingParticipantsServiceImpl.java               |   42 
 basic-server/src/main/java/com/ruoyi/inspect/service/StandardMethodListService.java                             |   28 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewReportServiceImpl.java                      |  141 
 cnas-manage/src/main/resources/static/customer-satisfaction-questionnaire.docx                                  |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/ClientSatisfactionDto.java                                       |   50 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectMapper.java                                    |   23 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/InsSample1.java                                               |  123 
 cnas-manage/src/main/resources/mapper/ManageDocumentControlledMapper.xml                                        |   42 
 cnas-manage/src/main/resources/mapper/ManageRecordIntervalsTotalMapper.xml                                      |   33 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListSupplierAskServiceImpl.java        |   79 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingMapper.java                                    |   27 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingServiceImpl.java                           |  157 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramServiceImpl.java                     |  121 
 basic-server/src/main/java/com/ruoyi/inspect/service/CapacityScopeService.java                                  |   46 
 basic-server/src/main/java/com/ruoyi/inspect/dto/CopyStandardProductListDto.java                                |   23 
 cnas-manage/src/main/resources/mapper/ManageDocumentCancelMapper.xml                                            |   44 
 basic-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java                                             |   29 
 basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListSupplierAskService.java                 |   23 
 cnas-manage/src/main/java/com/ruoyi/manage/schedule/ManageRecordTotalSchedule.java                              |   36 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIssueRecycleMapper.java                           |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentListMapper.java                                 |   22 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRiskAssessmentResultsController.java                |  133 
 cnas-manage/src/main/resources/mapper/ManageRiskAssessmentResultsMapper.xml                                     |   38 
 ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java                                 |    9 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/DateImageUtil.java                                            |   61 
 basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml                                         |    6 
 cnas-manage/pom.xml                                                                                             |   37 
 basic-server/src/main/java/com/ruoyi/inspect/controller/SealController.java                                     |   48 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/ProductSupplierDensity.java                                   |   57 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardMethodListServiceImpl.java                    |  150 
 basic-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java                                                |   11 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheckDetail.java                                        |   63 
 cnas-manage/src/main/resources/static/internal-plan.docx                                                        |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanMapper.java                                       |   30 
 basic-server/src/main/java/com/ruoyi/inspect/controller/StandardMethodController.java                           |   59 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordVerify.java                                         |   60 
 cnas-manage/src/main/resources/mapper/ManageRecordTotalMapper.xml                                               |   32 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsTotalServiceImpl.java              |  499 +
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsTotalMapper.java                         |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingParticipantsController.java                  |   51 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsController.java                      |   69 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalReportServiceImpl.java                          |  157 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/Product.java                                                  |   57 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/Seal.java                                                     |   43 
 basic-server/src/main/resources/mapper/ProductMapper.xml                                                        |    4 
 cnas-manage/src/main/resources/static/risk-factor-identification-risk.docx                                      |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervalsTotal.java                                 |   74 
 cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageControlPlanListVo.java                                      |   20 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementService.java                                |   69 
 cnas-manage/src/main/resources/static/intervals-deal.docx                                                       |    0 
 basic-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java                                                |   18 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrect.java                                            |  115 
 basic-server/src/main/java/com/ruoyi/inspect/dto/ProductDTO1.java                                               |   16 
 performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursDayServiceImpl.java    |    4 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordVerifyController.java                         |   60 
 basic-server/src/main/java/com/ruoyi/inspect/controller/StructureTestObjectPartController.java                  |   59 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordVerifyMapper.java                                 |   22 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalReportService.java                                   |   47 
 cnas-manage/src/main/resources/mapper/InternalPlanMapper.xml                                                    |   14 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIssueRecycleService.java                         |   31 
 cnas-manage/src/main/resources/mapper/InternalMeetingDetailMapper.xml                                           |    6 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewReportMapper.java                                 |   21 
 basic-server/src/main/resources/mapper/StandardTemplateMapper.xml                                               |    6 
 basic-server/src/main/java/com/ruoyi/inspect/service/CertificationService.java                                  |   17 
 ruoyi-system/src/main/resources/mapper/system/UserMapper.xml                                                    |   63 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentListController.java                         |   69 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsTotalController.java                 |   50 
 cnas-manage/src/main/java/com/ruoyi/manage/excel/ManageDocumentListListener.java                                |   40 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckDetailMapper.java                                |   17 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramService.java                              |   25 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCheckDto.java                                            |   19 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardTemplateServiceImpl.java                      |  130 
 cnas-manage/src/main/resources/static/internal-implement.docx                                                   |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingService.java                                    |   28 
 basic-server/src/main/java/com/ruoyi/inspect/service/ProductService.java                                        |   28 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingParticipantsMapper.java                          |   16 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramFileServiceImpl.java                 |   76 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRiskAssessmentResultsService.java                      |   24 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java                         |  134 
 basic-server/src/main/java/com/ruoyi/inspect/service/StandardMethodService.java                                 |   30 
 cnas-manage/src/main/resources/static/review-program.docx                                                       |    0 
 cnas-manage/src/main/resources/static/internal-report.docx                                                      |    0 
 cnas-manage/src/main/resources/mapper/ManageRecordIntervalsMapper.xml                                           |   27 
 performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryCorrectionHoursMapper.java               |    2 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingParticipantDto.java                               |   32 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageControlPlanListMapper.java                              |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRiskAssessmentResults.java                                |  103 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureTestObjectPartServiceImpl.java               |   75 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckServiceImpl.java                           |  232 
 cnas-manage/src/main/resources/static/audit-deal.docx                                                           |    0 
 basic-server/src/main/resources/mapper/IfsInventoryQuantityMapper.xml                                           |    2 
 basic-server/src/main/java/com/ruoyi/inspect/dto/ResetTreeDragDTO.java                                          |   26 
 basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListService.java                            |   67 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureTestObjectServiceImpl.java                   |   19 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentCancelController.java                       |   74 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewReport.java                                         |  102 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingController.java                              |   64 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentCancelMapper.java                               |   23 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementDetailMapper.java                            |   17 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementServiceImpl.java                       |  231 
 cnas-manage/src/main/resources/mapper/ManageDocumentIssueRecycleMapper.xml                                      |   54 
 basic-server/src/main/java/com/ruoyi/inspect/controller/CertificationController.java                            |   41 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgramFile.java                                    |   50 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordAuditService.java                                |   30 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRiskAssessmentResultsMapper.java                        |   21 
 ruoyi-admin/src/main/resources/application-druid.yml                                                            |   20 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ClientSatisfactionService.java                               |   59 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementDetailService.java                          |   15 
 cnas-manage/src/main/resources/static/internal-correct.docx                                                     |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingService.java                                  |   63 
 basic-server/src/main/resources/mapper/StandardMethodListMapper.xml                                             |   14 
 performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursDayMapper.java               |   12 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCorrectController.java                            |  110 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeeting.java                                              |   54 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingDetailService.java                            |   16 
 basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantityCheckDto.java                              |  182 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductSupplierDensityMapper.java                           |   22 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgram.java                                        |   81 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentAlterServiceImpl.java                     |  283 
 cnas-manage/src/main/java/com/ruoyi/manage/vo/ReviewProgramDetailsVo.java                                       |   15 
 cnas-manage/src/main/resources/mapper/ManageDocumentListMapper.xml                                              |   26 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCheckMapper.java                                  |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentCancelService.java                             |   34 
 basic-server/src/main/java/com/ruoyi/inspect/controller/StandardTemplateController.java                         |   68 
 cnas-manage/src/main/resources/static/cancel-deal.docx                                                          |    0 
 basic-server/src/main/java/com/ruoyi/inspect/service/StructureTestObjectService.java                            |   15 
 basic-server/src/main/java/com/ruoyi/inspect/controller/ProductPartController.java                              |   50 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCancelService.java                               |   29 
 cnas-manage/src/main/resources/mapper/ManageRecordIssueRecycleMapper.xml                                        |   33 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordTotalService.java                                |   25 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardTreeServiceImpl.java                          |  535 +
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentAlterMapper.java                                |   24 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java                      |  122 
 cnas-manage/src/main/resources/static/review-report.docx                                                        |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordTotalMapper.java                                  |   21 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureItemParameterServiceImpl.java                |   24 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCheckServiceImpl.java                       |  467 +
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/SealServiceImpl.java                                  |   37 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordVerifyService.java                               |   28 
 basic-server/src/main/resources/mapper/StandardTreeMapper.xml                                                   |   40 
 cnas-manage/src/main/resources/static/verify-deal.docx                                                          |    0 
 ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java                                |   18 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageControlPlanListController.java                      |  134 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalReportController.java                             |  115 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewReportController.java                         |   61 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentList.java                                         |   79 
 cnas-manage/src/main/resources/mapper/ManageMeetingMapper.xml                                                   |   32 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramFileMapper.java                            |   16 
 cnas-manage/src/main/resources/static/review-meet.docx                                                          |    0 
 basic-server/src/main/java/com/ruoyi/inspect/dto/TestItemDto.java                                               |   16 
 cnas-manage/src/main/resources/mapper/ManageReviewProgramMapper.xml                                             |   41 
 performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java            |   16 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentAlterController.java                        |   78 
 cnas-manage/src/main/resources/mapper/ManageReviewReportMapper.xml                                              |   48 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordTotalServiceImpl.java                       |  421 +
 cnas-manage/src/main/resources/mapper/ManageDocumentAlterMapper.xml                                             |   48 
 cnas-manage/src/main/resources/mapper/InternalMeetingMapper.xml                                                 |   18 
 basic-server/src/main/java/com/ruoyi/inspect/service/LaboratoryService.java                                     |   27 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentControlledMapper.java                           |   23 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/LaboratoryMapper.java                                       |   20 
 basic-server/src/main/java/com/ruoyi/inspect/controller/LaboratoryController.java                               |   62 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListService2Impl.java                  |   12 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplementDetail.java                                    |   63 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsServiceImpl.java                   |  524 +
 cnas-manage/src/main/resources/mapper/ClientSatisfactionMapper.xml                                              |   48 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionAnalyseFileMapper.java                      |   27 
 performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOutputWorkingHoursServiceImpl.java |    8 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureItemParameterMapper.java                           |   30 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/CertificationServiceImpl.java                         |   45 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentIssueRecycleController.java                 |   75 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductPartServiceImpl.java                           |   68 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCheckController.java                              |  108 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordAudit.java                                          |  132 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfaction.java                                         |   95 
 basic-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java                                             |   18 
 basic-server/src/main/java/com/ruoyi/inspect/service/StructureTestObjectPartService.java                        |   22 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java                         |   79 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeetingParticipants.java                                  |   54 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductServiceImpl.java                               |  188 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementMapper.java                                  |   28 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethod.java                                           |   85 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIssueRecycle.java                                   |   76 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlanDetail.java                                         |   83 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java                                      |  221 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductMapper.java                                          |   24 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramFileService.java                          |   22 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordAuditMapper.java                                  |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalMeetingController.java                            |   95 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardProductListSupplierAskMapper.java                   |   18 
 cnas-manage/src/main/resources/static/analysis-risk-factors.docx                                                |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingDto.java                                            |   16 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCheck.java                                          |   74 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCheckController.java                          |   83 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardTreeMapper.java                                     |   92 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/SealMapper.java                                             |   17 
 basic-server/src/main/java/com/ruoyi/inspect/dto/PageTestObjectDto.java                                         |   25 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java                                             |   96 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfactionAnalyseFile.java                              |   54 
 cnas-manage/src/main/resources/mapper/ManageRecordCheckMapper.xml                                               |   35 
 basic-server/src/main/java/com/ruoyi/inspect/service/StandardTreeService.java                                   |   52 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalImplementDto.java                                        |   19 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckMapper.java                                      |   28 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentControlledService.java                         |   34 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/ProductPart.java                                              |   49 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentCancelServiceImpl.java                    |  141 
 basic-server/src/main/resources/mapper/StructureTestMapper.xml                                                  |    2 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckDetailService.java                              |   15 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureTestObjectMapper.java                              |   22 
 cnas-manage/src/main/resources/static/recycle-deal.docx                                                         |    0 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureTestObjectPartMapper.java                          |   21 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIssueRecycleServiceImpl.java                |  695 +
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingServiceImpl.java                         |  173 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/CertificationMapper.java                                    |   14 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardMethodListMapper.java                               |   40 
 basic-server/src/main/java/com/ruoyi/inspect/dto/InsSampleReceiveDto.java                                       |   35 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentIssueRecycleService.java                       |   35 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanDetailMapper.java                                 |   18 
 basic-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java                                                  |   15 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardMethodServiceImpl.java                        |  260 
 cnas-manage/src/main/resources/static/internal-meeting.docx                                                     |    0 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCorrectDto.java                                          |   26 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCheckService.java                                |   32 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckDetailServiceImpl.java                     |   19 
 cnas-manage/src/main/resources/mapper/InternalCorrectFileMapper.xml                                             |   19 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardProductListMapper.java                              |   69 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureTestObjectPart.java                                  |   56 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordVerifyServiceImpl.java                      |  155 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentCancel.java                                       |  101 
 cnas-manage/src/main/resources/lib/license.xml                                                                  |   13 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramFileController.java                    |   42 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCancel.java                                         |   77 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlan.java                                               |   95 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsTotalService.java                       |   25 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java                                         |   76 
 basic-server/src/main/resources/mapper/LaboratoryMapper.xml                                                     |    2 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionMapper.java                                 |   36 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureTestObject.java                                      |   63 
 basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantityDto.java                                   |   82 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingDetailServiceImpl.java                   |   20 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/Certification.java                                            |   72 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageControlPlanListServiceImpl.java                   |  124 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java                                              |  123 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java                      |  477 +
 basic-server/src/main/java/com/ruoyi/inspect/pojo/IfsInventoryQuantity.java                                     |  210 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageDocumentIssueRecycleDto.java                               |   25 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentControlled.java                                   |   91 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectServiceImpl.java                         |  319 
 cnas-manage/src/main/resources/mapper/InternalReportMapper.xml                                                  |   14 
 inspect-server/src/main/java/com/ruoyi/inspect/util/XWPFDocumentUtils.java                                      |  119 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentControlledServiceImpl.java                |  218 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/LaboratoryServiceImpl.java                            |   53 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentAlter.java                                        |  115 
 cnas-manage/src/main/resources/mapper/InternalImplementMapper.xml                                               |   14 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java                                        |    4 
 basic-server/src/main/java/com/ruoyi/inspect/service/SealService.java                                           |   23 
 basic-server/src/main/java/com/ruoyi/inspect/controller/ProductSupplierDensityController.java                   |   59 
 cnas-manage/src/main/resources/mapper/InternalCorrectMapper.xml                                                 |   15 
 cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectFileMapper.java                                |   18 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java                                       |   83 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductListSupplierAsk.java                           |   58 
 cnas-manage/src/main/resources/mapper/InternalCheckMapper.xml                                                   |   15 
 basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListServiceImpl.java                   |  701 +
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java                      |  188 
 basic-server/src/main/resources/mapper/SealMapper.xml                                                           |    4 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrectFile.java                                        |   56 
 cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectService.java                                  |   66 
 ruoyi-admin/pom.xml                                                                                             |    5 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordTotalController.java                          |   50 
 basic-server/src/main/resources/mapper/CertificationMapper.xml                                                  |    2 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectFileServiceImpl.java                     |   20 
 cnas-manage/src/main/resources/mapper/ManageMeetingParticipantsMapper.xml                                       |   17 
 basic-server/src/main/java/com/ruoyi/inspect/pojo/Laboratory.java                                               |   62 
 basic-server/src/main/java/com/ruoyi/inspect/service/StructureItemParameterService.java                         |    8 
 /dev/null                                                                                                       |  123 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingParticipantsService.java                        |   20 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageControlPlanList.java                                      |   81 
 cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalReport.java                                             |  122 
 inspect-server/src/main/java/com/ruoyi/inspect/util/HackLoopTableRenderPolicy.java                              |  154 
 basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductPartMapper.java                                      |   13 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java                                              |   34 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalPlanController.java                               |  116 
 cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalPlanDto.java                                             |   19 
 cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentAlterService.java                              |   36 
 356 files changed, 23,203 insertions(+), 204 deletions(-)

diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java
deleted file mode 100644
index 810c430..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java
+++ /dev/null
@@ -1,393 +0,0 @@
-package com.ruoyi.basic.controller;
-
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.poi.excel.ExcelUtil;
-import com.alibaba.excel.EasyExcel;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.common.core.domain.entity.SysDictData;
-import com.ruoyi.system.service.ISysDictTypeService;
-import com.ruoyi.basic.dto.PageTestObjectDto;
-import com.ruoyi.basic.dto.ProductDTO1;
-import com.ruoyi.basic.excel.StructureTestObjectData;
-import com.ruoyi.basic.excel.StructureTestObjectListener;
-import com.ruoyi.basic.pojo.Product;
-import com.ruoyi.basic.pojo.StandardTemplate;
-import com.ruoyi.basic.pojo.StructureItemParameter;
-import com.ruoyi.basic.pojo.StructureTestObject;
-import com.ruoyi.basic.service.CapacityScopeService;
-import com.ruoyi.basic.service.ProductService;
-import com.ruoyi.basic.service.StandardTemplateService;
-import com.ruoyi.basic.service.StructureItemParameterService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
-
-/**
- * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ帶鍒跺眰
- *
- * @author makejava
- * @since 2024-02-26 16:21:17
- */
-@Api(tags = "鑳藉姏鑼冨洿")
-@AllArgsConstructor
-@RestController
-@RequestMapping("/capacityScope")
-public class CapacityScopeController {
-
-    private CapacityScopeService capacityScopeService;
-
-    private ProductService productService;
-
-    private StructureItemParameterService structureItemParameterService;
-
-    private ISysDictTypeService dictTypeService;
-
-    private StandardTemplateService standardTemplateService;
-
-    @ApiOperation(value = "鑾峰彇椤圭洰妫�楠屽弬鏁板垪琛�")
-    @PostMapping("/selectItemParameterList")
-    public Result selectItemParameterList(Page page,StructureItemParameter itemParameter) throws Exception {
-        return Result.success(capacityScopeService.selectItemParameterList(page, itemParameter));
-    }
-
-    @ApiOperation(value = "娣诲姞椤圭洰妫�楠屽弬鏁�")
-    @PostMapping("/addItemParameter")
-    public Result addItemParameter(@RequestBody StructureItemParameter itemParameter) {
-        return Result.success(capacityScopeService.addItemParameter(itemParameter));
-    }
-
-    @ApiOperation(value = "鍒犻櫎椤圭洰妫�楠屽弬鏁�")
-    @PostMapping("/delItemParameter")
-    public Result<?> delItemParameter(Integer id) {
-        return Result.success(capacityScopeService.delItemParameter(id));
-    }
-
-    @ApiOperation(value = "淇敼椤圭洰妫�楠屽弬鏁�")
-    @PostMapping("/upItemParameter")
-    public Result<?> upItemParameter(@RequestBody StructureItemParameter itemParameter) {
-        return Result.success(capacityScopeService.upItemParameter(itemParameter));
-    }
-
-    @ApiOperation(value = "鑾峰彇妫�楠屽璞�")
-    @PostMapping("/selectTestObjectList")
-    public Result selectTestObjectList(Page page,PageTestObjectDto pageTestObjectDto) throws Exception {
-        return Result.success(capacityScopeService.selectTestObjectList(page, pageTestObjectDto));
-    }
-
-    @ApiOperation(value = "娣诲姞妫�楠屽璞�")
-    @PostMapping("/addTestObject")
-    public Result addTestObject(@RequestBody StructureTestObject testObject) {
-        return Result.success(capacityScopeService.addTestObject(testObject));
-    }
-
-    @ApiOperation(value = "鍒犻櫎妫�楠屽璞�")
-    @PostMapping("/delTestObject")
-    public Result<?> delTestObject(Integer id) {
-        return Result.success(capacityScopeService.delTestObject(id));
-    }
-
-    @ApiOperation(value = "淇敼妫�楠屽璞�")
-    @PostMapping("/upTestObject")
-    public Result upTestObject(@RequestBody StructureTestObject testObject) {
-        return Result.success(capacityScopeService.upTestObject(testObject));
-    }
-
-    @ApiOperation(value = "鑾峰彇妫�楠屽璞℃灇涓�")
-    @GetMapping("/selectTestObjectByName")
-    public Result selectTestObjectByName() {
-        return Result.success(capacityScopeService.selectTestObjectByName());
-    }
-
-    @ApiOperation(value = "璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)")
-    @PostMapping("/getInsProduction")
-    public Result getInsProduction() {
-        return Result.success(capacityScopeService.getInsProduction());
-    }
-
-    @ApiOperation(value = "缁存姢妫�楠屽璞$殑浜у搧")
-    @PostMapping("/selectProductListByObjectId")
-    public Result selectProductListByObjectId(Page page,ProductDTO1 productDTO) throws Exception {
-        return Result.success(productService.selectProductListByObjectId(page, productDTO));
-    }
-
-    @ApiOperation(value = "娣诲姞浜у搧")
-    @PostMapping("/addProduct")
-    public Result addProduct(@RequestBody Product product) {
-        return Result.success(productService.addProduct(product));
-    }
-
-    @ApiOperation(value = "淇敼浜у搧")
-    @PostMapping("/upProduct")
-    public Result upProduct(@RequestBody Product product) {
-        return Result.success(productService.upProduct(product));
-    }
-
-    @ApiOperation(value = "鍒犻櫎浜у搧")
-    @PostMapping("/delProduct")
-    public Result delProduct(Integer id) {
-        return Result.success(productService.delProduct(id));
-    }
-
-    @ApiOperation(value = "鑾峰彇妫�楠屽璞℃爲")
-    @GetMapping("/getItemTree")
-    public Result getItemTree() {
-        return Result.success(capacityScopeService.getItemTree());
-    }
-
-
-    @ApiOperation(value = "瑁呭瀵煎叆妫�楠岄」鐩�")
-    @PostMapping("/importEquipData")
-    @Transactional
-    public Result importEquipData(@RequestParam("file") MultipartFile file) throws Exception {
-        InputStream inputStream = file.getInputStream();
-        List<StructureItemParameter> lists = new ArrayList<>();
-        AtomicReference<String> sample = new AtomicReference<>();
-        ExcelUtil.readBySax(inputStream, -1, (i, l, list1) -> {
-            if (l == 1) {
-                sample.set(list1.get(1) + "");
-            }
-            if (l >= 1) {
-                StructureItemParameter str = new StructureItemParameter();
-                // 娴嬭瘯瀵硅薄
-                if (list1.get(1) == null) {
-                    str.setSample(null);
-                } else {
-                    String brand = (String) list1.get(1);
-                    StringBuilder builder = new StringBuilder();
-                    builder.append("[");
-                    // 浜у搧
-                    if (ObjectUtil.isNotEmpty(list1.get(2))) {
-                        String production = (String) list1.get(2);
-                        if (!production.contains("锛�")) {
-                            builder.append(String.format("[\"%s\",\"%s\"]", brand, production));
-                        } else {
-                            Arrays.stream(production.split("锛�")).forEach(item -> {
-                                builder.append(String.format("[\"%s\",\"%s\"],", brand, item));
-                            });
-                            builder.deleteCharAt(builder.length() - 1);
-                        }
-                    } else {
-                        builder.append("[");
-                        builder.append(String.format("\"%s\"", brand));
-                        builder.append("]");
-                    }
-                    builder.append("]");
-                    str.setSample(builder.toString());
-                }
-                // 妫�楠岄」
-                str.setInspectionItem(list1.get(4).toString().trim());
-                // 妫�楠岄」鑻辨枃
-                if (list1.get(5) != null) {
-                    str.setInspectionItemEn(list1.get(5).toString());
-                }
-                // 妫�楠屽瓙椤�
-                if (list1.get(6) == null) {
-                    str.setInspectionItemSubclass(null);
-                } else {
-                    str.setInspectionItemSubclass(list1.get(6).toString().trim());
-                }
-                // 妫�楠屽瓙椤硅嫳鏂�
-                if (list1.get(7) == null) {
-                    str.setInspectionItemSubclassEn(null);
-                } else {
-                    str.setInspectionItemSubclassEn(String.valueOf(list1.get(7).toString()));
-                }
-                // 妫�楠岄」鍒嗙被
-                if (list1.get(22) != null && list1.get(22) != "") {
-                    str.setInspectionItemClass(list1.get(22).toString().trim());
-                } else {
-                    str.setInspectionItemClass(null);
-                }
-                // 妫�楠岄」鍒嗙被鑻辨枃
-                if (list1.get(23) != null && list1.get(23) != "") {
-                    str.setInspectionItemClassEn(list1.get(23) + "");
-                } else {
-                    str.setInspectionItemClassEn(null);
-                }
-
-                LambdaQueryWrapper<StructureItemParameter> wrapper = Wrappers.lambdaQuery(StructureItemParameter.class)
-                        .eq(StructureItemParameter::getInspectionItem, str.getInspectionItem())
-                        .eq(StructureItemParameter::getSample, str.getSample())
-
-                        .last("limit 1");
-                // 鍒ゆ柇鏄惁鏈夋楠岄」绫诲瀷
-                if (ObjectUtils.isNotEmpty(str.getInspectionItemClass())) {
-                    wrapper.eq(StructureItemParameter::getInspectionItemClass, str.getInspectionItemClass());
-                }
-
-                // 鍒ゆ柇鏄惁鏈夋楠屽瓙椤�
-                if (ObjectUtils.isNotEmpty(str.getInspectionItemSubclass())) {
-                    wrapper.eq(StructureItemParameter::getInspectionItemSubclass, str.getInspectionItemSubclass());
-                }
-                StructureItemParameter db_str = structureItemParameterService.getOne(wrapper);
-                if (ObjectUtils.isNotEmpty(db_str)) {
-                    str.setId(db_str.getId());
-                }
-                // 鏂规硶鍚嶇О
-                if (list1.get(8) == null) {
-                    str.setMethod(null);
-                } else {
-                    StringBuffer buffer = new StringBuffer();
-                    String input = list1.get(8).toString();
-                    buffer.append("[");
-                    String[] values = input.split("锛�");
-                    for (String value : values) {
-                        buffer.append("\"").append(value.trim()).append("\",");
-                    }
-                    buffer.deleteCharAt(buffer.length() - 1);
-                    buffer.append("]");
-                    str.setMethod(buffer.toString());
-                }
-                // 璇曢獙瀹�
-                if (list1.get(9) == null) {
-                    str.setSonLaboratory(null);
-                } else {
-                    str.setSonLaboratory(list1.get(9).toString());
-                }
-                // 璁¢噺鍗曚綅
-                if (list1.get(10) == null) {
-                    str.setUnit(null);
-                } else {
-                    str.setUnit(list1.get(10).toString());
-                }
-                // 瑕佹眰鍊�
-                if (list1.get(11) == null) {
-                    str.setAskTell(null);
-                } else {
-                    str.setAskTell(list1.get(11).toString());
-                }
-                // 瑕佹眰鎻忚堪
-                if (list1.get(12) == null) {
-                    str.setAsk(null);
-                } else {
-                    str.setAsk(list1.get(12).toString());
-                }
-                // 鍗曚环
-                if (list1.get(13) == null) {
-                    str.setPrice(null);
-                } else {
-                    str.setPrice(list1.get(13) + "");
-                }
-                // 宸ユ椂绯绘暟
-                if (list1.get(14) == null) {
-                    str.setManHour(null);
-                } else {
-                    str.setManHour(Double.valueOf(list1.get(14).toString()));
-                }
-                // 宸ユ椂鍒嗙粍
-                if (list1.get(15) == null) {
-                    str.setManHourGroup(null);
-                } else {
-                    str.setManHourGroup(list1.get(15).toString());
-                }
-                // 棰勮瀹屾垚鏃堕棿
-                if (list1.get(16) == null) {
-                    str.setManDay(null);
-                } else {
-                    str.setManDay(Integer.valueOf(list1.get(16).toString()));
-                }
-                // 鏁版嵁绫诲瀷
-                String jy;
-                if (list1.get(17).toString().equals("闈為噰闆嗙被鍨�")) {
-                    jy = "0";
-                } else {
-                    jy = "1";
-                }
-                str.setInspectionItemType(jy);
-                // 妫�楠岄」绫诲瀷
-                String validateValueType = list1.get(18).toString();
-                if (ObjectUtils.isNotEmpty(validateValueType)) {
-                    List<SysDictData> enums = dictTypeService.selectDictDataByName("妫�楠屽�肩被鍨�")
-                            .stream().filter(sysDictData -> sysDictData.getDictLabel().equals(validateValueType)).collect(Collectors.toList());
-                    str.setInspectionValueType(enums.get(0).getDictValue());
-                }
-                int bsm;
-                //鐗规畩鏍囪瘑
-                if (list1.get(19).toString().equals("鍚�")) {
-                    bsm = 0;
-                } else {
-                    bsm = 1;
-                }
-                str.setBsm(bsm + "");
-                // 鏁板瓧瀛楀吀
-                if (list1.get(20) != null) {
-                    str.setDic(list1.get(20) + "");
-                } else {
-                    str.setDic(null);
-                }
-                // 鍘熷璁板綍妯℃澘
-                StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list1.get(21)));
-                if (standTempIdByName != null) {
-                    str.setTemplateId(standTempIdByName.getId());
-                } else {
-                    str.setTemplateId(null);
-                }
-                try {
-                    if (list1.get(24) != null) {
-                        str.setLaboratory(list1.get(24) + "");
-                    }
-                } catch (Exception e) {
-                }
-
-                // 鏉′欢
-                if (list1.get(25) == null) {
-                    str.setRadiusList(null);
-                } else {
-                    StringBuffer buffer = new StringBuffer();
-                    String input = list1.get(25).toString();
-                    buffer.append("[");
-                    String[] values = input.split("锛�");
-                    for (String value : values) {
-                        buffer.append("\"").append(value.trim()).append("\",");
-                    }
-                    buffer.deleteCharAt(buffer.length() - 1);
-                    buffer.append("]");
-                    str.setRadiusList(buffer.toString());
-                }
-                // 鏀惰垂鏍囧噯
-                if (list1.get(26) == null) {
-                    str.setRates(null);
-                } else {
-                    str.setRates(list1.get(26) + "");
-                }
-
-                lists.add(str);
-            }
-        });
-//        structureItemParameterService.removeNoSample(sample.get());
-        // 濡傛灉鏁版嵁搴撻噷闈㈢殑鏁版嵁瀛樺湪閭d箞灏辨墽琛屾洿鏂版嫹璐濇搷浣�
-        try {
-            structureItemParameterService.saveOrUpdateBatch(lists);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("鏈嶅姟绔姤閿�");
-        }
-        return Result.success();
-    }
-
-    @ApiOperation(value = "瀵煎叆妫�楠屽璞�")
-    @PostMapping("/importExcel")
-    public Result importExcel(@RequestParam("file") MultipartFile file) {
-        try {
-            EasyExcel.read(file.getInputStream(), StructureTestObjectData.class, new StructureTestObjectListener(productService)).sheet().doRead();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return Result.success();
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/CertificationController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/CertificationController.java
deleted file mode 100644
index 51ed763..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/CertificationController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.ruoyi.basic.controller;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.basic.pojo.Certification;
-import com.ruoyi.basic.service.CertificationService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@Api(tags = "璧勮川璇存槑")
-@AllArgsConstructor
-@RestController
-@RequestMapping("/certification")
-
-public class CertificationController {
-
-    private CertificationService certificationService;
-
-
-    @ApiOperation(value = "鏌ヨ璧勮川鏄庣粏鍒楄〃")
-    @PostMapping("/getCertificationDetail")
-    public Result getCertificationDetail(Page page,Certification certification) {
-        return Result.success(certificationService.getCertificationDetail(page, certification));
-    }
-
-    @ApiOperation(value = "娣诲姞璧勮川鏄庣粏鍒楄〃")
-    @PostMapping("/addCertificationDetail")
-    public Result addCertificationDetail(@RequestBody Certification certification) {
-        return Result.success(certificationService.addCertificationDetail(certification));
-    }
-    @ApiOperation(value = "鍒犻櫎璧勮川鏄庣粏鍒楄〃")
-    @PostMapping("/delCertificationDetail")
-    public Result<?> delCertificationDetail( String ids) {
-        return Result.success(certificationService.delCertificationDetail(ids));
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/LaboratoryController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/LaboratoryController.java
deleted file mode 100644
index c21f7be..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/LaboratoryController.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.ruoyi.basic.controller;
-
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.basic.pojo.Laboratory;
-import com.ruoyi.basic.service.LaboratoryService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-
-/**
- * 瀹為獙瀹ょ鐞�(LaboratoryController)琛ㄦ帶鍒跺眰
- */
-@Api(tags = "鍦烘墍鎴栬鏂�")
-
-@RestController
-@RequestMapping("/laboratoryScope")
-public class LaboratoryController {
-
-    @Resource
-    private LaboratoryService laboratoryService;
-
-    @ApiOperation(value = "鏌ヨ瀹為獙瀹ょ鐞嗗垪琛�")
-    @PostMapping("/selectItemParameter")
-    public Result selectItemParameter(Page page ,Laboratory itemParameter) {
-        return Result.success(laboratoryService.selectItemParameter(page, itemParameter));
-    }
-
-    @ApiOperation(value = "娣诲姞瀹為獙瀹ゅ弬鏁�")
-    @PostMapping("/addParameter")
-    public Result addParameter(@RequestBody Laboratory itemParameter) {
-        return Result.success(laboratoryService.addParameter(itemParameter));
-    }
-
-    @ApiOperation(value = "鍒犻櫎瀹為獙瀹ゅ弬鏁�")
-    @PostMapping("/delParameter")
-    public Result<?> delParameter(Integer id) {
-        return Result.success(laboratoryService.delParameter(id));
-    }
-
-    @ApiOperation(value = "淇敼瀹為獙瀹ゅ弬鏁�")
-    @PostMapping("/upParameter")
-    public Result<?> upParameter(@RequestBody Laboratory itemParameter) {
-        return Result.success(laboratoryService.upParameter(itemParameter));
-    }
-
-    @ApiOperation(value = "鑾峰彇瀹為獙瀹ゅ悕绉�")
-    @GetMapping("/obtainItemParameterList")
-    public Result obtainItemParameterList() {
-        return Result.success(laboratoryService.obtainItemParameterList());
-    }
-}
-
-
-
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/ProductPartController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/ProductPartController.java
deleted file mode 100644
index ca3a5b9..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/ProductPartController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.ruoyi.basic.controller;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.basic.pojo.ProductPart;
-import com.ruoyi.basic.service.ProductPartService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@AllArgsConstructor
-@RequestMapping("/productPart")
-@Api(tags = "浜у搧闆朵欢缁戝畾")
-public class ProductPartController {
-
-    private ProductPartService productPartService;
-
-    @ApiOperation(value = "鏍规嵁浜у搧id鏌ヨ闆朵欢")
-    @PostMapping("/selectByProductId")
-    public Result selectByProductId(Page page,ProductPart productPart){
-        return Result.success(productPartService.selectByProductId(page,productPart));
-    }
-
-    @ApiOperation(value = "鏂板浜у搧闆朵欢")
-    @PostMapping("/addProductPart")
-    public Result addProductPart(@RequestBody ProductPart productPart) {
-        productPartService.addProductPart(productPart);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "鏇存柊浜у搧闆朵欢")
-    @PostMapping("/updateProductPart")
-    public Result updateProductPart(@RequestBody ProductPart productPart) {
-        productPartService.updateProductPartById(productPart);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "鍒犻櫎浜у搧闆朵欢")
-    @PostMapping("/deleteProductPart")
-    public Result deleteProductPart(Integer id) {
-        productPartService.removeById(id);
-        return Result.success();
-    }
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/ProductSupplierDensityController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/ProductSupplierDensityController.java
deleted file mode 100644
index 1d86970..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/ProductSupplierDensityController.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.ruoyi.basic.controller;
-
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.basic.pojo.ProductSupplierDensity;
-import com.ruoyi.basic.service.ProductSupplierDensityService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * 浜у搧鍘傚瀵嗗害缁戝畾琛�
- *
- * @author zhuo
- * @since 2024-09-19
- */
-@RestController
-@RequestMapping("/productSupplierDensity")
-@AllArgsConstructor
-@Api(tags = "浜у搧鍘傚瀵嗗害缁戝畾")
-public class ProductSupplierDensityController {
-
-    private ProductSupplierDensityService productSupplierDensityService;
-
-    @ApiOperation(value = "鏍规嵁浜у搧id鏌ヨ鍘傚瀵嗗害缁戝畾")
-    @PostMapping("/selectSupplierDensityByProductId")
-    public Result selectSupplierDensityByProductId(Page page,ProductSupplierDensity supplierDensity) {
-        return Result.success(productSupplierDensityService.selectByProductId(page, supplierDensity));
-    }
-
-    @ApiOperation(value = "鏂板鍘傚瀵嗗害缁戝畾")
-    @PostMapping("/addProductSupplierDensity")
-    public Result addProductSupplierDensity(@RequestBody ProductSupplierDensity supplierDensity) {
-        productSupplierDensityService.addProductSupplierDensity(supplierDensity);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "鏇存柊鍘傚瀵嗗害缁戝畾")
-    @PostMapping("/updateProductSupplierDensity")
-    public Result updateProductSupplierDensity(@RequestBody ProductSupplierDensity supplierDensity) {
-        productSupplierDensityService.updateProductSupplierDensity(supplierDensity);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "鍒犻櫎鍘傚瀵嗗害缁戝畾")
-    @PostMapping("/deleteProductSupplierDensity")
-    public Result deleteProductSupplierDensity(Integer id) {
-        productSupplierDensityService.removeById(id);
-        return Result.success();
-    }
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/SealController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/SealController.java
deleted file mode 100644
index 02ab6bb..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/SealController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.ruoyi.basic.controller;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.Laboratory;
-import com.ruoyi.basic.pojo.Seal;
-import com.ruoyi.basic.service.SealService;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.common.utils.JackSonUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍗扮珷绠$悊(SealController)琛ㄦ帶鍒跺眰
- */
-@Api(tags = "鍗扮珷绠$悊")
-
-@RestController
-@RequestMapping("/sealScope")
-public class SealController {
-
-    @Resource
-    private SealService sealService;
-
-    @ApiOperation(value = "娣诲姞鍗扮珷鍙傛暟")
-    @PostMapping("/addSeal")
-    public Result addSeal(@RequestBody Seal seal) {
-        int i = sealService.addSeal(seal);
-        if(i>0){
-            Integer labId = seal.getLabId();
-            List<Laboratory> laboratory = sealService.Laboratory(labId);
-            return Result.success(laboratory);
-        }else{
-            return Result.fail();
-        }
-
-    }
-    @ApiOperation(value="鏌ヨ鍗扮珷鍒楄〃")
-    @PostMapping("/selectSeal")
-    public  Result selectSeal(Page page,Seal seal) {
-        return Result.success(sealService.selectSeal(page,seal));
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/StandardMethodController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/StandardMethodController.java
deleted file mode 100644
index f74f38b..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/StandardMethodController.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.ruoyi.basic.controller;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.basic.pojo.StandardMethod;
-import com.ruoyi.basic.service.StandardMethodService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-
-@Api(tags = "鏍囧噯鏂规硶")
-@RestController
-@RequestMapping("/standardMethod")
-@AllArgsConstructor
-public class StandardMethodController {
-
-    private StandardMethodService standardMethodService;
-
-    @ApiOperation(value = "鑾峰彇鏍囧噯鏂规硶鍒楄〃")
-    @PostMapping("/selectStandardMethodList")
-    public Result selectStandardMethodList(Page page,StandardMethod standardMethod) throws Exception {
-        return Result.success(standardMethodService.selectStandardMethodList(page, standardMethod));
-    }
-
-    @ApiOperation(value = "鑾峰彇鏍囧噯鏂规硶鏋氫妇")
-    @GetMapping("/selectStandardMethods")
-    public Result selectStandardMethods(){
-        return Result.success(standardMethodService.selectStandardMethods());
-    }
-
-    @ApiOperation(value = "娣诲姞鏍囧噯鏂规硶")
-    @PostMapping("/addStandardMethod")
-    public Result addStandardMethod(@RequestBody StandardMethod standardMethod) {
-        return Result.success(standardMethodService.addStandardMethod(standardMethod));
-    }
-
-    @ApiOperation(value = "鍒犻櫎鏍囧噯鏂规硶")
-    @PostMapping("/delStandardMethod")
-    public Result<?> delStandardMethod(Integer id) {
-        return Result.success(standardMethodService.delStandardMethod(id));
-    }
-
-    @ApiOperation(value = "淇敼鏍囧噯鏂规硶")
-    @PostMapping("/upStandardMethod")
-    public Result<?> upStandardMethod(@RequestBody StandardMethod standardMethod) {
-        return Result.success(standardMethodService.upStandardMethod(standardMethod));
-    }
-
-    @ApiOperation(value = "瀵煎叆鏍囧噯鏄庣粏")
-    @PostMapping("/importStandardDetails")
-    public Result<?> importStandardDetails(@RequestPart("file") MultipartFile file) throws IOException {
-        standardMethodService.inputExcel(file);
-        return Result.success();
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/StandardTemplateController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/StandardTemplateController.java
deleted file mode 100644
index c14f1a3..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/StandardTemplateController.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.ruoyi.basic.controller;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.basic.pojo.StandardTemplate;
-import com.ruoyi.basic.service.StandardTemplateService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-@RequestMapping("/StandardTemplate")
-@RestController
-@AllArgsConstructor
-@Api(tags = "鍘熷璁板綍妯℃澘")
-public class StandardTemplateController {
-
-    private StandardTemplateService standardTemplateService;
-
-    @ApiOperation(value = "鑾峰彇鍘熷璁板綍妯℃澘鍒楄〃")
-    @PostMapping("/selectStandardTemplatePageList")
-    public Result selectStandardTemplatePageList(Page page,StandardTemplate standardTemplate) throws Exception {
-        return Result.success(standardTemplateService.selectStandardTemplatePageList(page, standardTemplate));
-    }
-
-    @ApiOperation(value = "娣诲姞鍘熷璁板綍妯℃澘")
-    @PostMapping("/addStandardTemplate")
-    public Result addStandardTemplate(@RequestBody StandardTemplate standardTemplate) {
-        return Result.success(standardTemplateService.addStandardTemplate(standardTemplate));
-    }
-
-    @ApiOperation(value = "淇敼鍘熷璁板綍妯℃澘")
-    @PostMapping("/upStandardTemplate")
-    public Result<?> upStandardTemplate(@RequestBody StandardTemplate standardTemplate) {
-        return Result.success(standardTemplateService.upStandardTemplate(standardTemplate));
-    }
-
-    @ApiOperation(value = "鍒犻櫎鍘熷璁板綍妯℃澘")
-    @PostMapping("/delStandardTemplate")
-    public Result<?> delStandardTemplate(Integer id) {
-        return Result.success(standardTemplateService.delStandardTemplate(id));
-    }
-
-    @ApiOperation(value = "鏌ヨ鍘熷璁板綍妯℃澘鏋氫妇")
-    @GetMapping("/getStandardTemplate")
-    public Result<?> getStandardTemplate() {
-        return Result.success(standardTemplateService.getStandardTemplate());
-    }
-
-    @ApiOperation(value = "閫氳繃妯℃澘id鑾峰彇妫�楠岄」妯℃澘鍐呭")
-    @PostMapping("/getStandTempThingById")
-    public Result<?> getStandTempThingById(Integer id) {
-        return Result.success(standardTemplateService.getStandTempThingById(id));
-    }
-
-    @ApiOperation(value = "缂栬緫妯℃澘缂栧埗")
-    @GetMapping("/getEditTemplatePreparation")
-    public Result<?> getEditTemplatePreparation(@RequestParam("id") Integer id) {
-        StandardTemplate byId = standardTemplateService.getById(id);
-        return Result.success("OK", byId.getThing());
-    }
-
-    @ApiOperation(value = "澶嶅埗鍘熷璁板綍妯℃澘")
-    @PostMapping("/copyStandardTemplate")
-    public Result copyStandardTemplate(@RequestBody StandardTemplate newTemplate) {
-        return Result.success(standardTemplateService.copyStandardTemplate(newTemplate));
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/StandardTreeController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/StandardTreeController.java
deleted file mode 100644
index d24ae09..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/StandardTreeController.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package com.ruoyi.basic.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.basic.dto.CopyStandardProductListDto;
-import com.ruoyi.basic.dto.FactoryDto;
-import com.ruoyi.basic.dto.InsSampleReceiveDto;
-import com.ruoyi.basic.dto.ResetTreeDragDTO;
-import com.ruoyi.basic.pojo.StandardProductList;
-import com.ruoyi.basic.pojo.StandardProductListSupplierAsk;
-import com.ruoyi.basic.pojo.StandardTree;
-import com.ruoyi.basic.service.StandardMethodListService;
-import com.ruoyi.basic.service.StandardProductListService;
-import com.ruoyi.basic.service.StandardProductListSupplierAskService;
-import com.ruoyi.basic.service.StandardTreeService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@AllArgsConstructor
-@RequestMapping("/standardTree")
-@Api(tags = "鏍囧噯搴�")
-public class StandardTreeController {
-
-    private StandardTreeService standardTreeService;
-
-    private StandardMethodListService standardMethodListService;
-
-    private StandardProductListService standardProductListService;
-
-    private StandardProductListSupplierAskService standardProductListSupplierAskService;
-
-    @ApiOperation(value = "鑾峰彇鏍囧噯鏍�")
-    @GetMapping("/selectStandardTreeList")
-    public Result selectStandardTreeList() {
-        return Result.success(standardTreeService.selectStandardTreeList());
-    }
-
-    @ApiOperation(value = "鑾峰彇鏍囧噯鏍�(妫�楠屼笅鍗�)")
-    @GetMapping("/selectStandardTreeList2")
-    public Result selectStandardTreeList2() {
-        return Result.success(standardTreeService.selectStandardTreeList());
-    }
-
-    @ApiOperation(value = "娣诲姞鏍囧噯鏍�")
-    @PostMapping("/addStandardTree")
-    public Result addStandardTree(@RequestBody StandardTree standardTree) {
-        return Result.success(standardTreeService.addStandardTree(standardTree));
-    }
-
-    @ApiOperation(value = "缁欐爣鍑嗘爲娣诲姞妫�楠屾爣鍑�")
-    @PostMapping("/addStandardMethodList")
-    public Result addStandardMethodList(String tree, Integer standardId) {
-        return Result.success(standardMethodListService.addStandardMethodList(standardId, tree));
-    }
-
-    @ApiOperation(value = "鏍规嵁鏍囧噯鏍戣繘琛屾爣鍑嗘煡璇�")
-    @PostMapping("/selectsStandardMethodByFLSSM")
-    public Result selectsStandardMethodByFLSSM(String tree) {
-        return Result.success(standardMethodListService.selectsStandardMethodByFLSSM(tree));
-    }
-
-    @ApiOperation(value = "淇敼鏍囧噯搴撲腑鐨勫唴瀹�")
-    @PostMapping("/upStandardProductList")
-    public Result upStandardProductList(String str) {
-        StandardProductList list = JSON.parseObject(str, StandardProductList.class);
-        return Result.success(standardProductListService.upStandardProductList(list));
-    }
-
-    @ApiOperation(value = "淇敼鏍囧噯搴撳尯闂�")
-    @PostMapping("/updateSection")
-    public Result updateSection(String str) {
-        StandardProductList list = JSON.parseObject(str, StandardProductList.class);
-        return Result.success(standardProductListService.updateSection(list));
-    }
-
-    @ApiOperation(value = "鍒犻櫎鏍囧噯鏍戜笅鐨勬楠屾爣鍑�")
-    @PostMapping("/delStandardMethodByFLSSM")
-    public Result delStandardMethodByFLSSM(Integer id) {
-        return Result.success(standardMethodListService.delStandardMethodByFLSSM(id));
-    }
-
-    @ApiOperation(value = "鍒犻櫎鏍囧噯鏍戜笅鐨勬楠岄」鐩�")
-    @PostMapping("/delStandardProductByIds")
-    public Result delStandardProductByIds(String ids) {
-        JSONArray lists = JSON.parseArray(ids);
-        return Result.success(standardProductListService.delStandardProduct(lists));
-    }
-
-    @ApiOperation(value = "鏂板鏍囧噯鏍戜笅鐨勬楠岄」鐩�")
-    @PostMapping("/addStandardProduct")
-    public Result addStandardProduct(String ids, String tree) {
-        return Result.success(standardTreeService.addStandardProduct(ids, tree));
-    }
-
-    @ApiOperation(value = "鍒犻櫎鏍囧噯鏍戠殑灞傜骇")
-    @PostMapping("/delStandardTree")
-    public Result delStandardTree(String tree) {
-        return Result.success(standardTreeService.delStandardTree(tree));
-    }
-
-    @ApiOperation(value = "閫氳繃鏍囧噯鏍戞煡璇㈠搴旂殑妫�楠岄」鐩�")
-    @PostMapping("/selectStandardProductList")
-    public Result selectStandardProductList(@RequestBody InsSampleReceiveDto insSample) {
-        return Result.success(standardProductListService.selectStandardProductList(insSample));
-    }
-
-    @ApiOperation(value = "閫氳繃妫�楠屾爣鍑嗘煡璇㈡楠岄」鐩�")
-    @PostMapping("/selectStandardProductListByMethodId")
-    public Result selectStandardProductListByMethodId(Integer id, String tree, Integer page) {
-        return Result.success(standardProductListService.selectStandardProductListByMethodId(id, tree, page));
-    }
-
-    @ApiOperation(value = "鎵归噺缂栬緫鏌ヨ妫�楠岄」鐩�")
-    @PostMapping("/selectStandardProductByMethodId")
-    public Result selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items) {
-        return Result.success(standardProductListService.selectStandardProductByMethodId(id, tree, page, laboratory, item, items));
-    }
-
-    @ApiOperation(value = "鎵归噺缂栬緫鏌ヨ鎵�鏈夋楠岄」鐩拰妫�楠屽瓙椤规灇涓�")
-    @PostMapping("/selectStandardProductEnumByMethodId")
-    public Result selectStandardProductEnumByMethodId(Integer id, String tree, String item) {
-        return Result.success(standardProductListService.selectStandardProductEnumByMethodId(id, tree, item));
-    }
-
-    @ApiOperation(value = "鑾峰彇鏍囧噯鏍戜笅鏍囧噯鏂规硶鏋氫妇")
-    @GetMapping("/selectStandardMethodEnum")
-    public Result selectStandardMethodEnum() {
-        return Result.success(standardMethodListService.selectStandardMethodEnum());
-    }
-
-    @ApiOperation(value = "鑾峰彇浜у搧鏋舵瀯")
-    @GetMapping("/getStandardTree2")
-    public Result getStandardTree2() {
-        return Result.success(standardTreeService.getStandardTree2());
-    }
-
-    @ApiOperation(value = "鎵归噺淇敼椤圭洰鍐呭")
-    @PostMapping("/upStandardProducts")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "standardProductList", dataTypeClass = StandardProductList.class),
-            @ApiImplicitParam(name = "ids", dataTypeClass = Integer.class)
-    })
-    public Result upStandardProducts(@RequestBody Map<String, Object> product) {
-        return Result.success(standardTreeService.upStandardProducts(product));
-    }
-
-    @PostMapping("/getStandTreeBySampleType")
-    @ApiOperation("浠呰幏鍙栧厜绾ょ殑鍨嬪彿")
-    public Result<?> getStandTreeBySampleType(String laboratory, String sampleType) {
-        return Result.success(standardTreeService.getStandTreeBySampleType(laboratory, sampleType));
-    }
-
-    @ApiOperation("瀵煎叆鏍囧噯搴�")
-    @PostMapping("/inExcelOfTree/{isEquipment}")
-    public Result inExcelOfTree(@RequestParam("file") MultipartFile file, @PathVariable("isEquipment") Boolean isEquipment) {
-        if (!isEquipment) {
-            standardTreeService.inExcelOfTree(file);
-        } else {
-            standardTreeService.importWorkstationExcel(file);
-        }
-        return Result.success();
-    }
-
-    @ApiOperation("閲嶇疆鏍囧噯搴撳崟浠�")
-    @PostMapping("/resetTreeOfPrice")
-    public Result resetTreeOfPrice(String tree, Integer standardId) {
-        standardTreeService.resetTreeOfPrice(tree, standardId);
-        return Result.success();
-    }
-
-    @ApiOperation("閲嶇疆鏍囧噯搴撳伐鏃剁郴鏁�")
-    @PostMapping("/resetTreeOfHour")
-    public Result resetTreeOfHour(String tree, Integer standardId) {
-        standardTreeService.resetTreeOfHour(tree, standardId);
-        return Result.success();
-    }
-
-    @ApiOperation("閲嶇疆鏍囧噯搴撹姹傛弿杩板拰瑕佹眰鍊�")
-    @PostMapping("/resetTreeOfAsk")
-    public Result resetTreeOfAsk(String tree, Integer standardId) {
-        standardTreeService.resetTreeOfAsk(tree, standardId);
-        return Result.success();
-    }
-
-    @ApiOperation("鏍囧噯搴撴嫋鎷�")
-    @PostMapping("/resetTreeDrag")
-    public Result resetTreeDrag(@RequestBody ResetTreeDragDTO resetTreeDragDTO) {
-        standardProductListService.resetTreeDrag(resetTreeDragDTO);
-        return Result.success();
-    }
-
-    @ApiOperation("鏍囧噯搴撴嫋鎷藉叏閮�")
-    @PostMapping("/resetTreeDragBatch")
-    public Result resetTreeDragBatch(@RequestBody Map<String, Object> params) {
-        List<StandardProductList> standardProductLists = (List<StandardProductList>) params.get("params");
-        standardProductListService.resetTreeDragBatch(standardProductLists);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "鏍囧噯鏍戞帓搴�")
-    @PostMapping("/updateTreeSort")
-    public Result updateTreeSort(@RequestBody List<FactoryDto> list) {
-        return Result.success(standardTreeService.updateTreeSort(list));
-    }
-
-    /*************************************************** 鍘傚鐗规畩瑕佹眰鍊煎鐞� ************************************************************/
-
-    @ApiOperation(value = "鏍规嵁浜у搧id鏌ヨ鍘傚瑕佹眰鍊肩粦瀹�")
-    @PostMapping("/selectSupplierAsk")
-    public Result selectSupplierAsk(StandardProductListSupplierAsk supplierAsk) throws Exception {
-        return Result.success(standardProductListSupplierAskService.selectByProductId(supplierAsk));
-    }
-
-    @ApiOperation(value = "鏂板鍘傚瑕佹眰鍊肩粦瀹�")
-    @PostMapping("/addProductSupplierAsk")
-    public Result addProductSupplierAsk(String str) {
-        StandardProductListSupplierAsk supplierAsk = JSON.parseObject(str, StandardProductListSupplierAsk.class);
-        return Result.success(standardProductListSupplierAskService.addProductSupplierAsk(supplierAsk));
-    }
-
-    @ApiOperation(value = "鏇存柊鍘傚瑕佹眰鍊肩粦瀹�")
-    @PostMapping("/updateProductSupplierAsk")
-    public Result updateProductSupplierAsk(String str) {
-        StandardProductListSupplierAsk supplierAsk = JSON.parseObject(str, StandardProductListSupplierAsk.class);
-        standardProductListSupplierAskService.updateProductSupplierAsk(supplierAsk);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "鍒犻櫎鍘傚瑕佹眰鍊肩粦瀹�")
-    @PostMapping("/deleteProductSupplierAsk")
-    public Result deleteProductSupplierAsk(Integer supplierAskId) {
-        standardProductListSupplierAskService.removeById(supplierAskId);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "淇敼鏍囧噯鏍�")
-    @PostMapping("/updateStandardTree")
-    public Result updateStandardTree(@RequestBody StandardTree standardTree) {
-        return Result.success(standardTreeService.updateStandardTree(standardTree));
-    }
-
-    @ApiOperation(value = "妫�楠岄」瑕佹眰鍊煎鍒跺姣�")
-    @PostMapping("/copyStandardProductList")
-    public Result copyStandardProductList(@RequestBody CopyStandardProductListDto copyStandardProductListDto) {
-        return Result.success(standardProductListService.copyStandardProductList(copyStandardProductListDto));
-    }
-
-    @ApiOperation(value = "妫�楠岄」瑕佹眰鍊煎崟鐙姣�")
-    @PostMapping("/copyStandardProductOne")
-    public Result copyStandardProductOne(@RequestBody CopyStandardProductListDto copyStandardProductListDto) {
-        return Result.success(standardProductListService.copyStandardProductOne(copyStandardProductListDto));
-    }
-
-    @ApiOperation(value = "妫�楠岄」鎵归噺淇敼瑕佹眰鍊艰姹傛弿杩�")
-    @PostMapping("/updateStandardProductListBatch")
-    public Result updateStandardProductListBatch(@RequestBody Map<String, Object> param) {
-        List<StandardProductList> standardProductList = (List<StandardProductList>) param.get("standardProductList");
-        return Result.success(standardProductListService.updateBatchById(standardProductList));
-    }
-
-    @ApiOperation(value = "妫�楠岄」澶嶅埗鎺掑簭")
-    @PostMapping("/copyStandardProductSort")
-    public Result copyStandardProductSort(@RequestBody CopyStandardProductListDto copyStandardProductListDto) {
-        return Result.success(standardProductListService.copyStandardProductSort(copyStandardProductListDto));
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/StructureTestObjectPartController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/StructureTestObjectPartController.java
deleted file mode 100644
index 5a073e8..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/StructureTestObjectPartController.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.ruoyi.basic.controller;
-
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.basic.pojo.StructureTestObjectPart;
-import com.ruoyi.basic.service.StructureTestObjectPartService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * 妫�楠屽璞¢浂浠惰〃
- *
- * @author zhuo
- * @since 2024-08-07
- */
-@RestController
-@RequestMapping("/structureTestObjectPart")
-@AllArgsConstructor
-@Api(tags = "妫�楠屽璞¢浂浠惰〃")
-public class StructureTestObjectPartController {
-
-    private StructureTestObjectPartService structureTestObjectPartService;
-
-    @ApiOperation(value = "鏍规嵁妫�楠屽璞d鏌ヨ闆朵欢")
-    @PostMapping("/selectByTestObjectId")
-    public Result selectByTestObjectId(Page page,StructureTestObjectPart structureTestObjectPart){
-        return Result.success(structureTestObjectPartService.selectByTestObjectId(page,structureTestObjectPart));
-    }
-
-    @ApiOperation(value = "鏂板妫�楠屽璞¢浂浠�")
-    @PostMapping("/addTestObjectPart")
-    public Result addTestObjectPart(@RequestBody StructureTestObjectPart structureTestObjectPart) {
-        structureTestObjectPartService.addTestObjectPart(structureTestObjectPart);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "鏇存柊妫�楠屽璞¢浂浠�")
-    @PostMapping("/updateTestObjectPart")
-    public Result updateTestObjectPart(@RequestBody StructureTestObjectPart structureTestObjectPart) {
-        structureTestObjectPartService.updateTestObjectPart(structureTestObjectPart);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "鍒犻櫎妫�楠屽璞¢浂浠�")
-    @PostMapping("/deleteTestObjectPart")
-    public Result deleteTestObjectPart(Integer id) {
-        structureTestObjectPartService.removeById(id);
-        return Result.success();
-    }
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/CopyStandardProductListDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/CopyStandardProductListDto.java
deleted file mode 100644
index 7287adb..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/CopyStandardProductListDto.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import com.ruoyi.basic.pojo.StandardProductList;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * 鏍囧噯妫�楠岄」澶嶅埗
- *
- * @Author zhuo
- * @Date 2024/10/31
- */
-@Data
-public class CopyStandardProductListDto {
-
-    @ApiModelProperty("鍘熸湰妫�楠岄」淇℃伅")
-    private List<StandardProductList> oldStandardProductList;
-
-    @ApiModelProperty("闇�瑕佸姣旂殑妫�楠岄」淇℃伅")
-    private List<StandardProductList> newStandardProductList;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/FactoryDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/FactoryDto.java
deleted file mode 100644
index 612bcf8..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/FactoryDto.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class FactoryDto {
-
-    private String code = "[1]";
-
-    private String label;
-
-    private String value;
-
-    private List<LaboratoryDto> children;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
deleted file mode 100644
index db5c582..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
-/**
- * 鍘熸潗鏂欐煡璇�, 鎺掗櫎浜嗕緵搴斿晢
- * @Author zhuo
- * @Date 2024/8/28
- */
-@Data
-public class IfsInventoryQuantityCheckDto  implements Serializable {
-
-    private Integer id;
-
-    @ApiModelProperty("鍩�")
-    private String contract;
-
-    @ApiModelProperty("璁㈠崟鍙�")
-    private String orderNo;
-
-
-    @ApiModelProperty("琛屽彿")
-    private String lineNo;
-
-    @ApiModelProperty("涓嬭揪鍙�")
-    private String releaseNo;
-
-    @ApiModelProperty("鎺ユ敹鍙�")
-    private Integer receiptNo;
-
-    @ApiModelProperty("闆朵欢鍙�")
-    private String partNo;
-
-    @ApiModelProperty("闆朵欢鎻忚堪")
-    private String partDesc;
-
-    @ApiModelProperty("鐘舵�佹弿杩�")
-    private String status;
-
-    @ApiModelProperty("鐘舵��")
-    private String statusDb;
-
-    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
-    private BigDecimal qtyArrived;
-
-    @ApiModelProperty("宸叉楠岀殑璐拱鏁伴噺")
-    private BigDecimal qtyInspected;
-
-    @ApiModelProperty("瑕佹楠岀殑閲囪喘鏁伴噺")
-    private BigDecimal qtyToInspect;
-
-    @ApiModelProperty("鎶佃揪鐨勫簱瀛樻暟閲�")
-    private BigDecimal invQtyInStore;
-
-    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
-    private BigDecimal purQtyInStore;
-
-    @ApiModelProperty("閰嶇疆鏍囪瘑")
-    private String configurationId;
-
-    @ApiModelProperty("鎵瑰彿")
-    private String lotBatchNo;
-
-    @ApiModelProperty("wdr鍙�")
-    private String waivDevRejNo;
-
-    @ApiModelProperty("娲诲姩搴忓垪")
-    private Integer activitySeq;
-
-
-    @ApiModelProperty("搴忓垪鍙�")
-    private String serialNo;
-
-    @ApiModelProperty("搴撲綅鍙�")
-    private String locationNo;
-
-    @ApiModelProperty("鐗堟湰鍙�")
-    private String engChgLevel;
-
-    @ApiModelProperty("鎺ユ敹浜�")
-    private String receiver;
-
-    @ApiModelProperty("鎺ユ敹浜哄鍚�")
-    private String receiverName;
-
-    @ApiModelProperty("閲囪喘鍛�")
-    private String buyerCode;
-
-    @ApiModelProperty("閲囪喘鍛樺鍚�")
-    private String buyerName;
-
-    @ApiModelProperty("瀹為檯鍒拌揣鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime arriveDate;
-
-    @ApiModelProperty("瀹為檯浜よ揣鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime deliveryDate;
-
-    @ApiModelProperty("鐢熶骇鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime productDate;
-
-    @ApiModelProperty("澶辨晥鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime invalidDate;
-
-
-    @ApiModelProperty("瀹℃壒鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime approvedDate;
-
-    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜�")
-    private String reqCeater;
-
-    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜哄鍚�")
-    private String reqCeaterName;
-
-    @ApiModelProperty("閲囪喘璁㈠崟琛屽娉�")
-    private String lineRemarks;
-
-    @ApiModelProperty("鍗曚綅")
-    private String buyUnitMeas;
-
-
-    private Integer isSource;
-
-    private Integer number;
-
-
-    private Integer state;
-
-    @ApiModelProperty("鎺ユ敹鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime receiverDate;
-
-    @ApiModelProperty("鏄惁涓洪娆″嚭鐜� 0 鍚� 1 鏄�")
-    private Integer isFirst;
-
-    @ApiModelProperty("鐩爣搴撲綅鍙�")
-    private String toLocation;
-
-    @ApiModelProperty("鏄惁鏄姤妫� 0 鍚� 1 鏄�")
-    private Integer isInspect;
-
-    @ApiModelProperty("鎶ユ浜�")
-    private String declareUser;
-
-
-    @ApiModelProperty("鎶ユ浜篿d")
-    private Integer declareUserId;
-
-    @ApiModelProperty("鍗曚綅")
-    private String partUnit;
-
-    @ApiModelProperty("浜т笟閾炬娴嬫暟鎹�")
-    private String industryChain;
-
-    @ApiModelProperty("鎶ユ鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime declareDate;
-
-    @ApiModelProperty("鏄惁鍗″彲浠ュ搴︽楠� 0 鍚� 1 鏄�")
-    private Integer isQuarter;
-
-    // 淇敼鍚庣殑
-    @ApiModelProperty("鎵瑰彿")
-    private String updateBatchNo;
-
-    @ApiModelProperty("鏄惁鏄摐鍗曚笣, 0鍚�, 1鏄�")
-    private Integer isCopper;
-
-    @ApiModelProperty("鐗╂枡绫诲瀷")
-    private Integer isExpire;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
deleted file mode 100644
index 237224e..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Data
-public class IfsInventoryQuantityDto extends IfsInventoryQuantityCheckDto {
-
-    /**
-     * 濮旀墭缂栧彿
-     */
-    @ApiModelProperty("濮旀墭缂栧彿")
-    private String entrustCode;
-
-    @ApiModelProperty("妫�楠屽璞�")
-    private String sampleType;
-
-    @ApiModelProperty("鏍峰搧鍚嶇О")
-    private String sampleName;
-
-    @ApiModelProperty("鏍峰搧鍨嬪彿")
-    private String sampleModel;
-
-    @ApiModelProperty("鏍峰搧缂栧彿")
-    private String sampleCode;
-
-    // 杩涘巶
-    @ApiModelProperty("璁㈠崟id")
-    private Integer enterOrderId;
-
-    @ApiModelProperty("鎶ュ憡id")
-    private String enterReportId;
-
-    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
-    private String enterUrl;
-
-    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
-    private String enterUrlS;
-
-    // 瀛e害
-    @ApiModelProperty("璁㈠崟id")
-    private Integer quarterOrderId;
-
-    @ApiModelProperty("鎶ュ憡id")
-    private String quarterReportId;
-
-    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
-    private String quarterUrl;
-
-    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
-    private String quarterUrlS;
-
-    private Integer orderState;
-
-    @ApiModelProperty("涓嬪彂鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime sendTime;
-
-    @ApiModelProperty("鏉愭枡鍘傚")
-    private String supplierName;
-
-    @ApiModelProperty("濮旀墭浜�")
-    private String prepareUser;
-
-    @ApiModelProperty("棰滆壊")
-    private String color;
-
-    @ApiModelProperty("鏍囩鐘舵��")
-    private String labelStatus;
-
-    @ApiModelProperty("鏍囩鏉″舰鐮�")
-    private String labelBarCode;
-
-    @ApiModelProperty("鍒涘缓浜�")
-    private Integer createUser;
-
-    @ApiModelProperty("妫�楠屼汉")
-    private String userName;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java
deleted file mode 100644
index 71bfddb..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.basic.pojo.IfsInventoryQuantity;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-/**
- * 鑳芥煡璇㈠埌渚涘簲鍟�
- */
-@Data
-@ExcelIgnoreUnannotated
-public class IfsInventoryQuantitySupplierDto extends IfsInventoryQuantity {
-
-    /**
-     * 濮旀墭缂栧彿
-     */
-    @ExcelProperty(index = 2, value = "濮旀墭缂栧彿")
-    @ApiModelProperty("濮旀墭缂栧彿")
-    private String entrustCode;
-
-    @ApiModelProperty("鏍峰搧id")
-    private Integer sampleId;
-
-    @ApiModelProperty("妫�楠屽璞�")
-    private String sampleType;
-
-    @ExcelProperty(index = 7, value = "鏍峰搧鍚嶇О")
-    @ApiModelProperty("鏍峰搧鍚嶇О")
-    private String sampleName;
-
-    @ExcelProperty(index = 8, value = "鏍峰搧鍨嬪彿")
-    @ApiModelProperty("鏍峰搧鍨嬪彿")
-    private String sampleModel;
-
-    @ApiModelProperty("鏍峰搧缂栧彿")
-    private String sampleCode;
-
-    // 杩涘巶
-    @ApiModelProperty("杩涘巶璁㈠崟id")
-    private Integer enterOrderId;
-
-    @ApiModelProperty("鎶ュ憡id")
-    private String enterReportId;
-
-    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
-    private String enterUrl;
-
-    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
-    private String enterUrlS;
-
-    // 瀛e害
-    @ApiModelProperty("瀛e害璁㈠崟id")
-    private Integer quarterOrderId;
-
-    @ApiModelProperty("鎶ュ憡id")
-    private String quarterReportId;
-
-    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
-    private String quarterUrl;
-
-    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
-    private String quarterUrlS;
-
-    private Integer orderState;
-
-    @ApiModelProperty("涓嬪彂鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime sendTime;
-
-    @ApiModelProperty("濮旀墭浜�")
-    private String prepareUser;
-
-    @ApiModelProperty("棰滆壊")
-    private String color;
-
-    @ApiModelProperty("鏍囩鐘舵��")
-    private String labelStatus;
-
-    @ApiModelProperty("鏍囩鏉″舰鐮�")
-    private String labelBarCode;
-
-    @ApiModelProperty("鍒涘缓浜�")
-    private Integer createUser;
-
-    @ExcelProperty(index = 9, value = "妫�楠屼汉")
-    @ApiModelProperty("妫�楠屼汉")
-    private String userName;
-
-    @ExcelProperty(index = 10, value = "涓嬪彂鏃堕棿")
-    private String sendTimeString;
-
-    @ExcelProperty(index = 14, value = "鎺ユ敹鏃堕棿")
-    private String receiverDateString;
-
-    @ExcelProperty(index = 15, value = "鎶ユ鏃堕棿")
-    private String declareDateString;
-
-    // 鍚堟牸鐘舵��,: 0 妫�楠屼腑, 1鍚堟牸, 2涓嶅悎鏍�, 3鏈笅鍗�,4璁╂鏀捐
-    @ExcelProperty(index = 6, value = "妫�楠岀姸鎬�")
-    private String inspectStatusString;
-
-    @ApiModelProperty("鎶ユ寮�濮嬫椂闂�")
-    private String beginDeclareDate;
-
-    @ApiModelProperty("鎶ユ缁撴潫鏃堕棿")
-    private String endDeclareDate;
-
-    @ApiModelProperty("涓嶅悎鏍兼弿杩�")
-    @ExcelProperty(index = 16, value = "涓嶅悎鏍兼弿杩�")
-    private String unqualifiedDesc;
-
-
-    @ApiModelProperty("涓嶅悎鏍奸」")
-    @ExcelProperty(index = 17, value = "涓嶅悎鏍奸」")
-    private String unqualifiedItem;
-
-    @ApiModelProperty("鍏嶆")
-    private Integer isExemption;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/InsSampleReceiveDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/InsSampleReceiveDto.java
deleted file mode 100644
index fbc2683..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/InsSampleReceiveDto.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import com.ruoyi.basic.pojo.InsSample1;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * @Author zhuo
- * @Date 2024/10/29
- */
-@Data
-public class InsSampleReceiveDto extends InsSample1 {
-
-    @ApiModelProperty("闆朵欢鍙�")
-    private String partNo;
-
-    @ApiModelProperty("鍘熸潗鏂檌d")
-    private Integer ifsInventoryId;
-
-    @ApiModelProperty("鑺暟")
-    private String cores;
-
-    @ApiModelProperty("鍨嬪彿鍙傛暟")
-    private String modelNum;
-
-    @ApiModelProperty("瀵间綋鏉愯川")
-    private String conductorMaterial;
-
-    @ApiModelProperty("瀵间綋绫诲瀷")
-    private String conductorType;
-
-    @ApiModelProperty("鏄惁鏄數缂嗛厤缃�")
-    private String isCableTag;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/LaboratoryDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/LaboratoryDto.java
deleted file mode 100644
index e3f000c..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/LaboratoryDto.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class LaboratoryDto {
-
-    private String code = "[2]";
-
-    private String label;
-
-    private String value;
-
-    private List<SampleTypeDto> children;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/ModelDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/ModelDto.java
deleted file mode 100644
index 5f8321e..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/ModelDto.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import lombok.Data;
-
-@Data
-public class ModelDto {
-
-    private String code = "[5]";
-
-    private String label;
-
-    private String value;
-
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/PageTestObjectDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/PageTestObjectDto.java
deleted file mode 100644
index 684cf46..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/PageTestObjectDto.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import com.ruoyi.basic.pojo.StructureTestObject;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * @Author 鎴村崜
- * @Date 2024/2/26
- */
-@Data
-public class PageTestObjectDto extends StructureTestObject {
-
-    @ApiModelProperty(value = "浜у搧")
-    private String product;
-
-    @ApiModelProperty(value = "鍒涘缓浜�")
-    private String createUserName;
-
-    @ApiModelProperty(value = "鏇存柊浜�")
-    private String updateUserName;
-
-    @ApiModelProperty(value = "闆朵欢鍙�")
-    private String partNo;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/ProductDTO1.java b/basic-server/src/main/java/com/ruoyi/basic/dto/ProductDTO1.java
deleted file mode 100644
index 8ed7631..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/ProductDTO1.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import com.ruoyi.basic.pojo.Product;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * @Author zhuo
- * @Date 2024/8/5
- */
-@Data
-public class ProductDTO1 extends Product {
-
-    @ApiModelProperty(value = "闆朵欢鍙�")
-    private String partNo;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/ProductDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/ProductDto.java
deleted file mode 100644
index efd5d2e..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/ProductDto.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import lombok.Data;
-
-@Data
-public class ProductDto {
-
-    private Integer id;
-
-    private String name;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/ResetTreeDragDTO.java b/basic-server/src/main/java/com/ruoyi/basic/dto/ResetTreeDragDTO.java
deleted file mode 100644
index d875a91..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/ResetTreeDragDTO.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * @Author zhuo
- * @Date 2024/8/22
- */
-@Data
-public class ResetTreeDragDTO {
-    @ApiModelProperty(value = "寮�濮嬬储寮�")
-    private String beginIndex;
-
-    @ApiModelProperty(value = "缁撴潫绱㈠紩")
-    private String endIndex;
-
-    @ApiModelProperty(value = "鏍囧噯缂栧彿id")
-    private String methodId;
-
-    @ApiModelProperty(value = "鏁�")
-    private String tree;
-
-    @ApiModelProperty(value = "妫�楠岄」琛宨d")
-    private String productionId;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java
deleted file mode 100644
index 18fc086..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class SampleDto {
-
-    private String code = "[4]";
-
-    private String label;
-
-    private String value;
-
-    private String partNo;
-
-    // 鏍峰搧鑻辨枃
-    private String sampleEn;
-
-    private List<ModelDto> children;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/SampleTypeDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/SampleTypeDto.java
deleted file mode 100644
index 0ae8087..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/SampleTypeDto.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class SampleTypeDto {
-
-    private String code = "[3]";
-
-    // 妫�娴嬪璞d
-    private Integer sampleTypeId;
-
-    // 妫�娴嬪璞℃帓搴�
-    private Integer sort;
-
-    private String label;
-
-    private String value;
-
-    private String partNo;
-
-    // 瀵硅薄鑻辨枃
-    private String sampleTypeEn;
-
-    private List<SampleDto> children;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/TestItemDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/TestItemDto.java
deleted file mode 100644
index 4363a1a..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/TestItemDto.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.ruoyi.basic.dto;
-
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class TestItemDto {
-
-    private Integer id;
-
-    private String name;
-
-    private List<ProductDto> children;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/excel/StructureTestObjectData.java b/basic-server/src/main/java/com/ruoyi/basic/excel/StructureTestObjectData.java
deleted file mode 100644
index 4fc2fd2..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/excel/StructureTestObjectData.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.ruoyi.basic.excel;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-
-@Data
-public class StructureTestObjectData {
-    @ExcelProperty(value = "鍦烘墍")
-    private String laboratory;
-
-    @ExcelProperty(value = "妫�娴嬪璞�")
-    private String specimenName;
-
-    @ExcelProperty(value = "妫�娴嬪璞�(EN)")
-    private String specimenNameEn;
-
-    @ExcelProperty(value = "瀵硅薄浠e彿")
-    private String code;
-
-    @ExcelProperty(value = "浜у搧鍚嶇О")
-    private String name;
-
-    @ExcelProperty(value = "浜у搧鍚嶇О(EN)")
-    private String nameEn;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/excel/StructureTestObjectListener.java b/basic-server/src/main/java/com/ruoyi/basic/excel/StructureTestObjectListener.java
deleted file mode 100644
index 04d3c2c..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/excel/StructureTestObjectListener.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.ruoyi.basic.excel;
-
-import com.alibaba.excel.context.AnalysisContext;
-import com.alibaba.excel.event.AnalysisEventListener;
-import com.ruoyi.basic.service.ProductService;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class StructureTestObjectListener extends AnalysisEventListener<StructureTestObjectData> {
-    private static final int BATCH_COUNT = 1000;
-    List<StructureTestObjectData> list = new ArrayList<>();
-
-    private ProductService productService;
-
-    public StructureTestObjectListener(ProductService productService) {
-        this.productService = productService;
-    }
-
-    @Override
-    public void invoke(StructureTestObjectData data, AnalysisContext analysisContext) {
-        list.add(data);
-        if (list.size() >= BATCH_COUNT) {
-            save();
-            list.clear();
-        }
-    }
-
-    @Override
-    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
-        save();
-    }
-
-
-    private void save() {
-        productService.importPartExcel(list);
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/CertificationMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/CertificationMapper.java
deleted file mode 100644
index 2d50f3d..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/CertificationMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.Certification;
-import org.apache.ibatis.annotations.Param;
-
-public interface CertificationMapper extends BaseMapper<Certification> {
-
-    //鏌ヨ璧勮川鏄庣粏鍒楄〃
-    IPage<Certification> getCertificationDetail(Page page, @Param("ew") QueryWrapper<Certification> ew);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/IfsInventoryQuantityMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/IfsInventoryQuantityMapper.java
deleted file mode 100644
index 1963bb9..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/IfsInventoryQuantityMapper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.basic.dto.IfsInventoryQuantityDto;
-import com.ruoyi.basic.pojo.IfsInventoryQuantity;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Mapper
-public interface IfsInventoryQuantityMapper extends BaseMapper<IfsInventoryQuantity> {
-
-    /**
-     * 鎵撳嵃鏍囩鏌ヨ
-     * @param ids
-     * @return
-     */
-    List<IfsInventoryQuantityDto> printLabel(@Param("ids") List<Integer> ids);
-
-    /**
-     *
-     * @param ifsInventoryId
-     * @return
-     */
-    int selectReportCountById(@Param("ifsInventoryId") Integer ifsInventoryId);
-
-
-    /**
-     * 鏌ヨ褰撳墠瀛e害鏄惁鍑虹幇杩囪鏉愭枡
-     * @param partDetail         鍨嬪彿
-     * @param supplierName       渚涘簲鍟嗗悕绉�
-     * @param startOfNextQuarter 瀛e害寮�濮嬫椂闂�
-     * @param endOfQuarter       瀛e害缁撴潫鏃堕棿
-     * @return
-     */
-    Integer selectIsFirst(@Param("partDetail") String partDetail,
-                          @Param("supplierName") String supplierName,
-                          @Param("startOfNextQuarter") LocalDateTime startOfNextQuarter,
-                          @Param("endOfQuarter") LocalDateTime endOfQuarter);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/LaboratoryMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/LaboratoryMapper.java
deleted file mode 100644
index df6aab9..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/LaboratoryMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.Laboratory;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * 瀹為獙瀹ょ鐞�(Laboratory)琛ㄦ暟鎹簱璁块棶灞�
- */
-public interface LaboratoryMapper extends BaseMapper<Laboratory> {
-
-    IPage<Laboratory> selectItemParameter(Page page, @Param("ew") QueryWrapper<Laboratory> ew);
-
-    Object obtainItemParameterList(@Param("page") Page page, @Param("ew") QueryWrapper<Laboratory> ew);
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java
deleted file mode 100644
index 8fdbc4a..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.dto.ProductDTO1;
-import com.ruoyi.basic.pojo.Product;
-import org.apache.ibatis.annotations.Param;
-
-/**
-* @author z1292
-* @description 閽堝琛ㄣ�恜roduct(浜у搧琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
-* @createDate 2024-04-26 01:11:02
-* @Entity com.ruoyi.basic.pojo.Product
-*/
-public interface ProductMapper extends BaseMapper<Product> {
-
-    IPage<Product> selectProductListByObjectId(Page page, @Param("ew") QueryWrapper<ProductDTO1> ew, @Param("partNo") String partNo);
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductPartMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductPartMapper.java
deleted file mode 100644
index 9d2943f..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductPartMapper.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.ruoyi.basic.pojo.ProductPart;
-import org.apache.ibatis.annotations.Param;
-
-public interface ProductPartMapper extends BaseMapper<ProductPart> {
-    IPage<ProductPart> selectListByProductId(IPage<ProductPart> page,
-                                              @Param("ew") QueryWrapper<ProductPart> ew,
-                                              @Param("productId") Integer productId);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductSupplierDensityMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductSupplierDensityMapper.java
deleted file mode 100644
index 80b387c..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductSupplierDensityMapper.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.ProductSupplierDensity;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * 浜у搧鍘傚瀵嗗害缁戝畾琛�
- *
- * @author zhuo
- * @since 2024-09-19
- */
-@Mapper
-public interface ProductSupplierDensityMapper extends BaseMapper<ProductSupplierDensity> {
-
-    IPage<ProductSupplierDensity> selectListByProductId(@Param("page") Page page, @Param("ew") QueryWrapper<ProductSupplierDensity> ew, @Param("productId") Integer productId);
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/SealMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/SealMapper.java
deleted file mode 100644
index 9b96fc9..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/SealMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.Laboratory;
-import com.ruoyi.basic.pojo.Seal;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-public interface SealMapper extends BaseMapper<Seal> {
-    IPage<Seal>selectSeal(Page page, @Param("ew") QueryWrapper<Seal> ew);
-    List<Laboratory> selectLaboratory (Integer labId);
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardMethodListMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardMethodListMapper.java
deleted file mode 100644
index a5e337b..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardMethodListMapper.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.basic.pojo.StandardMethodList;
-import com.ruoyi.basic.pojo.StandardProductList;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_method_list(鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
-* @createDate 2024-03-04 13:44:04
-* @Entity com.ruoyi.basic.pojo.StandardMethodList
-*/
-public interface StandardMethodListMapper extends BaseMapper<StandardMethodList> {
-
-    Map<String, String> selectStandardMethodById(Integer id);
-
-    String selectUserById(Integer id);
-
-    List<StandardMethodList> selectStandardMethodLists(String tree);
-
-    List<StandardMethodList> selectStandardMethodListsByNull(String tree);
-
-    List<StandardMethodList> selectStandardMethodLists3(String tree);
-
-    List<StandardMethodList> selectStandardMethodLists2(@Param("data1") String data1, @Param("data2") String data2, @Param("data3") String data3, @Param("data4") String data4, @Param("data5") String data5);
-
-    List<StandardProductList> selectParameterList(String code);
-
-    List<StandardMethodList> selectListEnum();
-
-    Integer getStandardMethodId(String code);
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardMethodMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardMethodMapper.java
deleted file mode 100644
index fb88032..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardMethodMapper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.framework.mybatis_config.MyBaseMapper;
-import com.ruoyi.basic.pojo.StandardMethod;
-import org.apache.ibatis.annotations.Param;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_method(鏍囧噯鏂规硶)銆戠殑鏁版嵁搴撴搷浣淢apper
-* @createDate 2024-03-03 19:21:41
-* @Entity com.ruoyi.basic.pojo.StandardMethod
-*/
-public interface StandardMethodMapper extends MyBaseMapper<StandardMethod> {
-
-    IPage<StandardMethod> selectStandardMethodList(Page page, @Param("ew") QueryWrapper<StandardMethod> ew);
-
-    StandardMethod selectStandMethodById(Integer id);
-
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListMapper.java
deleted file mode 100644
index f25f673..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListMapper.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.ruoyi.basic.pojo.StandardProductList;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_product_list(鏍囧噯鏍戜笅鐨勬楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淢apper
-* @createDate 2024-03-05 10:33:29
-* @Entity com.ruoyi.basic.pojo.StandardProductList
-*/
-public interface StandardProductListMapper extends BaseMapper<StandardProductList> {
-
-    IPage<StandardProductList> standardProductListIPage(@Param("id") Integer id, @Param("tree") String tree, IPage<StandardProductList> page, @Param("laboratory") String laboratory, @Param("insItem") String insItem, @Param("insItems") String insItems);
-
-    StandardProductList getOne(@Param("standardMethodListId") Integer standardMethodListId, @Param("inspectionItem") String inspectionItem, @Param("sample") String sample, @Param("inspectionItemSubclass") String inspectionItemSubclass, @Param("model") String model, @Param("inspectionItemClass") String inspectionItemClass);
-
-    List<StandardProductList> selectDetail(@Param("standardMethodListId") Integer standardMethodListId, @Param("state") int state, @Param("model") String model, @Param("isCableTag") String isCableTag);
-
-    List<StandardProductList> selectDetail2(@Param("standardMethodListId") Integer standardMethodListId, @Param("state") int state, @Param("tree") String tree, @Param("isCableTag") String isCableTag);
-
-    /**
-     * 鏌ヨ闆朵欢棰滆壊
-     * @param partNo
-     * @return
-     */
-    Map<String, String> selectPartColor(@Param("partNo") String partNo);
-
-    /**
-     * 鍖洪棿淇敼
-     * @param productList
-     * @return
-     */
-    void updateSection(@Param("productList") StandardProductList productList);
-
-
-    /**
-     * 浠庝笂寰�涓嬩慨鏀归『搴�
-     * @param beginIndex 寮�濮嬩綅缃�
-     * @param endIndex 缁撴潫浣嶇疆
-     * @param methodId 鏍囧噯id
-     * @param tree 鏍�
-     */
-    void updateSortUp(@Param("beginIndex") Integer beginIndex,
-                      @Param("endIndex") Integer endIndex,
-                      @Param("methodId") Integer methodId,
-                      @Param("tree") String tree);
-
-    /**
-     * 浠庝笅缃戜笂淇敼椤哄簭
-     * @param beginIndex
-     * @param endIndex
-     * @param methodId
-     * @param tree
-     */
-    void updateSortDown(@Param("beginIndex") Integer beginIndex,
-                        @Param("endIndex") Integer endIndex,
-                        @Param("methodId") Integer methodId,
-                        @Param("tree") String tree);
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListSupplierAskMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListSupplierAskMapper.java
deleted file mode 100644
index ff3cdfb..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListSupplierAskMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.basic.pojo.StandardProductListSupplierAsk;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 妫�楠岄」鐩巶瀹跺瘑搴︾粦瀹氳〃
- *
- * @author zhuo
- * @since 2024-09-23
- */
-@Mapper
-public interface StandardProductListSupplierAskMapper extends BaseMapper<StandardProductListSupplierAsk> {
-
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTemplateMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTemplateMapper.java
deleted file mode 100644
index feb76f2..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTemplateMapper.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.StandardTemplate;
-import org.apache.ibatis.annotations.Param;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_template(鏍囧噯妯℃澘)銆戠殑鏁版嵁搴撴搷浣淢apper
-* @createDate 2024-03-11 13:47:52
-* @Entity com.ruoyi.basic.pojo.StandardTemplate
-*/
-public interface StandardTemplateMapper extends BaseMapper<StandardTemplate> {
-
-    IPage<StandardTemplate> selectStandardTemplatePageList(Page page, @Param("ew") QueryWrapper<StandardTemplate> ew);
-
-    StandardTemplate getStandTempIdByName(String name);
-
-    /**
-     * 鏌ヨ鍘嬬缉鍚庣殑鏁版嵁
-     * @param templateId
-     * @return
-     */
-    String selectCompressThing(Integer templateId);
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeMapper.java
deleted file mode 100644
index 4deb5df..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeMapper.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.dto.*;
-import com.ruoyi.basic.pojo.IfsInventoryQuantity;
-import com.ruoyi.basic.pojo.StandardMethodList;
-import com.ruoyi.basic.pojo.StandardProductList;
-import com.ruoyi.basic.pojo.StandardTree;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * @author Administrator
- * @description 閽堝琛ㄣ�恠tandard_tree(鏍囧噯鏍�)銆戠殑鏁版嵁搴撴搷浣淢apper
- * @createDate 2024-03-01 15:06:44
- * @Entity com.ruoyi.basic.pojo.StandardTree
- */
-public interface StandardTreeMapper extends BaseMapper<StandardTree> {
-
-    List<FactoryDto> selectStandardTreeList();
-
-    List<StandardTree> selectStandardTreeList2(String sampleType);
-
-    StandardProductList selectStandardProductById(Integer id);
-
-    List<StandardProductList> getStandardProductListBySample(String sampleType);
-
-    List<StandardMethodList> getStandardMethodListBySample(String sampleType);
-
-    List<StandardProductList> selectStandardProductListByTree(String tree, String sample, String model, String trees, String laboratory);
-
-    List<StandardProductList> selectStandardProductListByTree2(String tree, String sample, String model, String trees, String laboratory);
-
-
-    List<SampleTypeDto> getStandardTree2();
-
-    List<SampleDto> getStandardTree3(String sampleType);
-
-
-    String getLaboratory(String str);
-
-    Integer getStructureItemParameterId(String sampleType, String item, String itemChild, String inspectionItemClass);
-
-    List<ProductDto> selectPList(String name);
-
-    String selSample(String sample);
-
-    List<FactoryDto> selectStandardTreeListByPartNo(@Param("partNo") String partNo);
-
-    IPage<IfsInventoryQuantity> selectIfsPage(IPage<IfsInventoryQuantity> page,
-                                              @Param("ew") QueryWrapper<IfsInventoryQuantity> ew);
-
-    IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page,
-                                                    @Param("ew") QueryWrapper<IfsInventoryQuantityDto> ew);
-
-
-    IPage<IfsInventoryQuantityCheckDto> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, @Param("ew")QueryWrapper<IfsInventoryQuantityCheckDto> ew);
-
-    /**
-     * 鍘熸潗鎶ユ鏌ヨ鍏ㄩ儴(鍒嗛〉)
-     * @param page
-     * @param ew
-     * @return
-     */
-    IPage<IfsInventoryQuantitySupplierDto> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, @Param("ew") QueryWrapper<IfsInventoryQuantitySupplierDto> ew, @Param("beginDeclareDate") String beginDeclareDate, @Param("endDeclareDate")String endDeclareDate);
-
-    /**
-     * 鍘熸潗鎶ユ鏌ヨ鍏ㄩ儴(鏃犲垎椤�)
-     * @param ew
-     * @return
-     */
-    List<IfsInventoryQuantitySupplierDto> getIfsByOverList(@Param("ew") QueryWrapper<IfsInventoryQuantitySupplierDto> ew, @Param("beginDeclareDate") String beginDeclareDate, @Param("endDeclareDate")String endDeclareDate);
-
-    /**
-     * 鍘熸潗鏂欐煡璇㈠搴︽楠�
-     * @param page
-     * @param
-     * @param beginDeclareDate
-     * @param endDeclareDate
-     * @return
-     */
-    IPage<IfsInventoryQuantitySupplierDto> getIfsByQuarter(Page<IfsInventoryQuantitySupplierDto> page, @Param("ew") QueryWrapper<IfsInventoryQuantitySupplierDto> ew, @Param("beginDeclareDate") String beginDeclareDate, @Param("endDeclareDate")String endDeclareDate);
-
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureItemParameterMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureItemParameterMapper.java
deleted file mode 100644
index 654741a..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureItemParameterMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.dto.TestItemDto;
-import com.ruoyi.basic.pojo.StructureItemParameter;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ暟鎹簱璁块棶灞�
- *
- * @author makejava
- * @since 2024-02-26 16:21:17
- */
-public interface StructureItemParameterMapper extends BaseMapper<StructureItemParameter> {
-
-    IPage<StructureItemParameter> selectItemParameterList(Page page, @Param("ew") QueryWrapper<StructureItemParameter> ew);
-
-    List<Map<String, Object>> getInsProduction();
-
-    List<TestItemDto> getItemTree();
-
-    int removeNoSample(@Param("sample") String sample);
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureTestObjectMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureTestObjectMapper.java
deleted file mode 100644
index 1ada57c..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureTestObjectMapper.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.dto.PageTestObjectDto;
-import com.ruoyi.basic.pojo.StructureTestObject;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * 妫�娴嬪璞�(StructureTestObject)琛ㄦ暟鎹簱璁块棶灞�
- *
- * @author makejava
- * @since 2024-02-26 17:36:41
- */
-public interface StructureTestObjectMapper extends BaseMapper<StructureTestObject> {
-
-    IPage<PageTestObjectDto> selectTestObjectList(Page page, @Param("ew") QueryWrapper<PageTestObjectDto> ew, @Param("partNo") String partNo);
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureTestObjectPartMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureTestObjectPartMapper.java
deleted file mode 100644
index 33e54f7..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StructureTestObjectPartMapper.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.ruoyi.basic.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.StructureTestObjectPart;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * 妫�楠屽璞¢浂浠惰〃
- *
- * @author zhuo
- * @since 2024-08-07
- */
-@Mapper
-public interface StructureTestObjectPartMapper extends BaseMapper<StructureTestObjectPart> {
-    IPage<StructureTestObjectPart> selectListByTestObjectId(Page page, @Param("ew") QueryWrapper<StructureTestObjectPart> structureTestObjectPartQueryWrapper, @Param("testObjectId") Integer testObjectId);
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/Certification.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/Certification.java
deleted file mode 100644
index 7eb1649..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/Certification.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-@TableName(value = "certification")
-@Data
-public class Certification implements Serializable {
-
-    @ApiModelProperty(value = "涓婚敭")
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty(value = "璧勮川鍚嶇О")
-    private String name;
-
-    @ApiModelProperty(value = "璧勮川缂栫爜")
-    private String code;
-
-    @ApiModelProperty(value = "棰佸彂鏈烘瀯")
-    private String organization;
-
-    @ApiModelProperty(value = "璧勮川璇存槑")
-    private String explanation;
-
-    @ApiModelProperty(value = "棣栨棰佸彂鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime firstIssuanceDate;
-
-    @ApiModelProperty(value = "鏈�杩戦鍙戞椂闂�")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime latestIssuanceDate;
-
-
-
-    @ApiModelProperty(value = "鍒版湡棰佸彂鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime expireTime;
-
-
-    @ApiModelProperty(value = "棰佸竷鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime dateOfIssuance;
-
-    @ApiModelProperty(value = "鍒涘缓浜�")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-
-    @ApiModelProperty(value = "鏇存柊浜�")
-    private String createUserName;
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty(value = "璧勮川鍥剧墖鍦板潃")
-    private String imageUrl;
-
-    @ApiModelProperty(value = "璧勮川闄勪欢鍦板潃")
-    private String fileUrl;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/IfsInventoryQuantity.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/IfsInventoryQuantity.java
deleted file mode 100644
index 3984802..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/IfsInventoryQuantity.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
-@Data
-@TableName("ifs_inventory_quantity")
-@ExcelIgnoreUnannotated
-public class IfsInventoryQuantity  implements Serializable {
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-
-    @ApiModelProperty("鍩�")
-    private String contract;
-
-    @ExcelProperty(index = 13, value = "璁㈠崟鍙�")
-    @ApiModelProperty("璁㈠崟鍙�")
-    private String orderNo;
-
-    @ApiModelProperty("琛屽彿")
-    private String lineNo;
-
-    @ApiModelProperty("涓嬭揪鍙�")
-    private String releaseNo;
-
-    @ApiModelProperty("鎺ユ敹鍙�")
-    private Integer receiptNo;
-
-    @ExcelProperty(index = 3, value = "闆朵欢鍙�")
-    @ApiModelProperty("闆朵欢鍙�")
-    private String partNo;
-
-    @ExcelProperty(index = 4, value = "闆朵欢鎻忚堪")
-    @ApiModelProperty("闆朵欢鎻忚堪")
-    private String partDesc;
-
-    @ApiModelProperty("鐘舵�佹弿杩�(IFS鍘熸湰鎷夊彇鐨勭姸鎬�)")
-    private String status;
-
-    @ApiModelProperty("鐘舵��(IFS鍘熸湰鎷夊彇鐨勭姸鎬�)")
-    private String statusDb;
-
-    @ExcelProperty(index = 11, value = "鎶佃揪鐨勯噰璐暟閲�")
-    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
-    private BigDecimal qtyArrived;
-
-    @ApiModelProperty("宸叉楠岀殑璐拱鏁伴噺")
-    private BigDecimal qtyInspected;
-
-    @ApiModelProperty("瑕佹楠岀殑閲囪喘鏁伴噺")
-    private BigDecimal qtyToInspect;
-
-    @ApiModelProperty("渚涘簲鍟嗙紪鍙�")
-    private String supplierId;
-
-    @ExcelProperty(index = 5, value = "渚涘簲鍟嗗悕绉�")
-    @ApiModelProperty("渚涘簲鍟嗗悕绉�")
-    private String supplierName;
-
-    @ApiModelProperty("鎶佃揪鐨勫簱瀛樻暟閲�")
-    private BigDecimal invQtyInStore;
-
-    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
-    private BigDecimal purQtyInStore;
-
-    @ApiModelProperty("閰嶇疆鏍囪瘑")
-    private String configurationId;
-
-    @ApiModelProperty("鎵瑰彿")
-    private String lotBatchNo;
-
-    @ApiModelProperty("wdr鍙�")
-    private String waivDevRejNo;
-
-    @ApiModelProperty("娲诲姩搴忓垪")
-    private Integer activitySeq;
-
-    @ApiModelProperty("搴忓垪鍙�")
-    private String serialNo;
-
-    @ApiModelProperty("搴撲綅鍙�")
-    private String locationNo;
-
-    @ApiModelProperty("鐗堟湰鍙�")
-    private String engChgLevel;
-
-    @ApiModelProperty("鎺ユ敹浜�")
-    private String receiver;
-
-    @ApiModelProperty("鎺ユ敹浜哄鍚�")
-    private String receiverName;
-
-    @ApiModelProperty("閲囪喘鍛�")
-    private String buyerCode;
-
-    @ApiModelProperty("閲囪喘鍛樺鍚�")
-    private String buyerName;
-
-    @ApiModelProperty("瀹為檯鍒拌揣鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime arriveDate;
-
-    @ApiModelProperty("瀹為檯浜よ揣鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime deliveryDate;
-
-    @ApiModelProperty("鐢熶骇鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime productDate;
-
-    @ApiModelProperty("澶辨晥鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime invalidDate;
-
-
-    @ApiModelProperty("瀹℃壒鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime approvedDate;
-
-    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜�")
-    private String reqCeater;
-
-    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜哄鍚�")
-    private String reqCeaterName;
-
-    @ApiModelProperty("閲囪喘璁㈠崟琛屽娉�")
-    private String lineRemarks;
-
-    @ExcelProperty(index = 12, value = "鍗曚綅")
-    @ApiModelProperty("鍗曚綅")
-    private String buyUnitMeas;
-
-    @ApiModelProperty("鏄惁涓篿fs鎷夊彇,0 鍚�, 1鏄�")
-    private Integer isSource;
-
-    private Integer number;
-
-
-    @ApiModelProperty("鐘舵��: 0:寰呮姤妫�, 1:寰呮楠�, :宸插鏍�")
-    private Integer state;
-
-    @ApiModelProperty("鎺ユ敹鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime receiverDate;
-
-    @ApiModelProperty("鏄惁涓洪娆″嚭鐜� 0 鍚� 1 鏄�")
-    private Integer isFirst;
-
-    @ApiModelProperty("鐩爣搴撲綅鍙�")
-    private String toLocation;
-
-    @ApiModelProperty("鏄惁鏄姤妫� 0 鍚� 1 鏄�")
-    private Integer isInspect;
-
-    @ApiModelProperty("鎶ユ浜�")
-    private String declareUser;
-
-
-    @ApiModelProperty("鎶ユ浜篿d")
-    private Integer declareUserId;
-
-    @ApiModelProperty("鍗曚綅")
-    private String partUnit;
-
-    @ApiModelProperty("浜т笟閾炬娴嬫暟鎹�")
-    private String industryChain;
-
-    @ApiModelProperty("鎶ユ鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-    private LocalDateTime declareDate;
-
-    @ApiModelProperty("鏄惁鍗″彲浠ュ搴︽楠� 0 鍚� 1 鏄�")
-    private Integer isQuarter;
-
-    // 淇敼鍚庣殑
-    @ExcelProperty(index = 1, value = "鎵瑰彿")
-    @ApiModelProperty("鎵瑰彿")
-    private String updateBatchNo;
-
-    @ApiModelProperty("鏄惁缁撴潫, 0鍚�, 1鏄�")
-    private Integer isFinish;
-
-    @ApiModelProperty("鏄惁鏄摐鍗曚笣, 0鍚�, 1鏄�")
-    private Integer isCopper;
-
-    // 鍚堟牸鐘舵��,: 0 妫�楠屼腑, 1鍚堟牸, 2涓嶅悎鏍�, 3鏈笅鍗�,4璁╂鏀捐
-    @ApiModelProperty("妫�楠岀姸鎬�")
-    private Integer inspectStatus;
-
-    @ApiModelProperty("鏄惁閲囪喘璁㈠崟鐧昏: 0鍚�, 1:鏄�")
-    private Integer isRegister;
-
-    @ApiModelProperty("鏄惁淇敼杩囨壒鍙�: 0鍚�, 1:鏄�")
-    private Integer isUpdateBatch;
-
-    // 鏄惁鏄繃鏈熸潗鏂�: 0鍚�, 1:鏄�"
-    @ApiModelProperty("鐗╂枡绫诲瀷")
-    private Integer isExpire;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/InsSample1.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/InsSample1.java
deleted file mode 100644
index 19d5cb9..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/InsSample1.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 妫�楠屾牱鍝�
- * @TableName ins_sample
- */
-@TableName(value ="ins_sample")
-@Data
-public class InsSample1 implements Serializable {
-    /**
-     *
-     */
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    /**
-     * 1锛氬悎鏍� 0锛氫笉鍚堟牸
-     */
-    private Integer insResult;
-
-    /**
-     * 澶栭敭锛歩ns_order琛╥d
-     */
-    private Integer insOrderId;
-
-    /**
-     * 閰嶅鏍峰搧鍨嬪彿
-     */
-    private String joinModel;
-
-    /**
-     * 閰嶅鏍峰搧鍚嶇О
-     */
-    private String joinName;
-
-    /**
-     * 閰嶅鏍峰搧鏁伴噺
-     */
-    private Integer joinNum;
-
-    /**
-     * 鏍峰搧缂栫爜
-     */
-    private String sampleCode;
-
-    /**
-     * 妫�楠屽伐鍘�
-     */
-    private String factory;
-
-    /**
-     * 瀹為獙瀹ゅ悕绉�
-     */
-    private String laboratory;
-
-    /**
-     * 鏍峰搧绫诲瀷
-     */
-    private String sampleType;
-
-    /**
-     * 鏍峰搧鍚嶇О
-     */
-    private String sample;
-
-    /**
-     * 瑙勬牸鍨嬪彿
-     */
-    private String model;
-
-    /**
-     * 妫�楠岀姸鎬�(0锛氬緟妫�楠�1:妫�楠屼腑 2:宸叉楠�3锛氬緟澶嶆牳4锛氬鏍告湭閫氳繃5锛氬鏍搁�氳繃)
-     */
-    private Integer insState;
-
-    /**
-     * 澶囨敞
-     */
-    private String remark;
-
-    private Integer standardMethodListId;
-
-    @ApiModelProperty("鏍峰搧鍗曚綅")
-    private String unit;
-
-    private Integer cellId;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty("淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    private Integer parentId;
-
-    @ApiModelProperty("鏁伴噺")
-    private Integer quantity;
-
-    @ApiModelProperty("鐗规畩鏍囧噯鏂规硶")
-    private String specialStandardMethod;
-
-    @TableField(select = false,exist = false)
-    private Integer num=1;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/Laboratory.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/Laboratory.java
deleted file mode 100644
index a9343a1..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/Laboratory.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 瀹為獙瀹ょ鐞�(Laboratory)琛ㄥ璞�
- */
-@TableName(value = "laboratory")
-@Data
-@NoArgsConstructor
-public class Laboratory  implements Serializable {
-    @ApiModelProperty(value = "涓婚敭")
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty(value = "瀹為獙瀹ゅ悕绉�")
-    private String laboratoryName;
-
-    @ApiModelProperty(value = "鍦烘墍缂栫爜")
-    private String laboratoryNumber;
-
-    @ApiModelProperty(value = "瀹為獙瀹や唬鍙�")
-    private String laboratoryCode;
-
-    @ApiModelProperty(value = "璐熻矗浜虹數璇�")
-    private String phoneNumber;
-
-    @ApiModelProperty(value = "璐熻矗浜�")
-    @TableField(fill = FieldFill.INSERT)
-    private String head;
-
-    @ApiModelProperty(value = "鍦板潃")
-    private String address;
-
-    @ApiModelProperty(value = "鍒涘缓浜�")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @ApiModelProperty(value = "鍒涘缓浜�")
-    private String createUserName;
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/Product.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/Product.java
deleted file mode 100644
index 0847231..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/Product.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 浜у搧琛�
- * @TableName product
- */
-@TableName(value ="product")
-@Data
-public class Product  implements Serializable {
-    /**
-     *
-     */
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    /**
-     * 浜у搧鍚嶇О
-     */
-    private String name;
-
-    /**
-     * 浜у搧鍚嶇ОEN
-     */
-    private String nameEn;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    /**
-     * 澶栭敭锛歴tructure_test_object琛╥d
-     */
-    private Integer objectId;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/ProductPart.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/ProductPart.java
deleted file mode 100644
index 0a29975..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/ProductPart.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-@Data
-@TableName("product_part")
-public class ProductPart implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty("浜у搧id")
-    private Integer productId;
-
-    @ApiModelProperty("闆朵欢鍙�")
-    private String partNo;
-
-    @ApiModelProperty("棰滆壊")
-    private String color;
-
-    @ApiModelProperty("鑹叉爣")
-    private String colorCode;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/ProductSupplierDensity.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/ProductSupplierDensity.java
deleted file mode 100644
index b953919..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/ProductSupplierDensity.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 浜у搧鍘傚瀵嗗害缁戝畾琛�
- *
- * @author zhuo
- * @since 2024-09-19
- */
-@Data
-@TableName("product_supplier_density")
-public class ProductSupplierDensity implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty("浜у搧id")
-    private Integer productId;
-
-    @ApiModelProperty("鍨嬪彿")
-    private String model;
-
-    @ApiModelProperty("鍘傚鍚嶇О")
-    private String supplierName;
-
-    @ApiModelProperty("瀵嗗害鍊�")
-    private String densityValue;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/Seal.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/Seal.java
deleted file mode 100644
index 783703c..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/Seal.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 鍗扮珷绠$悊(Laboratory)琛ㄥ璞�
- */
-
-@TableName(value = "seal")
-@Data
-public class Seal  implements Serializable {
-    @ApiModelProperty(value = "涓婚敭")
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty(value = "瀹為獙瀹d")
-    private Integer labId;
-
-    @TableField(exist=false)
-    @ApiModelProperty(value = "瀹為獙瀹ゅ悕绉�")
-    private String laboratoryName;
-
-    @ApiModelProperty(value = "鍗扮珷鍥剧墖")
-    private String address;
-
-    @ApiModelProperty(value = "鍗扮珷绫诲瀷")
-    private String type;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java
deleted file mode 100644
index 6d5ec08..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 鏍囧噯鏂规硶
- * @TableName standard_method
- */
-@TableName(value ="standard_method")
-@Data
-public class StandardMethod implements Serializable {
-    /**
-     *
-     */
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    private String field;
-
-    @ApiModelProperty("妫�楠屽璞�")
-    private String structureTestObjectId;
-
-    /**
-     * 鏍囧噯缂栧彿
-     */
-    @ApiModelProperty(value = "鏍囧噯缂栧彿")
-    private String code;
-
-    /**
-     * 鏍囧噯鏂规硶
-     */
-    @ApiModelProperty(value = "鏍囧噯鎻忚堪")
-    private String name;
-
-    @ApiModelProperty(value = "鏍囧噯鎻忚堪EN")
-    private String nameEn;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-
-    @ApiModelProperty(value = "璧勮川")
-    private String qualificationId;
-
-    @ApiModelProperty(value = "鏄惁浜у搧鏍囧噯")
-    private Integer isProduct;
-
-    @ApiModelProperty(value = "鏄惁鍚敤")
-    private Integer isUse;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓浜�")
-    @TableField(exist = false,select = false)
-    private String createUserName;
-
-    @ApiModelProperty(value = "鏇存柊浜�")
-    @TableField(exist = false,select = false)
-    private String updateUserName;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethodList.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethodList.java
deleted file mode 100644
index 8161270..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethodList.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�
- * @TableName standard_method_list
- */
-@TableName(value ="standard_method_list")
-@Data
-public class StandardMethodList implements Serializable {
-    /**
-     *
-     */
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    /**
-     * 鏍囧噯缂栧彿
-     */
-    @ApiModelProperty("鏍囧噯缂栧彿")
-    private String code;
-
-    /**
-     * 鏍囧噯鍚嶇О
-     */
-    @ApiModelProperty("鏍囧噯绉板彿")
-    private String name;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty("澶囨敞")
-    private String remark;
-
-    @ApiModelProperty("宸ュ巶")
-    private String factory;
-
-    @ApiModelProperty("瀹為獙瀹�")
-    private String laboratory;
-
-    @ApiModelProperty("鏍峰搧鍒嗙被")
-    private String sampleType;
-
-    @ApiModelProperty("鏍峰搧")
-    private String sample;
-
-    @ApiModelProperty("鍨嬪彿")
-    private String model;
-
-    @ApiModelProperty("")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(exist = false)
-    private String createUserName;
-    /**
-     *
-     */
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-    /**
-     *
-     */
-    @ApiModelProperty("")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-    /**
-     *
-     */
-    @ApiModelProperty("淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardProductList.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardProductList.java
deleted file mode 100644
index 1c1b79f..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardProductList.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 鏍囧噯鏍戜笅鐨勬楠岄」鐩�
- * @TableName standard_product_list
- */
-@TableName(value ="standard_product_list")
-@Data
-public class StandardProductList implements Serializable {
-    /**
-     * 涓婚敭id
-     */
-    @TableId(value = "id",type = IdType.ASSIGN_ID)
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
-
-    /**
-     * 妫�楠岄」
-     */
-    @ApiModelProperty("妫�楠岄」")
-    private String inspectionItem;
-
-    @ApiModelProperty("妫�楠岄」EN")
-    private String inspectionItemEn;
-
-    /**
-     * 妫�楠岄」灏忕被
-     */
-    @ApiModelProperty("妫�楠岄」灏忕被")
-    private String inspectionItemSubclass;
-
-    @ApiModelProperty("妫�楠岄」灏忕被EN")
-    private String inspectionItemSubclassEn;
-
-    /**
-     * 瀹為獙瀹�
-     */
-    @ApiModelProperty("瀹為獙瀹�")
-    private String laboratory;
-
-    @ApiModelProperty("瀛愬疄楠屽")
-    private String sonLaboratory;
-
-    /**
-     * 璁¢噺鍗曚綅
-     */
-    @ApiModelProperty("璁¢噺鍗曚綅")
-    private String unit;
-
-    /**
-     * 鍗曚环(鍏�)
-     */
-    @ApiModelProperty("鍗曚环")
-    private String price;
-
-    /**
-     * 宸ユ椂(H)
-     */
-    @ApiModelProperty("宸ユ椂")
-    private String manHour;
-
-    /**
-     * 宸ユ椂鍒嗙粍
-     */
-    @ApiModelProperty("宸ユ椂鍒嗙粍")
-    private String manHourGroup;
-
-    /**
-     * 妫�楠岄」绫诲瀷
-     */
-    @ApiModelProperty("妫�楠岄」绫诲瀷")
-    private String inspectionItemType;
-
-    /**
-     * 妫�楠屽�肩被鍨�
-     */
-    @ApiModelProperty("妫�楠屽�肩被鍨�")
-    private String inspectionValueType;
-
-    /**
-     * 妫�楠屾鏁�
-     */
-    @ApiModelProperty("妫�楠屾鏁�")
-    private Integer checkoutNumber;
-
-    /**
-     * 鍖洪棿
-     */
-    @ApiModelProperty("鍖洪棿")
-    private String section;
-
-    /**
-     * 鍖洪棿
-     */
-    @ApiModelProperty("鑺暟鍖洪棿")
-    private String cores;
-
-    /**
-     * 鏂规硶
-     */
-    @ApiModelProperty("鏂规硶鍒楄〃")
-    private String method;
-
-    @ApiModelProperty("鏂规硶")
-    private String methodS;
-
-    /**
-     * 棰勮鏃堕棿(澶�)
-     */
-    @ApiModelProperty("棰勮鏃堕棿")
-    private Integer manDay;
-
-    /**
-     * 鐗规畩鏍囪瘑
-     */
-    @ApiModelProperty("鐗规畩鏍囪瘑")
-    private String bsm;
-
-    /**
-     * 瑕佹眰鍊�
-     */
-    @ApiModelProperty("瑕佹眰鍊�")
-    private String ask;
-
-    @ApiModelProperty("瑕佹眰鎻忚堪")
-    private String tell;
-
-    /**
-     * 澶栭敭锛氭爣鍑嗘柟娉昳d
-     */
-    @ApiModelProperty("鏍囧噯鏂规硶id")
-    private Integer standardMethodListId;
-
-    @ApiModelProperty("宸ュ巶")
-    private String factory;
-
-    @ApiModelProperty("鏍峰搧鍒嗙被")
-    private String sampleType;
-
-    @ApiModelProperty("鏍峰搧")
-    private String sample;
-
-    @ApiModelProperty("鍨嬪彿")
-    private String model;
-
-    @ApiModelProperty("鍨嬪彿")
-    private Integer templateId;
-
-    @ApiModelProperty("")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-    /**
-     *
-     */
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-    /**
-     *
-     */
-    @ApiModelProperty("")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-    /**
-     *
-     */
-    @ApiModelProperty("淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty("1锛氭湁鏁� 0锛氭棤鏁�")
-    private Integer state;
-
-    private String dic;
-
-    private String tree;
-
-    private Integer structureItemParameterId;
-
-    @ApiModelProperty(value = "妫�楠岄」鍒嗙被")
-    private String inspectionItemClass;
-
-    @ApiModelProperty(value = "妫�楠岄」鍒嗙被EN")
-    private String inspectionItemClassEn;
-
-    @ApiModelProperty(value = "鏉′欢")
-    private String radius;
-
-    @ApiModelProperty(value = "鏉′欢鍒楄〃")
-    private String radiusList;
-
-    @ApiModelProperty(value = "鏀惰垂鏍囧噯(鍏�/娆�)")
-    private String rates;
-
-    @ApiModelProperty(value = "绱㈠紩椤哄簭")
-    private Integer sort;
-
-    /**
-     * 瀵间綋鏉愯川
-     */
-    @ApiModelProperty("瀵间綋鏉愯川")
-    private String conductorMaterial;
-
-    /**
-     * 瀵间綋绫诲瀷
-     */
-    @ApiModelProperty("瀵间綋绫诲瀷")
-    private String conductorType;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardProductListSupplierAsk.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardProductListSupplierAsk.java
deleted file mode 100644
index c857a6c..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardProductListSupplierAsk.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-/**
- * 妫�楠岄」鐩巶瀹跺瘑搴︾粦瀹氳〃
- *
- * @author zhuo
- * @since 2024-09-23
- */
-@TableName(value ="standard_product_list_supplier_ask")
-@Data
-public class StandardProductListSupplierAsk {
-
-    @TableId(type = IdType.AUTO)
-    private Integer supplierAskId;
-
-    @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty("妫�楠岄」鐩甶d")
-    private Long productListId;
-
-    @ApiModelProperty("鍘傚鍚嶇О")
-    private String supplierName;
-
-    @ApiModelProperty("瑕佹眰鍊�")
-    private String ask;
-
-    @ApiModelProperty("瑕佹眰鎻忚堪")
-    private String tell;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardTemplate.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardTemplate.java
deleted file mode 100644
index e26971f..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardTemplate.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 鏍囧噯妯℃澘
- * @TableName standard_template
- */
-@TableName(value ="standard_template")
-@Data
-public class StandardTemplate  implements Serializable {
-    /**
-     *
-     */
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    /**
-     * 妯℃澘鍚嶇О
-     */
-    @ApiModelProperty("妯℃澘鍚嶇О")
-    private String name;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty("澶囨敞")
-    private String remark;
-
-    /**
-     * 妯℃澘缁撴瀯
-     */
-    private String thing;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-    /**
-     *
-     */
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-    /**
-     *
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-    /**
-     *
-     */
-    @ApiModelProperty("淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty("鍒涘缓鐢ㄦ埛")
-    @TableField(exist = false)
-    private String createUserName;
-
-    @ApiModelProperty("鏇存柊鐢ㄦ埛")
-    @TableField(exist = false)
-    private String updateUserName;
-
-    /**
-     * 妯℃澘缂栧彿
-     */
-    @ApiModelProperty("妯℃澘缂栧彿")
-    private String number;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardTree.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardTree.java
deleted file mode 100644
index 8c2b6cf..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardTree.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
-* 鏍囧噯鏍�
-* @TableName standard_tree
-*/
-@TableName(value ="standard_tree")
-@Data
-public class StandardTree implements Serializable {
-
-    /**
-    *
-    */
-    @NotNull(message="[]涓嶈兘涓虹┖")
-    @ApiModelProperty("")
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-    /**
-    * 宸ュ巶
-    */
-    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    @ApiModelProperty("宸ュ巶")
-    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    private String factory;
-    /**
-    * 瀹為獙瀹�
-    */
-    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    @ApiModelProperty("瀹為獙瀹�")
-    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    private String laboratory;
-    /**
-    * 鏍峰搧澶х被
-    */
-    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    @ApiModelProperty("鏍峰搧澶х被")
-    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    private String sampleType;
-    /**
-    * 鏍峰搧
-    */
-    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    @ApiModelProperty("鏍峰搧")
-    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    private String sample;
-    /**
-    * 鍨嬪彿
-    */
-    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    @ApiModelProperty("鍨嬪彿")
-    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
-    private String model;
-    /**
-    *
-    */
-    @ApiModelProperty("")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-    /**
-    *
-    */
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-    /**
-    *
-    */
-    @ApiModelProperty("")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-    /**
-    *
-    */
-    @ApiModelProperty("淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    /**
-     * 淇敼鍓嶅悕绉�
-     */
-    @TableField(exist = false,select = false)
-    private String oldModel;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureItemParameter.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureItemParameter.java
deleted file mode 100644
index 7faa8be..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureItemParameter.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄥ璞�
- *
- * @author makejava
- * @since 2024-02-26 16:21:17
- */
-@TableName(value ="structure_item_parameter")
-@Data
-public class StructureItemParameter implements Serializable {
-    @ApiModelProperty(value = "涓婚敭")
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty(value = "妫�楠岄」")
-    private String inspectionItem;
-
-    @ApiModelProperty(value = "妫�楠岄」EN")
-    private String inspectionItemEn;
-
-    @ApiModelProperty(value = "妫�楠屽瓙椤�")
-    private String inspectionItemSubclass;
-
-    @ApiModelProperty(value = "妫�楠屽瓙椤笶N")
-    private String inspectionItemSubclassEn;
-
-    @ApiModelProperty(value = "妫�楠屽璞�")
-    private String sample;
-
-    @ApiModelProperty(value = "鍗曚环(鍏�)")
-    private String price;
-
-    @ApiModelProperty(value = "鍦烘墍")
-    private String laboratory;
-
-    @ApiModelProperty(value = "璇曢獙瀹�")
-    private String sonLaboratory;
-
-    @ApiModelProperty(value = "瑕佹眰鎻忚堪")
-    private String askTell;
-
-    @ApiModelProperty(value = "瑕佹眰鍊�")
-    private String ask;
-
-    @ApiModelProperty(value = "璁¢噺鍗曚綅")
-    private String unit;
-
-    @ApiModelProperty(value = "璇曢獙鏂规硶")
-    private String method;
-
-    @ApiModelProperty(value = "宸ユ椂(H)")
-    private Double manHour;
-
-    @ApiModelProperty(value = "棰勮鏃堕棿(H)")
-    private Integer manDay;
-
-    @ApiModelProperty(value = "宸ユ椂鍒嗙粍")
-    private String manHourGroup;
-
-    @ApiModelProperty(value = "妫�楠岄」绫诲瀷")
-    private String inspectionItemType;
-
-    @ApiModelProperty(value = "妫�楠屽�肩被鍨�")
-    private String inspectionValueType;
-
-    @ApiModelProperty(value = "妫�楠屾鏁�")
-    private Integer checkoutNumber;
-
-    @ApiModelProperty(value = "鍖洪棿")
-    private String section;
-
-    @ApiModelProperty(value = "鐗规畩鏍囪瘑")
-    private String bsm;
-
-    @ApiModelProperty(value = "鍘熷璁板綍妯℃澘")
-    private Integer templateId;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty(value = "瀛楀吀绫诲瀷")
-    private String dic;
-
-    @ApiModelProperty(value = "妫�楠岄」鍒嗙被")
-    private String inspectionItemClass;
-
-    @ApiModelProperty(value = "妫�楠岄」鍒嗙被EN")
-    private String inspectionItemClassEn;
-
-    @ApiModelProperty(value = "鏉′欢")
-    private String radiusList;
-
-    @ApiModelProperty(value = "鏀惰垂鏍囧噯(鍏�/娆�)")
-    private String rates;
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureTestObject.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureTestObject.java
deleted file mode 100644
index d5af3f2..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureTestObject.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 妫�娴嬪璞�(StructureTestObject)琛ㄥ璞�
- *
- * @author makejava
- * @since 2024-02-26 17:36:41
- */
-@TableName(value ="structure_test_object")
-@Data
-public class StructureTestObject implements Serializable {
-    @ApiModelProperty(value = "涓婚敭")
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty(value = "鍦烘墍")
-    private Integer laboratoryId;
-
-    @ApiModelProperty(value = "妫�楠屽璞�")
-    private String specimenName;
-
-    @ApiModelProperty(value = "妫�楠屽璞N")
-    private String specimenNameEn;
-
-    @ApiModelProperty(value = "瀵硅薄浠e彿")
-    private String code;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty(value = "鎺掑簭")
-    private Integer sort;
-
-    //"瀵硅薄绫诲瀷, 1:鍘熸潗鏂�, 2:鎴愬搧, 3:杈呮潗"
-    @ApiModelProperty(value = "瀵硅薄绫诲瀷")
-    private String objectType;
-
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureTestObjectPart.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureTestObjectPart.java
deleted file mode 100644
index a1e500c..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StructureTestObjectPart.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 妫�楠屽璞¢浂浠惰〃(StructureTestObjectPart)$desc
- *
- * @author makejava
- * @since 2024-08-07 10:10:30
- */
-@TableName(value ="structure_test_object_part")
-@Data
-public class StructureTestObjectPart implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty("妫�楠屽璞d")
-    private Integer testObjectId;
-
-    @ApiModelProperty("闆朵欢鍙�")
-    private String partNo;
-
-    @ApiModelProperty("棰滆壊")
-    private String color;
-
-    @ApiModelProperty("鑹叉爣")
-    private String colorCode;
-
-    @ApiModelProperty(value = "鍒涘缓浜篿d")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-
-    @ApiModelProperty(value = "淇敼浜篿d")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/CapacityScopeService.java b/basic-server/src/main/java/com/ruoyi/basic/service/CapacityScopeService.java
deleted file mode 100644
index 6139cd1..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/CapacityScopeService.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.dto.PageTestObjectDto;
-import com.ruoyi.basic.dto.TestItemDto;
-
-import com.ruoyi.basic.pojo.StructureItemParameter;
-import com.ruoyi.basic.pojo.StructureTestObject;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ湇鍔℃帴鍙�
- *
- * @author makejava
- * @since 2024-02-26 16:21:17
- */
-public interface CapacityScopeService extends IService<StructureItemParameter> {
-
-    IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter);
-
-    int addItemParameter(StructureItemParameter itemParameter);
-
-    int delItemParameter(Integer id);
-
-    int upItemParameter(StructureItemParameter itemParameter);
-
-    IPage<PageTestObjectDto> selectTestObjectList(Page page, PageTestObjectDto pageTestObjectDto);
-
-    int addTestObject(StructureTestObject testObject);
-
-    int delTestObject(Integer id);
-
-    int upTestObject(StructureTestObject testObject);
-
-    List<StructureTestObject> selectTestObjectByName();
-
-    //璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)
-    List<Map<String, Object>> getInsProduction();
-
-    List<TestItemDto> getItemTree();
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/CertificationService.java b/basic-server/src/main/java/com/ruoyi/basic/service/CertificationService.java
deleted file mode 100644
index 7ecac80..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/CertificationService.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.Certification;
-
-public interface CertificationService extends IService<Certification> {
-    //鏌ヨ璧勮川鏄庣粏鍒楄〃
-    IPage<Certification> getCertificationDetail(Page page, Certification certification);
-
-    //娣诲姞璧勮川鏄庣粏鍒楄〃
-    int addCertificationDetail(Certification certification);
-
-    //鍒犻櫎璧勮川鏄庣粏鍒楄〃
-    int delCertificationDetail(String ids);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/LaboratoryService.java b/basic-server/src/main/java/com/ruoyi/basic/service/LaboratoryService.java
deleted file mode 100644
index 4dc05a5..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/LaboratoryService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.Laboratory;
-
-import java.util.List;
-
-/**
- * 瀹為獙瀹ょ鐞�(Laboratory)琛ㄦ湇鍔℃帴鍙�
- */
-public interface LaboratoryService extends IService<Laboratory> {
-
-    IPage<Laboratory> selectItemParameter(Page page, Laboratory itemParameter);
-
-    int addParameter(Laboratory itemParameter);
-
-    int delParameter(Integer id);
-
-    int upParameter(Laboratory itemParameter);
-
-    List<Laboratory> obtainItemParameterList();
-
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/ProductPartService.java b/basic-server/src/main/java/com/ruoyi/basic/service/ProductPartService.java
deleted file mode 100644
index 3525752..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/ProductPartService.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.ProductPart;
-
-public interface ProductPartService extends IService<ProductPart> {
-
-    IPage<ProductPart> selectByProductId(IPage<ProductPart> page,ProductPart productPart);
-
-    void addProductPart(ProductPart productPart);
-
-    void updateProductPartById(ProductPart productPart);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/ProductService.java b/basic-server/src/main/java/com/ruoyi/basic/service/ProductService.java
deleted file mode 100644
index 6fdc7c2..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/ProductService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.dto.ProductDTO1;
-import com.ruoyi.basic.excel.StructureTestObjectData;
-import com.ruoyi.basic.pojo.Product;
-
-import java.util.List;
-
-/**
-* @author z1292
-* @description 閽堝琛ㄣ�恜roduct(浜у搧琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
-* @createDate 2024-04-26 01:11:02
-*/
-public interface ProductService extends IService<Product> {
-
-    IPage<Product> selectProductListByObjectId(Page page, ProductDTO1 productDto);
-
-    int addProduct(Product product);
-
-    int upProduct(Product product);
-
-    int delProduct(Integer id);
-
-    void importPartExcel(List<StructureTestObjectData> list);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/ProductSupplierDensityService.java b/basic-server/src/main/java/com/ruoyi/basic/service/ProductSupplierDensityService.java
deleted file mode 100644
index 13be167..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/ProductSupplierDensityService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.ProductSupplierDensity;
-
-/**
- * 浜у搧鍘傚瀵嗗害缁戝畾琛�
- *
- * @author zhuo
- * @since 2024-09-19
- */
-public interface ProductSupplierDensityService extends IService<ProductSupplierDensity> {
-
-    IPage<ProductSupplierDensity> selectByProductId(Page page, ProductSupplierDensity supplierDensity);
-
-    void addProductSupplierDensity(ProductSupplierDensity supplierDensity);
-
-    void updateProductSupplierDensity(ProductSupplierDensity supplierDensity);
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/SealService.java b/basic-server/src/main/java/com/ruoyi/basic/service/SealService.java
deleted file mode 100644
index a31c595..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/SealService.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.ruoyi.basic.service;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.Laboratory;
-import com.ruoyi.basic.pojo.Seal;
-
-import java.util.List;
-import java.util.Map;
-
-public interface SealService extends IService<Seal> {
-
-    //鏂板
-    int addSeal(Seal seal);
-
-    //鏌ヨ
-    IPage<Seal> selectSeal(Page page, Seal seal);
-
-    List<Laboratory>  Laboratory(Integer id);
-
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StandardMethodListService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StandardMethodListService.java
deleted file mode 100644
index 14ee117..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StandardMethodListService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.StandardMethodList;
-
-import java.util.List;
-import java.util.Map;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_method_list(鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
-* @createDate 2024-03-04 13:44:04
-*/
-public interface StandardMethodListService extends IService<StandardMethodList> {
-
-    int addStandardMethodList(Integer standardId, String tree);
-
-    Map<String, List<?>> selectsStandardMethodByFLSSM(String tree);
-
-    Map<String, List<?>> selectsStandardMethodByFLSSM2(String tree);
-
-    int delStandardMethodByFLSSM(Integer id);
-
-    List<StandardMethodList> selectStandardMethodEnum();
-
-    Integer getStandardMethodId(String code);
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StandardMethodService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StandardMethodService.java
deleted file mode 100644
index d9b3432..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StandardMethodService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.StandardMethod;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_method(鏍囧噯鏂规硶)銆戠殑鏁版嵁搴撴搷浣淪ervice
-* @createDate 2024-03-03 19:21:41
-*/
-public interface StandardMethodService extends IService<StandardMethod> {
-
-    IPage<StandardMethod> selectStandardMethodList(Page page, StandardMethod standardMethod);
-
-    List<StandardMethod> selectStandardMethods();
-
-    int addStandardMethod(StandardMethod standardMethod);
-
-    int delStandardMethod(Integer id);
-
-    int upStandardMethod(StandardMethod standardMethod);
-
-    void inputExcel(MultipartFile file) throws IOException;
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListService.java
deleted file mode 100644
index 39e0754..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListService.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.alibaba.fastjson.JSONArray;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.dto.CopyStandardProductListDto;
-import com.ruoyi.basic.dto.InsSampleReceiveDto;
-import com.ruoyi.basic.dto.ResetTreeDragDTO;
-import com.ruoyi.basic.pojo.StandardProductList;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Administrator
- * @description 閽堝琛ㄣ�恠tandard_product_list(鏍囧噯鏍戜笅鐨勬楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淪ervice
- * @createDate 2024-03-05 10:33:29
- */
-public interface StandardProductListService extends IService<StandardProductList> {
-
-    int upStandardProductList(StandardProductList list);
-
-    int delStandardProduct(JSONArray list);
-
-    List<StandardProductList> selectStandardProductList(InsSampleReceiveDto insSample);
-
-    Map<String, Object> selectStandardProductListByMethodId(Integer id, String tree, Integer page);
-
-    IPage<StandardProductList> selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items);
-
-    Map<String, List<?>> selectStandardProductEnumByMethodId(Integer id, String tree, String item);
-
-    boolean updateSection(StandardProductList list);
-
-    /**
-     * 鏍囧噯搴撴嫋鎷�
-     * @param resetTreeDragDTO
-     */
-    void resetTreeDrag(ResetTreeDragDTO resetTreeDragDTO);
-
-    /**
-     * 鏍囧噯搴撴嫋鎷�
-     * @param standardProductLists
-     */
-    void resetTreeDragBatch(List<StandardProductList> standardProductLists);
-
-    /**
-     * 妫�楠岄」瑕佹眰鍊煎姣�
-     * @param copyStandardProductListDto
-     * @return
-     */
-    List<StandardProductList> copyStandardProductList(CopyStandardProductListDto copyStandardProductListDto);
-
-    /**
-     * 妫�楠岄」瑕佹眰鍊煎姣斾竴涓�
-     * @param copyStandardProductListDto
-     * @return
-     */
-    List<StandardProductList> copyStandardProductOne(CopyStandardProductListDto copyStandardProductListDto);
-
-    /**
-     * 妫�楠岄」澶嶅埗鎺掑簭
-     * @param copyStandardProductListDto
-     * @return
-     */
-    boolean copyStandardProductSort(CopyStandardProductListDto copyStandardProductListDto);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListService2.java b/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListService2.java
deleted file mode 100644
index 4f54fe6..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListService2.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.StandardProductList;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_product_list(鏍囧噯鏍戜笅鐨勬楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淪ervice
-* @createDate 2024-03-05 10:33:29
-*/
-public interface StandardProductListService2 extends IService<StandardProductList> {
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListSupplierAskService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListSupplierAskService.java
deleted file mode 100644
index c32d0e4..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListSupplierAskService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.StandardProductListSupplierAsk;
-
-import java.util.List;
-
-/**
- * 妫�楠岄」鐩巶瀹跺瘑搴︾粦瀹氳〃
- *
- * @author makejava
- * @since 2024-09-23
- */
-public interface StandardProductListSupplierAskService extends IService<StandardProductListSupplierAsk> {
-
-    List<StandardProductListSupplierAsk> selectByProductId(StandardProductListSupplierAsk supplierAsk);
-
-    Integer addProductSupplierAsk(StandardProductListSupplierAsk supplierAsk);
-
-    Integer updateProductSupplierAsk(StandardProductListSupplierAsk supplierAsk);
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StandardTemplateService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StandardTemplateService.java
deleted file mode 100644
index 050cce8..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StandardTemplateService.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.StandardTemplate;
-
-import java.util.List;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_template(鏍囧噯妯℃澘)銆戠殑鏁版嵁搴撴搷浣淪ervice
-* @createDate 2024-03-11 13:47:52
-*/
-public interface StandardTemplateService extends IService<StandardTemplate> {
-
-    IPage<StandardTemplate> selectStandardTemplatePageList(Page page, StandardTemplate standardTemplate);
-
-    int addStandardTemplate(StandardTemplate standardTemplate);
-
-    int upStandardTemplate(StandardTemplate standardTemplate);
-
-    int delStandardTemplate(Integer id);
-
-    List<StandardTemplate> getStandardTemplate();
-
-    String getStandTempThingById(Integer templateId);
-
-    String getStandTempNameById(Integer templateId);
-
-    StandardTemplate getStandTempIdByName(String name);
-
-    int copyStandardTemplate(StandardTemplate newTemplate);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StandardTreeService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StandardTreeService.java
deleted file mode 100644
index 39d08e7..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StandardTreeService.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.dto.FactoryDto;
-import com.ruoyi.basic.dto.SampleTypeDto;
-import com.ruoyi.basic.pojo.StandardTree;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
-import java.util.Map;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_tree(鏍囧噯鏍�)銆戠殑鏁版嵁搴撴搷浣淪ervice
-* @createDate 2024-03-01 15:06:44
-*/
-public interface StandardTreeService extends IService<StandardTree> {
-
-    List<FactoryDto> selectStandardTreeList();
-
-
-    int addStandardTree(StandardTree standardTree);
-
-    int delStandardTree(String tree);
-
-    int addStandardProduct(String ids, String tree);
-
-    List<SampleTypeDto> getStandardTree2();
-
-    int upStandardProducts(Map<String, Object> product);
-
-    List<StandardTree> getStandTreeBySampleType(String laboratory, String sampleType);
-
-    void inExcelOfTree(MultipartFile file);
-
-    void resetTreeOfPrice(String tree, Integer standardId);
-
-    void resetTreeOfHour(String tree, Integer standardId);
-
-    void resetTreeOfAsk(String tree, Integer standardId);
-
-    void importWorkstationExcel(MultipartFile file);
-
-    /**
-     * 鏍囧噯鏁版帓搴�
-     * @param list
-     * @return
-     */
-    boolean updateTreeSort(List<FactoryDto> list);
-
-    int updateStandardTree(StandardTree standardTree);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StructureItemParameterService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StructureItemParameterService.java
deleted file mode 100644
index a697619..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StructureItemParameterService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.StructureItemParameter;
-
-public interface StructureItemParameterService extends IService<StructureItemParameter> {
-    void removeNoSample(String sample);
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StructureTestObjectPartService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StructureTestObjectPartService.java
deleted file mode 100644
index de84817..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StructureTestObjectPartService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.StructureTestObjectPart;
-
-/**
- * 妫�楠屽璞¢浂浠惰〃
- *
- * @author zhuo
- * @since 2024-08-07
- */
-public interface StructureTestObjectPartService extends IService<StructureTestObjectPart> {
-
-    IPage<StructureTestObjectPart> selectByTestObjectId(Page page, StructureTestObjectPart structureTestObjectPart);
-
-    void addTestObjectPart(StructureTestObjectPart structureTestObjectPart);
-
-    void updateTestObjectPart(StructureTestObjectPart structureTestObjectPart);
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/StructureTestObjectService.java b/basic-server/src/main/java/com/ruoyi/basic/service/StructureTestObjectService.java
deleted file mode 100644
index 200a51a..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/StructureTestObjectService.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.ruoyi.basic.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.pojo.StructureTestObject;
-
-/**
- * 妫�娴嬪璞�(StructureTestObject)$desc
- *
- * @author makejava
- * @since 2024-09-13 09:45:55
- */
-public interface StructureTestObjectService extends IService<StructureTestObject> {
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
deleted file mode 100644
index f63a161..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.dto.PageTestObjectDto;
-import com.ruoyi.basic.dto.TestItemDto;
-import com.ruoyi.basic.mapper.*;
-import com.ruoyi.basic.pojo.*;
-import com.ruoyi.basic.service.CapacityScopeService;
-import com.ruoyi.basic.service.StandardProductListService;
-import com.ruoyi.basic.service.StructureItemParameterService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ湇鍔″疄鐜扮被
- *
- * @author makejava
- * @since 2024-02-26 16:21:17
- */
-@Service
-@AllArgsConstructor
-public class CapacityScopeServiceImpl extends ServiceImpl<StructureItemParameterMapper, StructureItemParameter> implements CapacityScopeService {
-
-    private LaboratoryMapper laboratoryMapper;
-
-    private StructureItemParameterMapper structureItemParameterMapper;
-
-    private StructureTestObjectMapper structureTestObjectMapper;
-
-    private ProductMapper productMapper;
-
-    private StructureTestObjectPartMapper structureTestObjectPartMapper;
-
-    private ProductPartMapper productPartMapper;
-
-    private StandardProductListService standardProductListService;
-
-    private StandardTreeMapper standardTreeMapper;
-
-    private StructureItemParameterService structureItemParameterService;
-
-    @Override
-    public IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter) {
-       return structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter));
-    }
-
-    @Override
-    public int addItemParameter(StructureItemParameter itemParameter) {
-        if (itemParameter.getBsm().equals("")||itemParameter.getBsm()==null){
-            itemParameter.setBsm("0");
-        }
-        int insert = structureItemParameterMapper.insert(itemParameter);
-        return insert;
-    }
-
-    @Override
-    public int delItemParameter(Integer id) {
-        return structureItemParameterMapper.deleteById(id);
-    }
-
-    @Override
-    public int upItemParameter(StructureItemParameter itemParameter) {
-        return structureItemParameterMapper.updateById(itemParameter);
-    }
-
-    @Override
-    public IPage<PageTestObjectDto> selectTestObjectList(Page page, PageTestObjectDto pageTestObjectDto) {
-        String partNo = pageTestObjectDto.getPartNo();
-        pageTestObjectDto.setPartNo(null);
-        return structureTestObjectMapper.selectTestObjectList(page, QueryWrappers.queryWrappers(pageTestObjectDto),partNo);
-    }
-
-    @Override
-    public int addTestObject(StructureTestObject testObject) {
-        Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery().eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName()));
-        if(count.compareTo(0L) > 0){
-            throw new BaseException("妫�楠屽璞′笉鑳介噸澶�");
-        }
-
-        return structureTestObjectMapper.insert(testObject);
-    }
-
-    @Override
-    public int delTestObject(Integer id) {
-        // 浜у嚭妫�楠屽璞′骇鍝佺淮鎶�
-        structureTestObjectPartMapper.delete(Wrappers.<StructureTestObjectPart>lambdaQuery()
-                .eq(StructureTestObjectPart::getTestObjectId, id));
-
-        // 鍒犻櫎浜у搧缁存姢鐨勯浂浠剁粦瀹�
-        List<Product> products = productMapper.selectList(Wrappers.<Product>lambdaQuery()
-                .eq(Product::getObjectId, id));
-        List<Integer> productIds = products.stream().map(Product::getId).collect(Collectors.toList());
-        productPartMapper.delete(Wrappers.<ProductPart>lambdaQuery()
-                .in(ProductPart::getProductId, productIds));
-
-        // 鍒犻櫎浜у搧缁存姢
-        productMapper.delete(Wrappers.<Product>lambdaQuery()
-                .in(Product::getId, productIds));
-
-        return structureTestObjectMapper.deleteById(id);
-    }
-
-    @Override
-    public int upTestObject(StructureTestObject testObject) {
-        // 鏌ヨ鏃х殑妫�楠屽璞�
-        StructureTestObject oldTestObject = structureTestObjectMapper.selectById(testObject.getId());
-
-        if (!oldTestObject.getSpecimenName().equals(testObject.getSpecimenName())) {
-            // 鏌ヨ鎵�鏈夊璞′竴鏍风殑妫�楠岄」鐩�
-            List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
-                    .eq(StandardProductList::getSampleType, oldTestObject.getSpecimenName()));
-            if (CollectionUtils.isNotEmpty(standardProductLists)){
-                for (StandardProductList standardProductList : standardProductLists) {
-                    // 淇敼鎵�鏈夌殑瀵硅薄鍚嶇О鍜屾暟鍨嬬粨鏋�
-                    standardProductList.setSampleType(testObject.getSpecimenName());
-                    // 闇�瑕佹埅鍙栫涓夌骇, 閬垮厤涓夊洓绾у悕绉颁竴鏍蜂慨鏀归敊璇�
-                    String[] trees = standardProductList.getTree().split(" - ");
-                    trees[2] = testObject.getSpecimenName();
-                    List<String> list = CollUtil.newArrayList(trees);
-                    String newName = CollUtil.join(list, " - ");
-                    standardProductList.setTree(newName);
-                }
-                standardProductListService.updateBatchById(standardProductLists);
-            }
-            // 淇敼妫�楠岄」鐩弬鏁扮殑妫�楠屽璞�
-            // 鎷兼帴 ["object", 鏌ヨ妫�楠岄」鐩弬鏁颁慨鏀圭粦瀹氱殑妫�楠屽璞�
-            String format = "[\"{}\",";
-            String sampleOld = StrUtil.format(format, oldTestObject.getSpecimenName());
-            List<StructureItemParameter> itemParameterList = structureItemParameterService.list(Wrappers.<StructureItemParameter>lambdaQuery()
-                    .like(StructureItemParameter::getSample, sampleOld));
-            if (CollectionUtils.isNotEmpty(itemParameterList)) {
-                for (StructureItemParameter structureItemParameter : itemParameterList) {
-                    // 淇敼缁戝畾鐨勬牱鍝佸悕绉�
-                    String sampleNew = StrUtil.format(format, testObject.getSpecimenName());
-                    String sampleUp = structureItemParameter.getSample().replace(sampleOld, sampleNew);
-                    structureItemParameter.setSample(sampleUp);
-                }
-                structureItemParameterService.updateBatchById(itemParameterList);
-            }
-
-            // 淇敼鏍戠殑鍨嬪彿
-            standardTreeMapper.update(null, Wrappers.<StandardTree>lambdaUpdate()
-                    .eq(StandardTree::getSampleType, oldTestObject.getSpecimenName())
-                    .set(StandardTree::getSampleType, testObject.getSpecimenName()));
-        }
-
-        Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery()
-                .eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName())
-                .ne(StructureTestObject::getId, testObject.getId()));
-        if(count.compareTo(0L) > 0){
-            throw new BaseException("妫�楠屽璞′笉鑳介噸澶�");
-        }
-
-        return structureTestObjectMapper.updateById(testObject);
-    }
-
-    @Override
-    public List<StructureTestObject> selectTestObjectByName() {
-        return structureTestObjectMapper.selectList(Wrappers.<StructureTestObject>lambdaQuery().select(StructureTestObject::getSpecimenName,StructureTestObject::getId));
-    }
-
-    //璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)
-    @Override
-    public List<Map<String, Object>> getInsProduction() {
-        return structureItemParameterMapper.getInsProduction();
-    }
-
-    @Override
-    public List<TestItemDto> getItemTree() {
-        return structureItemParameterMapper.getItemTree();
-    }
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CertificationServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CertificationServiceImpl.java
deleted file mode 100644
index 11a6e61..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CertificationServiceImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.alibaba.fastjson2.JSON;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.mapper.CertificationMapper;
-import com.ruoyi.basic.pojo.Certification;
-import com.ruoyi.basic.service.CertificationService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-@Service
-@AllArgsConstructor
-@Transactional(rollbackFor = Exception.class)
-public class CertificationServiceImpl extends ServiceImpl<CertificationMapper, Certification> implements CertificationService {
-
-
-    private CertificationMapper certificationMapper;
-
-
-    //鏌ヨ璧勮川鏄庣粏鍒楄〃
-    @Override
-    public IPage<Certification> getCertificationDetail(Page page, Certification certification) {
-        return  certificationMapper.getCertificationDetail(page, QueryWrappers.queryWrappers(certification));
-    }
-
-    //娣诲姞璧勮川鏄庣粏鍒楄〃
-    @Override
-    public int addCertificationDetail(Certification certification) {
-        return certificationMapper.insert(certification);
-    }
-
-    //鍒犻櫎璧勮川鏄庣粏鍒楄〃
-    @Override
-    public int delCertificationDetail(String ids) {
-        List<Integer> list = JSON.parseArray(ids,Integer.class);
-        return certificationMapper.deleteBatchIds(list);
-    }
-
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/LaboratoryServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/LaboratoryServiceImpl.java
deleted file mode 100644
index a91a3c5..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/LaboratoryServiceImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.mapper.LaboratoryMapper;
-import com.ruoyi.basic.pojo.Laboratory;
-import com.ruoyi.basic.service.LaboratoryService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 瀹為獙瀹ょ鐞�(Laboratory)琛ㄦ湇鍔″疄鐜扮被
- */
-@Service
-@AllArgsConstructor
-public class LaboratoryServiceImpl extends ServiceImpl<LaboratoryMapper, Laboratory> implements LaboratoryService {
-
-
-    private LaboratoryMapper laboratoryMapper;
-
-    @Override
-    public IPage<Laboratory> selectItemParameter(Page page, Laboratory itemParameter) {
-        return laboratoryMapper.selectItemParameter(page, QueryWrappers.queryWrappers(itemParameter));
-    }
-
-    @Override
-    public int addParameter(Laboratory itemParameter) {
-        return laboratoryMapper.insert(itemParameter);
-    }
-
-    @Override
-    public int delParameter(Integer id) {
-        return laboratoryMapper.deleteById(id);
-    }
-
-    @Override
-    public int upParameter(Laboratory itemParameter) {
-        return laboratoryMapper.updateById(itemParameter);
-    }
-
-    @Override
-    public List<Laboratory> obtainItemParameterList() {
-        return laboratoryMapper.selectList(Wrappers.<Laboratory>lambdaQuery().select(Laboratory::getLaboratoryName, Laboratory::getId));
-    }
-
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductPartServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductPartServiceImpl.java
deleted file mode 100644
index 5ecfb88..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductPartServiceImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.mapper.ProductPartMapper;
-import com.ruoyi.basic.mapper.StructureTestObjectPartMapper;
-import com.ruoyi.basic.pojo.ProductPart;
-import com.ruoyi.basic.pojo.StructureTestObjectPart;
-import com.ruoyi.basic.service.ProductPartService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional
-@Service
-@AllArgsConstructor
-public class ProductPartServiceImpl extends ServiceImpl<ProductPartMapper, ProductPart> implements ProductPartService {
-
-    private  ProductPartMapper productPartMapper;
-    private StructureTestObjectPartMapper structureTestObjectPartMapper;
-
-
-    @Override
-    public IPage<ProductPart> selectByProductId(IPage<ProductPart> page,ProductPart productPart) {
-        return productPartMapper.selectListByProductId(page, QueryWrappers.queryWrappers(productPart),productPart.getProductId());
-    }
-
-    @Override
-    public void addProductPart(ProductPart productPart) {
-        if (productPart.getProductId() == null) {
-            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
-        }
-        this.isPartNoExist(productPart.getPartNo(), productPart.getProductId(), null);
-        productPartMapper.insert(productPart);
-    }
-
-    @Override
-    public void updateProductPartById(ProductPart productPart) {
-        this.isPartNoExist(productPart.getPartNo(), productPart.getProductId(), productPart.getId());
-        if (productPart.getProductId() == null) {
-            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
-        }
-        productPartMapper.updateById(productPart);
-    }
-
-    // 鍒ゆ柇闆朵欢鍙锋槸鍚﹀瓨鍦�
-    public void isPartNoExist(String partNo,Integer productId, Integer id) {
-        // 闆朵欢鍙峰敮涓� 浣嗕笉蹇呭~
-        if (StringUtils.isNotBlank(partNo)) {
-            Long count = productPartMapper.selectCount(new LambdaQueryWrapper<ProductPart>()
-//                    .eq(ProductPart::getProductId, productId)
-                    .eq(ProductPart::getPartNo, partNo)
-                    .ne(id != null, ProductPart::getId, id));
-            Long selectCount = structureTestObjectPartMapper.selectCount(Wrappers.<StructureTestObjectPart>lambdaQuery()
-                    .eq(StructureTestObjectPart::getPartNo, partNo));
-            if (count > 0 || selectCount > 0) {
-                throw new BaseException("璇ラ浂浠跺彿宸茬粦瀹氳繃妫�楠屽璞�");
-            }
-        } else {
-            throw new BaseException("璇疯緭鍏ラ浂浠跺彿");
-        }
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
deleted file mode 100644
index d1786cb..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.dto.ProductDTO1;
-import com.ruoyi.basic.excel.StructureTestObjectData;
-import com.ruoyi.basic.mapper.ProductMapper;
-import com.ruoyi.basic.mapper.ProductPartMapper;
-import com.ruoyi.basic.mapper.StandardTreeMapper;
-import com.ruoyi.basic.mapper.StructureTestObjectMapper;
-import com.ruoyi.basic.pojo.*;
-import com.ruoyi.basic.service.LaboratoryService;
-import com.ruoyi.basic.service.ProductService;
-import com.ruoyi.basic.service.StandardProductListService;
-import com.ruoyi.basic.service.StructureItemParameterService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-/**
-* @author z1292
-* @description 閽堝琛ㄣ�恜roduct(浜у搧琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
-* @createDate 2024-04-26 01:11:02
-*/
-@Service
-@AllArgsConstructor
-public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
-    implements ProductService{
-
-    private ProductMapper productMapper;
-
-    private LaboratoryService laboratoryService;
-
-    private StructureTestObjectMapper structureTestObjectMapper;
-
-    private ProductPartMapper productPartMapper;
-
-    private StandardProductListService standardProductListService;
-
-    private StandardTreeMapper standardTreeMapper;
-
-    private StructureItemParameterService structureItemParameterService;
-
-    @Override
-    public IPage<Product> selectProductListByObjectId(Page page, ProductDTO1 product) {
-        String partNo = product.getPartNo();
-        product.setPartNo(null);
-        return productMapper.selectProductListByObjectId(page, QueryWrappers.queryWrappers(product), partNo);
-    }
-
-    @Override
-    public int addProduct(Product product) {
-
-        return productMapper.insert(product);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int upProduct(Product product) {
-        // 鏌ヨ鍘熸湰鐨勫悕绉�
-        Product oldProduct = productMapper.selectById(product.getId());
-
-        if (!oldProduct.getName().equals(product.getName())) {
-            // 淇敼鍚嶇О鍖归厤鐨勬爣鍑嗘爲涓嬬殑妫�楠岄」鐩�
-            // 鏌ヨ鎵�鏈夊璞�+鍚嶇О鐨勬爲
-            StructureTestObject testObject = structureTestObjectMapper.selectById(oldProduct.getObjectId());
-
-            List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
-                    .eq(StandardProductList::getSample, oldProduct.getName())
-                    .eq(StandardProductList::getSampleType, testObject.getSpecimenName()));
-            if (CollectionUtils.isNotEmpty(standardProductLists)) {
-                for (StandardProductList standardProductList : standardProductLists) {
-                    // 淇敼鏍峰搧鍚嶇О
-                    standardProductList.setSample(product.getName());
-                    // 淇敼鏍戝悕绉�
-                    // 闇�瑕佹埅鍙栫鍥涚骇, 閬垮厤涓夊洓绾у悕绉颁竴鏍蜂慨鏀归敊璇�
-                    String[] trees = standardProductList.getTree().split(" - ");
-                    trees[3] = product.getName();
-                    List<String> list = CollUtil.newArrayList(trees);
-                    String newName = CollUtil.join(list, " - ");
-                    standardProductList.setTree(newName);
-                }
-                standardProductListService.updateBatchById(standardProductLists);
-            }
-
-            // 淇敼妫�楠岄」鐩弬鏁扮殑妫�楠屽璞�
-            // 鎷兼帴["object","product"]鏌ヨ妫�楠岄」鐩弬鏁颁慨鏀圭粦瀹氱殑妫�楠屽璞�
-            String format = "[\"{}\",\"{}\"]";
-            String sampleOld = StrUtil.format(format, testObject.getSpecimenName(), oldProduct.getName());
-            List<StructureItemParameter> itemParameterList = structureItemParameterService.list(Wrappers.<StructureItemParameter>lambdaQuery()
-                    .like(StructureItemParameter::getSample, sampleOld));
-            if (CollectionUtils.isNotEmpty(itemParameterList)) {
-                for (StructureItemParameter structureItemParameter : itemParameterList) {
-                    // 淇敼缁戝畾鐨勬牱鍝佸悕绉�
-                    String sampleNew = StrUtil.format(format, testObject.getSpecimenName(), product.getName());
-                    String sampleUp = structureItemParameter.getSample().replace(sampleOld, sampleNew);
-                    structureItemParameter.setSample(sampleUp);
-                }
-                structureItemParameterService.updateBatchById(itemParameterList);
-            }
-
-            // 淇敼鏍戠殑鍨嬪彿
-            standardTreeMapper.update(null, Wrappers.<StandardTree>lambdaUpdate()
-                    .eq(StandardTree::getSampleType, testObject.getSpecimenName())
-                    .eq(StandardTree::getSample, oldProduct.getName())
-                    .set(StandardTree::getSample, product.getName()));
-        }
-
-        return productMapper.updateById(product);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int delProduct(Integer id) {
-        // 鍒犻櫎闆朵欢缁戝畾
-        productPartMapper.delete(Wrappers.<ProductPart>lambdaQuery()
-                .eq(ProductPart::getProductId, id));
-
-        return productMapper.deleteById(id);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void importPartExcel(List<StructureTestObjectData> list) {
-        list.forEach(i -> {
-            // 妫�楠屽璞�
-            StructureTestObject structureTestObject1 = structureTestObjectMapper.selectOne(Wrappers.<StructureTestObject>lambdaQuery()
-                    .eq(StructureTestObject::getSpecimenName, i.getSpecimenName())
-                    .eq(StructureTestObject::getSpecimenNameEn, i.getSpecimenNameEn()));
-            Laboratory laboratory = laboratoryService.getOne(Wrappers.<Laboratory>lambdaQuery()
-                    .eq(Laboratory::getLaboratoryName, i.getLaboratory()));
-            if (ObjectUtils.isEmpty(laboratory)) {
-                throw new BaseException("鏈壘鍒拌鍦烘墍锛�" + i.getLaboratory() + "锛岃妫�鏌ユ槸鍚﹀瓨鍦ㄨ鍦烘墍锛�");
-            }
-            // 濡傛灉涓虹┖杩涜鏂板
-            if(ObjectUtils.isEmpty(structureTestObject1)) {
-                StructureTestObject structureTestObject = new StructureTestObject();
-                structureTestObject.setLaboratoryId(laboratory.getId());
-                structureTestObject.setSpecimenName(i.getSpecimenName());
-                structureTestObject.setSpecimenNameEn(i.getSpecimenNameEn());
-                structureTestObject.setCode(i.getCode());
-                structureTestObjectMapper.insert(structureTestObject);
-
-                // 浜у搧
-                Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery()
-                        .eq(Product::getName, i.getName())
-                        .eq(Product::getNameEn, i.getNameEn()));
-                if (ObjectUtils.isEmpty(product)){
-                    Product product1 = new Product();
-                    product1.setName(i.getName());
-                    product1.setNameEn(i.getNameEn());
-                    product1.setObjectId(structureTestObject.getId());
-                    baseMapper.insert(product1);
-                }
-            } else {
-                structureTestObject1.setCode(i.getCode());
-                structureTestObject1.setLaboratoryId(laboratory.getId());
-                structureTestObjectMapper.updateById(structureTestObject1);
-                // 浜у搧
-                Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery()
-                        .eq(Product::getName, i.getName())
-                        .eq(Product::getNameEn, i.getNameEn()));
-                if (ObjectUtils.isEmpty(product)){
-                    Product product1 = new Product();
-                    product1.setName(i.getName());
-                    product1.setNameEn(i.getNameEn());
-                    product1.setObjectId(structureTestObject1.getId());
-                    baseMapper.insert(product1);
-                } else {
-                    product.setName(i.getName());
-                    product.setNameEn(i.getNameEn());
-                    product.setObjectId(structureTestObject1.getId());
-                    baseMapper.updateById(product);
-                }
-            }
-        });
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductSupplierDensityServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductSupplierDensityServiceImpl.java
deleted file mode 100644
index 54a92ab..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductSupplierDensityServiceImpl.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.mapper.ProductSupplierDensityMapper;
-import com.ruoyi.basic.pojo.ProductSupplierDensity;
-import com.ruoyi.basic.service.ProductSupplierDensityService;
-import org.springframework.stereotype.Service;
-
-/**
- * 浜у搧鍘傚瀵嗗害缁戝畾琛�
- *
- * @author zhuo
- * @since 2024-09-19
- */
-@Service
-public class ProductSupplierDensityServiceImpl extends ServiceImpl<ProductSupplierDensityMapper, ProductSupplierDensity> implements ProductSupplierDensityService {
-
-    @Override
-    public IPage<ProductSupplierDensity> selectByProductId(Page page, ProductSupplierDensity supplierDensity) {
-        if (supplierDensity.getProductId() == null) {
-            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
-        }
-        return baseMapper.selectListByProductId(page, QueryWrappers.queryWrappers(supplierDensity), supplierDensity.getProductId());
-    }
-
-    @Override
-    public void addProductSupplierDensity(ProductSupplierDensity supplierDensity) {
-        if (supplierDensity.getProductId() == null) {
-            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
-        }
-        // 鏌ヨ鏀瑰巶瀹舵槸鍚︾粦瀹氳繃
-//        Long count = baseMapper.selectCount(Wrappers.<ProductSupplierDensity>lambdaQuery()
-//                .eq(ProductSupplierDensity::getProductId, supplierDensity.getProductId())
-//                .eq(ProductSupplierDensity::getModel, supplierDensity)
-//                .eq(ProductSupplierDensity::getSupplierName, supplierDensity.getSupplierName()));
-//        if (count > 0){
-//            throw new BaseException("璇ヤ骇鍝佸凡缁戝畾杩囪鍘傚");
-//        }
-
-        baseMapper.insert(supplierDensity);
-    }
-
-    @Override
-    public void updateProductSupplierDensity(ProductSupplierDensity supplierDensity) {
-        if (supplierDensity.getProductId() == null) {
-            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
-        }
-        // 鏌ヨ鏀瑰巶瀹舵槸鍚︾粦瀹氳繃
-//        Long count = baseMapper.selectCount(Wrappers.<ProductSupplierDensity>lambdaQuery()
-//                .ne(ProductSupplierDensity::getId, supplierDensity.getId())
-//                .eq(ProductSupplierDensity::getProductId, supplierDensity.getProductId())
-//                .eq(ProductSupplierDensity::getModel, supplierDensity)
-//                .eq(ProductSupplierDensity::getSupplierName, supplierDensity.getSupplierName()));
-//        if (count > 0){
-//            throw new BaseException("璇ヤ骇鍝佸凡缁戝畾杩囪鍘傚");
-//        }
-        baseMapper.updateById(supplierDensity);
-    }
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/SealServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/SealServiceImpl.java
deleted file mode 100644
index 8e86931..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/SealServiceImpl.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.ruoyi.basic.service.impl;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.mapper.SealMapper;
-import com.ruoyi.basic.pojo.Laboratory;
-import com.ruoyi.basic.pojo.Seal;
-import com.ruoyi.basic.service.SealService;
-import com.ruoyi.common.utils.QueryWrappers;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-@AllArgsConstructor
-public class SealServiceImpl extends ServiceImpl<SealMapper, Seal> implements SealService {
-    private SealMapper sealMapper;
-
-
-    @Override
-    public int addSeal(Seal seal) {
-        return sealMapper.insert(seal);
-    }
-
-
-
-
-    @Override
-    public IPage<Seal> selectSeal(Page page, Seal seal) {
-        return sealMapper.selectSeal(page, QueryWrappers.queryWrappers(seal));
-    }
-    @Override
-    public List<Laboratory> Laboratory(Integer labId) {
-        return sealMapper.selectLaboratory(labId);
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodListServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodListServiceImpl.java
deleted file mode 100644
index 5ab1ed5..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodListServiceImpl.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.mapper.StandardMethodListMapper;
-import com.ruoyi.basic.mapper.StandardProductListMapper;
-import com.ruoyi.basic.pojo.StandardMethodList;
-import com.ruoyi.basic.pojo.StandardProductList;
-import com.ruoyi.basic.service.StandardMethodListService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_method_list(鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
-* @createDate 2024-03-04 13:44:04
-*/
-@Service
-@AllArgsConstructor
-public class StandardMethodListServiceImpl extends ServiceImpl<StandardMethodListMapper, StandardMethodList>
-    implements StandardMethodListService{
-
-    private StandardMethodListMapper standardMethodListMapper;
-
-    private StandardProductListMapper standardProductListMapper;
-
-    @Override
-    public int addStandardMethodList(Integer standardId, String tree) {
-        String[] trees = tree.split(" - ");
-        Map<String, String> map = standardMethodListMapper.selectStandardMethodById(standardId);
-        StandardMethodList list = new StandardMethodList();
-        list.setCode(map.get("code"));
-        list.setName(map.get("name"));
-        list.setRemark(map.get("remark"));
-        list.setFactory(trees[0]);
-        try {
-            list.setLaboratory(trees[1]);
-        }catch (Exception e){}
-        try {
-            list.setSampleType(trees[2]);
-        }catch (Exception e){}
-        try {
-            list.setSample(trees[3]);
-        }catch (Exception e){}
-        try {
-            list.setModel(trees[4]);
-        }catch (Exception e){}
-        standardMethodListMapper.insert(list);
-        List<StandardProductList> standardProductLists = standardMethodListMapper.selectParameterList(list.getCode());
-        for (StandardProductList standardProductList : standardProductLists) {
-            standardProductList.setStandardMethodListId(list.getId());
-            standardProductList.setFactory(trees[0]);
-            try {
-                standardProductList.setLaboratory(trees[1]);
-            }catch (Exception e){}
-            try {
-                standardProductList.setSampleType(trees[2]);
-            }catch (Exception e){}
-            try {
-                standardProductList.setSample(trees[3]);
-            }catch (Exception e){}
-            try {
-                standardProductList.setModel(trees[4]);
-            }catch (Exception e){}
-            standardProductListMapper.insert(standardProductList);
-        }
-        return 1;
-    }
-
-    @Override
-    public Map<String, List<?>> selectsStandardMethodByFLSSM(String tree) {
-        String[] trees = tree.split(" - ");
-        Map<String, List<?>> map = new HashMap<>();
-        String str = "";
-        List<StandardMethodList> standardMethodLists = new ArrayList<>();
-        switch (trees.length){
-            case 5:
-                str += "\"" + trees[2] + "\",\"" + trees[3] + "\",\"" + trees[4] + "\"";
-                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists(str));
-                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists("\"" + trees[2] + "\",\"" + trees[3] + "\""));
-                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists("\"" + trees[2] + "\""));
-                break;
-            case 4:
-                str += "\"" + trees[2] + "\",\"" + trees[3] + "\"";
-                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists(str));
-                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists("\"" + trees[2] + "\""));
-                break;
-            case 3:
-                str += "\"" + trees[2] + "\"";
-                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists3(str));
-                break;
-            default:
-                map.put("standardMethodList", null);
-                return map;
-        }
-        standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodListsByNull(str));
-        map.put("standardMethodList", standardMethodLists);
-        return map;
-    }
-
-    @Override
-    public Map<String, List<?>> selectsStandardMethodByFLSSM2(String tree) {
-        String[] trees = tree.split(" - ");
-        List<StandardMethodList> standardMethodLists = null;
-        switch (trees.length){
-            case 5:
-                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],trees[1],trees[2],trees[3],trees[4]);
-                break;
-            case 4:
-                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],trees[1],trees[2],trees[3],null);
-                break;
-            case 3:
-                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],trees[1],trees[2],null,null);
-                break;
-            case 2:
-                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],trees[1],null,null,null);
-                break;
-            case 1:
-                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],null,null,null,null);
-                break;
-        }
-        Map<String, List<?>> map = new HashMap<>();
-        map.put("standardMethodList", standardMethodLists);
-        return map;
-    }
-
-    @Override
-    public int delStandardMethodByFLSSM(Integer id) {
-        standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate().eq(StandardProductList::getStandardMethodListId, id));
-        return standardMethodListMapper.deleteById(id);
-    }
-    @Override
-    public List<StandardMethodList> selectStandardMethodEnum() {
-        return standardMethodListMapper.selectListEnum();
-    }
-
-    @Override
-    public Integer getStandardMethodId(String code) {
-        return baseMapper.getStandardMethodId(code);
-    }
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java
deleted file mode 100644
index 44566bd..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import cn.hutool.json.JSONUtil;
-import cn.hutool.poi.excel.ExcelUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.mapper.StandardMethodMapper;
-import com.ruoyi.basic.mapper.StandardProductListMapper;
-import com.ruoyi.basic.mapper.StructureItemParameterMapper;
-import com.ruoyi.basic.pojo.StandardMethod;
-import com.ruoyi.basic.pojo.StandardProductList;
-import com.ruoyi.basic.pojo.StructureItemParameter;
-import com.ruoyi.basic.service.StandardMethodService;
-import com.ruoyi.basic.service.StandardProductListService;
-import com.ruoyi.basic.service.StructureItemParameterService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * @author Administrator
- * @description 閽堝琛ㄣ�恠tandard_method(鏍囧噯鏂规硶)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
- * @createDate 2024-03-03 19:21:41
- */
-@Service
-@AllArgsConstructor
-public class StandardMethodServiceImpl extends ServiceImpl<StandardMethodMapper, StandardMethod>
-        implements StandardMethodService {
-
-
-    private StandardMethodMapper standardMethodMapper;
-
-    StandardProductListMapper standardProductListMapper;
-    StandardProductListService standardProductListService;
-
-    StructureItemParameterMapper structureItemParameterMapper;
-    StructureItemParameterService structureItemParameterService;
-
-    @Override
-    public IPage<StandardMethod> selectStandardMethodList(Page page, StandardMethod standardMethod) {
-        return standardMethodMapper.selectStandardMethodList(page, QueryWrappers.queryWrappers(standardMethod));
-    }
-
-    @Override
-    public List<StandardMethod> selectStandardMethods() {
-        return standardMethodMapper.selectList(Wrappers.<StandardMethod>lambdaQuery().select(StandardMethod::getId, StandardMethod::getCode, StandardMethod::getName).ne(StandardMethod::getId, 0));
-    }
-
-    @Override
-    public int addStandardMethod(StandardMethod standardMethod) {
-        int insert = standardMethodMapper.insert(standardMethod);
-        return insert;
-    }
-
-    @Override
-    public int delStandardMethod(Integer id) {
-        int i = standardMethodMapper.deleteById(id);
-        return i;
-    }
-
-    @Override
-    public int upStandardMethod(StandardMethod standardMethod) {
-        StandardMethod oldStandardMethod = standardMethodMapper.selectById(standardMethod.getId());
-        if (!oldStandardMethod.getCode().equals(standardMethod.getCode())) {
-            CompletableFuture.supplyAsync(() -> replaceMethod(oldStandardMethod.getCode(), standardMethod.getCode()));
-        }
-        int i = standardMethodMapper.updateById(standardMethod);
-        return i;
-    }
-
-    //缂栬緫method鍚庡叏閮ㄦ浛鎹�
-    public String replaceMethod(String oldCode, String code) {
-        //鏌ヨStandardProductList涓墍鏈塎ethod濡傛灉鍖呭惈涔嬪墠鐨勫垯鏇挎崲
-        List<StandardProductList> standardProductLists = standardProductListMapper.selectList(null);
-        for (StandardProductList standardProductList : standardProductLists) {
-            if (standardProductList.getMethod().contains(oldCode)) {
-                String[] split = standardProductList.getMethod().split(",");
-                String a = null;
-                for (int i = 0; i < split.length; i++) {
-                    String methodName = split[i].substring(1, split[i].length() - 1);
-                    if (i == 0) {
-                        methodName = split[i].substring(2, split[i].length() - 1);
-                    } else if (i == split.length - 1) {
-                        methodName = split[i].substring(1, split[i].length() - 2);
-                    }
-                    if (methodName.equals(oldCode)) {
-                        methodName = code;
-                    }
-                    a += "\"" + methodName + "\",";
-                }
-                String method = "[\"" + a.substring(0, a.length() - 1) + "\"]";
-                standardProductList.setMethod(method);
-            }
-        }
-        standardProductListService.updateBatchById(standardProductLists);
-        //鏌ヨStructureItemParameter涓墍鏈塎ethod濡傛灉鍖呭惈涔嬪墠鐨勫垯鏇挎崲
-        List<StructureItemParameter> structureItemParameters = structureItemParameterMapper.selectList(null);
-        for (StructureItemParameter structureItemParameter : structureItemParameters) {
-            if (structureItemParameter.getMethod().contains(oldCode)) {
-                String[] split = structureItemParameter.getMethod().split(",");
-                String a = null;
-                for (int i = 0; i < split.length; i++) {
-                    String methodName = split[i].substring(1, split[i].length() - 1);
-                    if (i == 0) {
-                        methodName = split[i].substring(2, split[i].length() - 1);
-                    } else if (i == split.length - 1) {
-                        methodName = split[i].substring(1, split[i].length() - 2);
-                    }
-                    if (methodName.equals(oldCode)) {
-                        methodName = code;
-                    }
-                    a += "\"" + methodName + "\",";
-                }
-                String method = "[\"" + a.substring(0, a.length() - 1) + "\"]";
-                structureItemParameter.setMethod(method);
-            }
-        }
-        structureItemParameterService.updateBatchById(structureItemParameters);
-        return "鏇挎崲瀹屾瘯!";
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void inputExcel(MultipartFile file) throws IOException {
-        // 瀛樺偍妫�娴嬪璞ist
-        List<Object> structureTestObjectIdList = new ArrayList<>();
-        List<StandardMethod> result = new ArrayList<>();
-        ExcelUtil.readBySax(file.getInputStream(), 0, (i, l, list) -> {
-            // 鍘婚櫎绗竴琛岃〃澶�
-            if (l == 0) {
-                return;
-            }
-            // 瀛樺偍鍞竴妫�娴嬪璞�
-            if (!structureTestObjectIdList.contains(list.get(2))) {
-                structureTestObjectIdList.add(list.get(2));
-            }
-            StandardMethod standardMethod = formatData(list);
-            result.add(standardMethod);
-        });
-        addStructureTest(structureTestObjectIdList, result);
-    }
-
-    // 鏍煎紡鍖栨暟鎹�
-    public StandardMethod formatData(List<Object> list) {
-        StandardMethod standardMethod = new StandardMethod();
-        standardMethod.setField(list.get(1).toString());
-        // 閫犳牸寮�
-        List<List<Object>> structureTestObjectId = new ArrayList<>();
-        if (ObjectUtils.isEmpty(list.get(3))) {
-            structureTestObjectId.add(Arrays.asList(list.get(2)));
-        } else {
-            structureTestObjectId.add(Arrays.asList(list.get(2), list.get(3)));
-        }
-        standardMethod.setStructureTestObjectId(JSONUtil.toJsonStr(structureTestObjectId));
-        standardMethod.setCode(list.get(4).toString());
-        standardMethod.setName(list.get(5).toString());
-        standardMethod.setNameEn(list.get(6).toString());
-        if (!Objects.equals(list.get(7), null)) {
-            standardMethod.setRemark(list.get(7).toString());
-        }
-        standardMethod.setQualificationId(list.get(8).toString());
-        if (ObjectUtils.isNotEmpty(list.get(9))) {
-            if (list.get(9).equals("鏄�")) {
-                standardMethod.setIsProduct(1);
-            } else if (list.get(9).equals("鍚�")) {
-                standardMethod.setIsProduct(0);
-            }
-        }
-        if (ObjectUtils.isNotEmpty(list.get(10))) {
-            if (list.get(10).equals("鏄�")) {
-                standardMethod.setIsUse(1);
-            } else if (list.get(9).equals("鍚�")) {
-                standardMethod.setIsUse(0);
-            }
-        }
-        return standardMethod;
-    }
-
-    // 鏂板鏁版嵁
-    public void addStructureTest(List<Object> structureTestObjectIdList, List<StandardMethod> standardMethodList) {
-        List<StandardMethod> updateList = new ArrayList<>();
-        List<Integer> deleteListId = new ArrayList<>();
-        List<StandardMethod> addList = new ArrayList<>();
-        if (!structureTestObjectIdList.isEmpty()) {
-            // 寰幆excel閲岄潰鐨勫垎缁�
-            structureTestObjectIdList.forEach(j -> {
-                // 浠xcel涓殑缁勫悕鏌ヨ鏁版嵁搴撲腑鐨勫垎缁�
-                List<StandardMethod> standardMethods = baseMapper.selectList(Wrappers.<StandardMethod>lambdaQuery()
-                        .like(StandardMethod::getStructureTestObjectId, "\"" + j + "\""));
-                // 灏嗙粨鏋滃惊鐜尮閰�
-                for (int i = 0; i < standardMethods.size(); i++) {
-                    boolean isExistence = false;
-                    for (int i1 = 0; i1 < standardMethodList.size(); i1++) {
-                        // 鏇存柊
-                        if (standardMethods.get(i).getStructureTestObjectId().equals(standardMethodList.get(i1).getStructureTestObjectId())
-                                && standardMethods.get(i).getCode().equals(standardMethodList.get(i1).getCode())
-                                && standardMethods.get(i).getField().equals(standardMethodList.get(i1).getField())) {
-                            // 缁檈xcel鏁版嵁璧嬪�糹d鍋氭洿鏂�
-                            standardMethodList.get(i1).setId(standardMethods.get(i).getId());
-                            // 鏇存柊
-                            updateList.add(standardMethodList.get(i1));
-                            isExistence = true;
-                            break;
-                        }
-                    }
-                    // 鍒犻櫎
-                    if (!isExistence) {
-                        deleteListId.add(standardMethods.get(i).getId());
-                    }
-                }
-                for (int i = 0; i < standardMethodList.size(); i++) {
-                    if (standardMethodList.get(i).getStructureTestObjectId().contains("\"" + j + "\"")) {
-                        boolean isExistence = false;
-                        for (int i1 = 0; i1 < standardMethods.size(); i1++) {
-                            if (standardMethods.get(i1).getStructureTestObjectId().equals(standardMethodList.get(i).getStructureTestObjectId())
-                                    && standardMethods.get(i1).getCode().equals(standardMethodList.get(i).getCode())
-                                    && standardMethods.get(i1).getField().equals(standardMethodList.get(i).getField())) {
-                                isExistence = true;
-                                break;
-                            }
-                        }
-                        // 鏂板
-                        if (!isExistence) {
-                            addList.add(standardMethodList.get(i));
-                        }
-                    }
-                }
-            });
-        }
-        if (!addList.isEmpty()) {
-            // 鏂板
-            baseMapper.insertBatchSomeColumn(addList);
-        }
-
-        if (!deleteListId.isEmpty()) {
-            // 鍒犻櫎
-            baseMapper.deleteBatchIds(deleteListId);
-        }
-
-        if (!updateList.isEmpty()) {
-            // 鏇存柊
-            updateList.forEach(i -> {
-                baseMapper.updateById(i);
-            });
-        }
-    }
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListService2Impl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListService2Impl.java
deleted file mode 100644
index eae1bc2..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListService2Impl.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.mapper.StandardProductListMapper;
-import com.ruoyi.basic.pojo.StandardProductList;
-import com.ruoyi.basic.service.StandardProductListService2;
-import org.springframework.stereotype.Service;
-
-@Service
-public class StandardProductListService2Impl extends ServiceImpl<StandardProductListMapper, StandardProductList>
-        implements StandardProductListService2 {
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
deleted file mode 100644
index c5695ec..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
+++ /dev/null
@@ -1,701 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.*;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.basic.dto.CopyStandardProductListDto;
-import com.ruoyi.basic.dto.InsSampleReceiveDto;
-import com.ruoyi.basic.dto.ProductDto;
-import com.ruoyi.basic.dto.ResetTreeDragDTO;
-import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
-import com.ruoyi.basic.mapper.StandardProductListMapper;
-import com.ruoyi.basic.mapper.StandardProductListSupplierAskMapper;
-import com.ruoyi.basic.mapper.StandardTreeMapper;
-import com.ruoyi.basic.pojo.StandardProductList;
-import com.ruoyi.basic.pojo.StandardProductListSupplierAsk;
-import com.ruoyi.basic.pojo.StandardTree;
-import com.ruoyi.basic.service.StandardProductListService;
-import com.ruoyi.basic.service.StandardProductListService2;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * @author Administrator
- * @description 閽堝琛ㄣ�恠tandard_product_list(鏍囧噯鏍戜笅鐨勬楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
- * @createDate 2024-03-05 10:33:29
- */
-@Service
-@AllArgsConstructor
-public class StandardProductListServiceImpl extends ServiceImpl<StandardProductListMapper, StandardProductList>
-        implements StandardProductListService {
-
-    private StandardProductListMapper standardProductListMapper;
-
-    private StandardTreeMapper standardTreeMapper;
-
-    private StandardProductListService2 standardProductListService2;
-
-    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
-
-    private StandardProductListSupplierAskMapper standardProductListSupplierAskMapper;
-
-
-    @Override
-    public int upStandardProductList(StandardProductList list) {
-        return standardProductListMapper.updateById(list);
-    }
-
-    @Override
-    public int delStandardProduct(JSONArray list) {
-        return standardProductListMapper.deleteBatchIds(list);
-    }
-
-    @Override
-    public List<StandardProductList> selectStandardProductList(InsSampleReceiveDto insSample) {
-        // 鏄惁娌℃湁浜у搧
-        boolean isNoSample = false;
-//        String[] models = insSample.getModel().split("-(?=[^-]*$)");//鎷嗗垎鏈�鍚庝竴涓��-銆�
-        String model = insSample.getModel();
-        String modelNum = insSample.getModelNum();
-        List<StandardProductList> list = standardProductListMapper.selectDetail(insSample.getStandardMethodListId(), 1, model, insSample.getIsCableTag());
-        if (list.size() == 0) {
-            if (Objects.equals(insSample.getFactory(), "") || insSample.getFactory() == null) {
-                return null;
-            }
-            String[] split = insSample.getFactory().split(" - ");
-            split[3] = split[3].replace("- ", "");
-            String tree = split[0] + " - " + split[1] + " - " + split[2] + " - " + split[3] + " - null";
-            list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree, insSample.getIsCableTag());
-            if (list.size() == 0) {
-                String tree1 = split[0] + " - " + split[1] + " - " + split[2] + " - null - " + split[3];
-                list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree1, insSample.getIsCableTag());
-
-                // 鍙湁瀵硅薄鐨勪竴灞�
-                if (list.size() == 0) {
-                    String tree2 = split[0] + " - " + split[1] + " - " + split[2] + " - null - null";
-                    list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree2, insSample.getIsCableTag());
-                    // 鏍峰搧鐩存帴璧嬪�兼牱鍝佸垎绫�
-                    list.forEach(standardProductList -> standardProductList.setSample(standardProductList.getSampleType()));
-                    isNoSample = true;
-                }
-            }
-        }
-        String[] split1 = insSample.getFactory().split(" - ");
-        if (!isNoSample) {
-            //鍒ゆ柇闀垮害
-            if (split1.length > 4) {
-                if (ObjectUtils.isNotEmpty(split1[3])) {
-                    list = list.stream().filter(list1 -> Objects.nonNull(list1.getSample()) && Objects.equals(list1.getSample(), split1[3])).collect(Collectors.toList());
-                } else if (split1[3].equals("")) {
-                    list = list.stream().filter(list1 -> Objects.nonNull(list1.getSampleType()) && Objects.equals(list1.getSampleType(), split1[2])).collect(Collectors.toList());
-                }
-            }
-        }
-        list = list.stream().filter(a -> {
-                    try {
-                        if (a.getSection() != null && !Objects.equals(a.getSection(), "")) {
-                            List<String> sections = JSON.parseArray(a.getSection(), String.class);// 鍖洪棿
-                            List<String> cores = JSON.parseArray(a.getCores(), String.class); // 鑺暟
-                            List<String> conductorMaterials = JSON.parseArray(a.getConductorMaterial(), String.class); // 瀵间綋鏉愯川
-                            List<String> conductorTypes = JSON.parseArray(a.getConductorType(), String.class); // 瀵间綋绫诲瀷
-                            List<String> asks = JSON.parseArray(a.getAsk(), String.class);
-                            List<String> tells = JSON.parseArray(a.getTell(), String.class);
-                            boolean isIf;
-                            for (int i = 0; i < sections.size(); i++) {
-                                if (Objects.equals(a.getBsm(), "1")) {
-                                    return true;
-                                } else {
-                                    if (sections.get(i).contains("&")) {
-                                        String[] split = sections.get(i).split("&");
-                                        isIf = getIsIf(split[0], modelNum, cores.get(i), conductorMaterials.get(i), conductorTypes.get(i), insSample)
-                                                && getIsIf(split[1], modelNum, cores.get(i), conductorMaterials.get(i), conductorTypes.get(i), insSample);
-                                    } else {
-                                        isIf = getIsIf(sections.get(i), modelNum, cores.get(i), conductorMaterials.get(i), conductorTypes.get(i), insSample);
-                                    }
-                                    if (isIf) {
-                                        a.setSection(sections.get(i));
-                                        a.setAsk(asks.get(i));
-                                        a.setTell(tells.get(i));
-                                        return true;
-                                    }
-                                }
-                            }
-                            return false;
-                        }
-                    } catch (Exception ignored) {
-                        return false;
-                    }
-                    return true;
-                }).peek(standardProductList -> {
-                    // todo: 鍒ゆ柇鏄惁鏄師鏉愪笅鍗�, 闇�瑕佸晩鎶婇鑹茬粦瀹氬埌璇曟牱棰滆壊鐨勮姹傚�间笂
-                    if (StringUtils.isNotBlank(insSample.getPartNo())) {
-                        // 鍒ゆ柇鏄惁鏈夎繖涓瓧娈典笖鏄枃鏈被鍨�
-                        if (StringUtils.isNotBlank(standardProductList.getInspectionItem())
-                                && standardProductList.getInspectionItem().contains("璇曟牱棰滆壊")) {
-                            Map<String, String> partColor = baseMapper.selectPartColor(insSample.getPartNo());
-                            if (CollectionUtils.isNotEmpty(partColor)) {
-                                if (StringUtils.isNotBlank(partColor.get("color"))) {
-                                    // 鍒ゆ柇妫�楠屽�兼槸鍚︿负绌哄拰涓嶇瓑浜� -  鍜� /
-                                    if (StringUtils.isBlank(standardProductList.getAsk()) || partColor.get("color").contains("鏈�")) { // 娌℃湁ask鐩存帴澶嶅埗
-                                        // 鏌ヨ瀵硅薄缁戝畾琛ㄥ拰浜у搧缁戝畾琛�
-                                        standardProductList.setAsk("=" + partColor.get("color")
-                                                + (StringUtils.isBlank(partColor.get("color_code")) ? "" : "(" + partColor.get("color_code") + ")"));
-                                        standardProductList.setTell(partColor.get("color")
-                                                + (StringUtils.isBlank(partColor.get("color_code")) ? "" : "(" + partColor.get("color_code") + ")"));
-                                        standardProductList.setInspectionValueType("2");
-                                    } else { // 鎷兼帴鍒拌姹傛弿杩板墠闈�
-                                        standardProductList.setTell(partColor.get("color")
-                                                + (StringUtils.isBlank(partColor.get("color_code")) ? "" : "(" + partColor.get("color_code") + ")") + "@" + standardProductList.getTell());
-                                    }
-                                }
-                            }
-                        }
-                    }
-                })
-                .collect(Collectors.toList());
-
-        // 鏌ヨ鍘傚鏄惁鏈夌壒娈婅姹傚��
-        if (insSample.getIfsInventoryId() != null) {
-            // 鏌ヨ鍘熸潗鏂欏巶瀹跺悕绉�
-            String supplierName = ifsInventoryQuantityMapper.selectById(insSample.getIfsInventoryId())
-                    .getSupplierName();
-            List<Long> collect = list.stream().map(StandardProductList::getId).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(collect)) {
-                List<StandardProductListSupplierAsk> supplierAsks = standardProductListSupplierAskMapper.selectList(Wrappers.<StandardProductListSupplierAsk>lambdaQuery()
-                        .in(StandardProductListSupplierAsk::getProductListId, collect)
-                        .eq(StandardProductListSupplierAsk::getSupplierName, supplierName));
-
-                // 鍒ゆ柇鏈夋病鏈夌壒娈婂�肩粦瀹�
-                if (CollectionUtils.isNotEmpty(supplierAsks)) {
-                    for (StandardProductList standardProductList : list) {
-                        for (StandardProductListSupplierAsk supplierAsk : supplierAsks) {
-                            if (standardProductList.getId().equals(supplierAsk.getProductListId())) {
-                                // 閲嶆柊璧嬪�艰姹傚�煎拰瑕佹眰鎻忚堪
-                                standardProductList.setAsk(supplierAsk.getAsk());
-                                standardProductList.setTell(supplierAsk.getTell());
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        return list;
-    }
-
-    /**
-     *
-     * @param str                 鍒ゅ畾鍏紡
-     * @param model               鍨嬪彿
-     * @param standardCores       鑺暟
-     * @param conductorMaterial   瀵间綋鏉愯川
-     * @param conductorType       瀵间綋绫诲瀷
-     * @param insSample
-     * @return
-     */
-    private boolean getIsIf(String str, String model, String standardCores, String conductorMaterial, String conductorType,InsSampleReceiveDto insSample) {
-        Matcher matcher = Pattern.compile("\\d+(\\.\\d+)?").matcher(model);
-        String model2 = "";
-        while (matcher.find()) {
-            model2 += matcher.group();
-            break;
-        }
-        boolean flag = false;
-        if (str.contains("鈮�") || str.contains(">=")) {
-            String param = str.replace("鈮�", "").replace(">=", "");
-            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) > -1;
-        } else if (str.contains("鈮�") || str.contains("<=")) {
-            String param = str.replace("鈮�", "").replace("<=", "");
-            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) < 1;
-        } else if (str.contains(">") || str.contains("锛�")) {
-            String param = str.replace(">", "").replace("锛�", "");
-            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) > 0;
-        } else if (str.contains("<") || str.contains("锛�")) {
-            String param = str.replace("<", "").replace("锛�", "");
-            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) < 0;
-        } else if (str.contains("=")) {
-            String param = str.replace("=", "");
-            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) == 0;
-        }
-        if (flag) {
-            boolean coresMatch = true;
-            boolean conductorMaterialMatch = true;
-            boolean conductorTypeMatch = true;
-
-            // 鍒ゆ柇鏄惁鏈夌嚎鑺暟閲�
-            if (StringUtils.isNotBlank(standardCores)) {
-                if (StringUtils.isBlank(insSample.getCores()) || !standardCores.equals(insSample.getCores())) {
-                    coresMatch = false;
-                }
-            }
-
-            // 鍒ゆ柇鏄惁鏈夊浣撴潗璐�
-            if (StringUtils.isNotBlank(conductorMaterial)) {
-                if (StringUtils.isBlank(insSample.getConductorMaterial()) || !conductorMaterial.equals(insSample.getConductorMaterial())) {
-                    conductorMaterialMatch = false;
-                }
-            }
-
-            // 鍒ゆ柇鏄惁鏈夊浣撶被鍨�
-            if (StringUtils.isNotBlank(conductorType)) {
-                if (StringUtils.isBlank(insSample.getConductorType()) || !conductorType.equals(insSample.getConductorType())) {
-                    conductorTypeMatch = false;
-                }
-            }
-            // 鏈�缁堝垽鏂�
-            flag = coresMatch && conductorMaterialMatch && conductorTypeMatch;
-        }
-
-        return flag;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Map<String, Object> selectStandardProductListByMethodId(Integer id, String tree, Integer page) {
-        String[] trees = tree.split(" - ");
-        try {
-            String tree1 = trees[2];
-        } catch (Exception e) {
-            throw new BaseException("鎿嶄綔澶揩,绯荤粺浼犲弬閿欒!!!!");
-        }
-        boolean isDrag = false;
-        List<StandardProductList> list = new ArrayList<>();
-        if (trees.length == 3) {
-            List<StandardTree> treeList = new ArrayList<>();
-            StandardTree standardTree = new StandardTree();
-            standardTree.setFactory(trees[0]);
-            standardTree.setLaboratory(trees[1]);
-            standardTree.setSampleType(trees[2]);
-            List<ProductDto> pList = standardTreeMapper.selectPList(trees[2]);
-            if (pList.size() == 0 || pList.get(0) == null) {
-                List<StandardTree> treeList1 = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]));
-                if (treeList1.size() == 0) {
-                    treeList.add(standardTree);
-                } else {
-                    treeList.addAll(treeList1);
-                }
-            } else {
-                for (ProductDto p : pList) {
-                    standardTree.setSample(p.getName());
-                    List<StandardTree> treeList1 = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, p.getName()));
-                    if (treeList1.size() == 0) {
-                        treeList.add(JSON.parseObject(JSON.toJSONString(standardTree), StandardTree.class));
-                    } else {
-                        treeList.addAll(treeList1);
-                    }
-                }
-            }
-            for (StandardTree standardTree2 : treeList) {
-                String tree2 = trees[0] + " - " + trees[1] + " - " + trees[2] + " - " + standardTree2.getSample() + " - " + standardTree2.getModel();
-                list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree2.getSample(), standardTree2.getModel(), tree2, trees[1]));
-                list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + standardTree2.getSample() + "\"", standardTree2.getSample(), standardTree2.getModel(), tree2, trees[1]));
-            }
-        } else if (trees.length == 4) {
-            // 鍒ゆ柇绗洓灞傛槸鍚︽湁鍨嬪彿
-            Long count = standardProductListMapper.selectCount(Wrappers.<StandardProductList>lambdaQuery()
-                    .eq(StandardProductList::getStandardMethodListId, id)
-                    .isNull(StandardProductList::getModel)
-                    .like(StandardProductList::getTree, tree));
-            if (count == 0) {
-                isDrag = true;
-            }
-
-            isDrag = true;
-            List<StandardTree> treeList = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]));
-            if (treeList.size() == 0) {
-                StandardTree standardTree = new StandardTree();
-                standardTree.setFactory(trees[0]);
-                standardTree.setLaboratory(trees[1]);
-                standardTree.setSampleType(trees[2]);
-                standardTree.setSample(trees[3]);
-                treeList.add(standardTree);
-            }
-            for (StandardTree standardTree : treeList) {
-                String str = tree + " - " + standardTree.getModel();
-                list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree.getSample(), standardTree.getModel(), str, trees[1]));
-                list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", standardTree.getSample(), standardTree.getModel(), str, trees[1]));
-            }
-        } else {
-            isDrag = true;
-            list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", trees[3].equals("null") ? null : trees[3], trees[4], tree, trees[1]));
-            list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", trees[3].equals("null") ? null : trees[3], trees[4], tree, trees[1]));
-        }
-        for (StandardProductList productList : list) {
-            productList.setId(IdWorker.getId());
-        }
-        List<StandardProductList> standardProductLists;
-
-        if (isDrag) {
-            standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
-                    .eq(StandardProductList::getStandardMethodListId, id)
-                    .like(StandardProductList::getTree, tree)
-                    .orderByAsc(StandardProductList::getSort));
-            // 鍒ゆ柇鏄惁鏈夋病鏈夊簭鍙风殑, 娌℃湁搴忓彿閲嶇疆
-            boolean b = standardProductLists.stream().anyMatch(standardProductList -> standardProductList.getSort() == null);
-        } else {
-            standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
-                    .eq(StandardProductList::getStandardMethodListId, id)
-                    .like(StandardProductList::getTree, tree));
-        }
-
-        for (StandardProductList sp : standardProductLists) {
-            for (StandardProductList pl : list) {
-                // 鍒ゆ柇鏉′欢鏄惁鍙湁涓�涓�, 鏈変竴涓殑璇濋粯璁ょ涓�涓�
-                String radiusList = pl.getRadiusList();
-                if (StringUtils.isNotBlank(radiusList) && !radiusList.equals("null") && !radiusList.equals("\"\"")) {
-                    JSONArray jsonArray = JSON.parseArray(radiusList);
-                    List<String> radius = jsonArray.toJavaList(String.class);
-                    if (CollectionUtils.isNotEmpty(radius) && radius.size() == 1) {
-                        pl.setRadius(radius.get(0));
-                    }
-                }
-                if (Objects.equals(sp.getInspectionItem(), pl.getInspectionItem())
-                        && Objects.equals((sp.getInspectionItemSubclass() == null) ? "" : sp.getInspectionItemSubclass(), pl.getInspectionItemSubclass() == null ? "" : pl.getInspectionItemSubclass())
-//                        && Objects.equals(sp.getSample(), pl.getSample())
-                        && Objects.equals(sp.getModel(), pl.getModel())
-                        && sp.getTree().indexOf(pl.getSample() == null ? "null" : pl.getSample()) > -1
-                        && Objects.equals(sp.getStructureItemParameterId(), pl.getStructureItemParameterId())) {
-                    pl.setId(sp.getId());
-                    // 娣诲姞鎺掑簭瀛楁
-                    pl.setSort(sp.getSort());
-                    if (sp.getState() != null && !sp.getState().equals("")) {
-                        pl.setState(sp.getState());
-                    } else {
-                        pl.setState(id == 0 ? 1 : 0);
-                    }
-                    if (sp.getMethodS() != null && !sp.getMethodS().equals("")) {
-                        pl.setMethod(sp.getMethodS());
-                    }
-                    if (sp.getRadius() != null && !sp.getRadius().equals("")) {
-                        pl.setRadius(sp.getRadius());
-                    }
-                    if (sp.getRates() != null && !sp.getRates().equals("")) {
-                        pl.setRates(sp.getRates());
-                    }
-                    if (sp.getAsk() != null && !sp.getAsk().equals("")) {
-                        pl.setAsk(sp.getAsk());
-                    }
-                    if (sp.getTell() != null && !sp.getTell().equals("")) {
-                        pl.setTell(sp.getTell());
-                    }
-                    if (sp.getPrice() != null && !sp.getPrice().equals("")) {
-                        pl.setPrice(sp.getPrice());
-                    }
-                    if (sp.getManHour() != null && !sp.getManHour().equals("")) {
-                        pl.setManHour(sp.getManHour());
-                    }
-                    if (sp.getSection() != null && !sp.getSection().equals("")) {
-                        pl.setSection(sp.getSection());
-                    }
-                    if (sp.getCores() != null && !sp.getCores().equals("")) {
-                        pl.setCores(sp.getCores());
-                    }
-                    if (sp.getConductorMaterial() != null && !sp.getConductorMaterial().equals("")) {
-                        pl.setConductorMaterial(sp.getConductorMaterial());
-                    }
-                    if (sp.getConductorType() != null && !sp.getConductorType().equals("")) {
-                        pl.setConductorType(sp.getConductorType());
-                    }
-                    if (sp.getTemplateId() != null && !sp.getTemplateId().equals("")) {
-                        pl.setTemplateId(sp.getTemplateId());
-                    }
-                    //鍥犱负杩樻湁涓骇鍝佸彨鑰愬紶绾垮す 鎺ョ画閲戝叿 ,杩欎袱涓」鐩殑鏁版嵁瀹屽叏涓�鏍�,鐗规畩澶勭悊
-                    if (sp.getTree() != null && !sp.getTree().equals("") && !pl.getTree().equals("涓ぉ绉戞妧妫�娴嬩腑蹇� - 鐢靛姏浜у搧瀹為獙瀹� - 閲戝叿 - 鑰愬紶绾垮す - null")) {
-                        pl.setTree(sp.getTree());
-                    }
-                    break;
-                }
-            }
-        }
-        if (page == 1) {
-            Integer userId = SecurityUtils.getUserId().intValue();
-//            CompletableFuture.supplyAsync(() -> {
-            if (trees.length == 5) {
-                standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate()
-                        .eq(StandardProductList::getStandardMethodListId, id)
-                        .eq(StandardProductList::getTree, tree));
-            } else {
-                standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate()
-                        .eq(StandardProductList::getStandardMethodListId, id)
-                        .like(StandardProductList::getTree, tree));
-            }
-
-            boolean success = false;
-            int retryCount = 0;
-            while (!success && retryCount < 100) {
-                try {
-                    standardProductListService2.saveBatch(list.stream().map(a -> {
-                        a.setFactory(trees[0]);
-                        a.setLaboratory(trees[1]);
-                        a.setSampleType(trees[2]);
-                        a.setCreateUser(userId);
-                        a.setUpdateUser(userId);
-                        a.setStandardMethodListId(id);
-                        return a;
-                    }).collect(Collectors.toList()));
-                    ;
-                    success = true;
-                } catch (Exception e) {
-                    // 澶勭悊閲嶅 ID 鐨勮褰曪紝閲嶆柊鐢熸垚 ID 骞剁户缁皾璇曟彃鍏�
-                    for (StandardProductList productList : list) {
-                        productList.setId(IdWorker.getId());
-                    }
-                }
-            }
-            if (!success) {
-                throw new RuntimeException("鎻掑叆澶辫触");
-            }
-
-        }
-        Map<String, Object> map = new HashMap<>();
-        Collections.sort(list, (o1, o2) -> {
-            String field1 = o1.getManHourGroup();
-            String field2 = o2.getManHourGroup();
-
-            boolean isEmpty1 = field1 == null || field1.isEmpty();
-            boolean isEmpty2 = field2 == null || field2.isEmpty();
-
-            if (isEmpty1 && isEmpty2) {
-                return 0;
-            } else if (isEmpty1) {
-                return 1;
-            } else if (isEmpty2) {
-                return -1;
-            } else {
-                int num1 = extractNumber(field1);
-                int num2 = extractNumber(field2);
-                return Integer.compare(num1, num2);
-            }
-        });
-          // 鎸夌収绱㈠紩鎺掑簭
-        if (isDrag) {
-            list.sort((o1, o2) -> (o1.getSort() == null ? 0 : o1.getSort())
-                    - (o2.getSort() == null ? 0 : o2.getSort()));
-        }
-        try {
-            map.put("productList", list.subList((page - 1) * 300, page * 300));
-        } catch (IndexOutOfBoundsException e) {
-            map.put("productList", list.subList((page - 1) * 300, list.size()));
-        }
-        map.put("total", list.size());
-        return map;
-    }
-
-    private int extractNumber(String s) {
-        // 浠庡瓧绗︿覆涓彁鍙栨暟瀛楃殑閫昏緫锛岃繖閲屽亣璁惧瓧娈电殑鏍煎紡鏄� "text<number>"
-        String number = s;
-        if (!s.matches("\\d+")) {
-            number = s.replaceAll("\\D", "");
-        }
-        return Integer.parseInt(number);
-    }
-
-    @Override
-    public IPage<StandardProductList> selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items) {
-        IPage<StandardProductList> iPage = new Page<>();
-        iPage.setSize(100);
-        iPage.setCurrent(page);
-        return standardProductListMapper.standardProductListIPage(id, tree, iPage, laboratory, item, items);
-    }
-
-    @Override
-    public Map<String, List<?>> selectStandardProductEnumByMethodId(Integer id, String tree, String item) {
-        HashMap<String, List<?>> map = new HashMap<>();
-        map.put("item", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
-                .eq(StandardProductList::getStandardMethodListId, id)
-                .like(StandardProductList::getTree, tree)
-                .select(StandardProductList::getInspectionItem)
-                .groupBy(StandardProductList::getInspectionItem)));
-        if (ObjectUtils.isNotEmpty(item)) {
-            map.put("items", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
-                    .eq(StandardProductList::getStandardMethodListId, id)
-                    .eq(StandardProductList::getInspectionItem, item)
-                    .like(StandardProductList::getTree, tree)
-                    .select(StandardProductList::getInspectionItemSubclass)
-                    .groupBy(StandardProductList::getInspectionItemSubclass)));
-        } else {
-            map.put("items", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
-                    .eq(StandardProductList::getStandardMethodListId, id)
-                    .like(StandardProductList::getTree, tree)
-                    .select(StandardProductList::getInspectionItemSubclass)
-                    .groupBy(StandardProductList::getInspectionItemSubclass)));
-        }
-        return map;
-    }
-
-    /**
-     * 淇敼鏍囧噯搴撳尯闂�
-     * @param list
-     * @return
-     */
-    @Override
-    public boolean updateSection(StandardProductList list) {
-        standardProductListMapper.updateSection(list);
-        return true;
-    }
-
-
-    /**
-     * 鏍囧噯搴撴嫋鎷�
-     * @param resetTreeDragDTO
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void resetTreeDrag(ResetTreeDragDTO resetTreeDragDTO) {
-        Integer beginIndex = Integer.parseInt(resetTreeDragDTO.getBeginIndex());
-        Integer endIndex = Integer.parseInt(resetTreeDragDTO.getEndIndex());
-        Integer methodId = Integer.parseInt(resetTreeDragDTO.getMethodId());
-        Long productionId = Long.parseLong(resetTreeDragDTO.getProductionId());
-        // 鍒ゆ柇鏄粠涓婂線涓嬫嫋鎷借繕鏄粠涓嬪線涓婃斁鎷栨嫿
-        // 浠庝笂寰�涓�
-        if (beginIndex < endIndex) {
-            standardProductListMapper.updateSortUp(beginIndex,
-                    endIndex,
-                    methodId,
-                    resetTreeDragDTO.getTree());
-
-            // 浠庝笅寰�涓�
-        } else if (beginIndex > endIndex){
-            standardProductListMapper.updateSortDown(beginIndex,
-                    endIndex,
-                    methodId,
-                    resetTreeDragDTO.getTree());
-        } else {
-            return;
-        }
-        // 淇敼鏍囧噯搴撻」椤哄簭
-        standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate()
-                .eq(StandardProductList::getId, productionId)
-                .set(StandardProductList::getSort, endIndex));
-    }
-
-    @Override
-    public void resetTreeDragBatch(List<StandardProductList> standardProductLists) {
-        standardProductListService2.updateBatchById(standardProductLists);
-    }
-
-    /**
-     * 妫�楠岄」瑕佹眰鍊煎姣�
-     * @param copyDto
-     * @return
-     */
-    @Override
-    public List<StandardProductList> copyStandardProductList(CopyStandardProductListDto copyDto) {
-        List<StandardProductList> productLists = new ArrayList<>();
-
-        // 瀵规瘮妫�楠岄」涓�鏍风殑濉厖瑕佹眰鍊艰姹傛弿杩�
-        for (StandardProductList oldProductList : copyDto.getOldStandardProductList()) {
-            String oldItemName = oldProductList.getInspectionItemClassEn()
-                    + oldProductList.getInspectionItem()
-                    + oldProductList.getInspectionItemSubclass();
-            for (StandardProductList newProductList : copyDto.getNewStandardProductList()) {
-                String newItemName = newProductList.getInspectionItemClassEn()
-                        + newProductList.getInspectionItem()
-                        + newProductList.getInspectionItemSubclass();
-                // 鍒ゆ柇鍚嶇О鏄惁涓�鏍�
-                if (oldItemName.equals(newItemName)) {
-                    // 鍖洪棿
-                    oldProductList.setSection(newProductList.getSection());
-                    // 鑺暟
-                    oldProductList.setCores(newProductList.getCores());
-                    // 瑕佹眰鍊�
-                    oldProductList.setAsk(newProductList.getAsk());
-                    // 瑕佹眰鎻忚堪
-                    oldProductList.setTell(newProductList.getTell());
-                    // 鍗曚环
-                    oldProductList.setPrice(newProductList.getPrice());
-                    // 宸ユ椂鍒嗙粍
-                    oldProductList.setManHour(newProductList.getManHour());
-                    // 瀵间綋鏉愯川
-                    oldProductList.setConductorMaterial(newProductList.getConductorMaterial());
-                    // 瀵间綋绫诲瀷
-                    oldProductList.setConductorType(newProductList.getConductorType());
-                    productLists.add(oldProductList);
-                }
-            }
-        }
-        return productLists;
-    }
-
-    /**
-     * 妫�楠岄」澶嶅埗瀵规瘮涓�涓�
-     * @param dto
-     * @return
-     */
-    @Override
-    public List<StandardProductList> copyStandardProductOne(CopyStandardProductListDto dto) {
-        if (CollectionUtils.isEmpty(dto.getNewStandardProductList()) && dto.getNewStandardProductList().size() == 1 &&
-                CollectionUtils.isEmpty(dto.getOldStandardProductList()) && dto.getOldStandardProductList().size() == 1) {
-            throw new BaseException("闇�瑕佸姣旂殑妫�楠岄」璇烽�夋嫨涓�涓�");
-        }
-        StandardProductList newProductList = dto.getNewStandardProductList().get(0);
-        StandardProductList oldProductList = dto.getOldStandardProductList().get(0);
-        // 鍖洪棿
-        oldProductList.setSection(newProductList.getSection());
-        // 鑺暟
-        oldProductList.setCores(newProductList.getCores());
-        // 瑕佹眰鍊�
-        oldProductList.setAsk(newProductList.getAsk());
-        // 瑕佹眰鎻忚堪
-        oldProductList.setTell(newProductList.getTell());
-        // 鍗曚环
-        oldProductList.setPrice(newProductList.getPrice());
-        // 宸ユ椂鍒嗙粍
-        oldProductList.setManHour(newProductList.getManHour());
-        // 瀵间綋鏉愯川
-        oldProductList.setConductorMaterial(newProductList.getConductorMaterial());
-        // 瀵间綋绫诲瀷
-        oldProductList.setConductorType(newProductList.getConductorType());
-        List<StandardProductList> productLists = new ArrayList<>();
-        productLists.add(oldProductList);
-        return productLists;
-    }
-
-    /**
-     * 妫�楠岄」澶嶅埗鎺掑簭
-     * @param copyDto
-     * @return
-     */
-    @Override
-    public boolean copyStandardProductSort(CopyStandardProductListDto copyDto) {
-        List<StandardProductList> productLists = new ArrayList<>();
-
-        // 瀵规瘮妫�楠岄」涓�鏍风殑濉厖瑕佹眰鍊艰姹傛弿杩�
-        for (StandardProductList oldProductList : copyDto.getOldStandardProductList()) {
-            String oldItemName = oldProductList.getInspectionItemClassEn()
-                    + oldProductList.getInspectionItem()
-                    + oldProductList.getInspectionItemSubclass();
-            for (StandardProductList newProductList : copyDto.getNewStandardProductList()) {
-                String newItemName = newProductList.getInspectionItemClassEn()
-                        + newProductList.getInspectionItem()
-                        + newProductList.getInspectionItemSubclass();
-                // 鍒ゆ柇鍚嶇О鏄惁涓�鏍�
-                if (oldItemName.equals(newItemName)) {
-                    StandardProductList standardProductList = new StandardProductList();
-                    standardProductList.setId(oldProductList.getId());
-                    // 澶嶅埗鎺掑簭
-                    standardProductList.setSort(newProductList.getSort());
-                    productLists.add(standardProductList);
-                }
-            }
-        }
-        this.updateBatchById(productLists);
-        return false;
-    }
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListSupplierAskServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListSupplierAskServiceImpl.java
deleted file mode 100644
index 95ac78d..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListSupplierAskServiceImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.basic.mapper.StandardProductListSupplierAskMapper;
-import com.ruoyi.basic.pojo.StandardProductListSupplierAsk;
-import com.ruoyi.basic.service.StandardProductListSupplierAskService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 妫�楠岄」鐩巶瀹跺瘑搴︾粦瀹氳〃
- *
- * @author zhuo
- * @since 2024-09-23
- */
-@Service
-public class StandardProductListSupplierAskServiceImpl extends ServiceImpl<StandardProductListSupplierAskMapper, StandardProductListSupplierAsk> implements StandardProductListSupplierAskService {
-
-    /**
-     * 鏌ヨ鍘傚瑕佹眰鍊肩粦瀹�
-     * @param supplierAsk
-     * @return
-     */
-    @Override
-    public List<StandardProductListSupplierAsk> selectByProductId(StandardProductListSupplierAsk supplierAsk) {
-        if (supplierAsk.getProductListId() == null) {
-            throw new BaseException("缂哄皯妫�楠岄」id");
-        }
-        return baseMapper.selectList(Wrappers.<StandardProductListSupplierAsk>lambdaQuery()
-                .eq(StandardProductListSupplierAsk::getProductListId, supplierAsk.getProductListId()));
-    }
-
-    /**
-     * 鏂板鍘傚瑕佹眰鍊肩粦瀹�
-     * @param supplierAsk
-     * @return
-     */
-    @Override
-    public Integer addProductSupplierAsk(StandardProductListSupplierAsk supplierAsk) {
-        if (supplierAsk.getProductListId() == null) {
-            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
-        }
-        // 鏌ヨ鏀瑰巶瀹舵槸鍚︾粦瀹氳繃
-        Long count = baseMapper.selectCount(Wrappers.<StandardProductListSupplierAsk>lambdaQuery()
-                .eq(StandardProductListSupplierAsk::getProductListId, supplierAsk.getProductListId())
-                .eq(StandardProductListSupplierAsk::getSupplierName, supplierAsk.getSupplierName()));
-        if (count > 0){
-            throw new BaseException("璇ヤ骇鍝佸凡缁戝畾杩囪鍘傚");
-        }
-        baseMapper.insert(supplierAsk);
-        return supplierAsk.getSupplierAskId();
-    }
-
-    /**
-     * 淇敼鍘傚瑕佹眰鍊肩粦瀹�
-     * @param supplierAsk
-     * @return
-     */
-    @Override
-    public Integer updateProductSupplierAsk(StandardProductListSupplierAsk supplierAsk) {
-        if (supplierAsk.getProductListId() == null) {
-            throw new BaseException("缂哄皯妫�楠岄」id");
-        }
-        // 鏌ヨ鏀瑰巶瀹舵槸鍚︾粦瀹氳繃
-        Long count = baseMapper.selectCount(Wrappers.<StandardProductListSupplierAsk>lambdaQuery()
-                .ne(StandardProductListSupplierAsk::getSupplierAskId, supplierAsk.getSupplierAskId())
-                .eq(StandardProductListSupplierAsk::getProductListId, supplierAsk.getProductListId())
-                .eq(StandardProductListSupplierAsk::getSupplierName, supplierAsk.getSupplierName()));
-        if (count > 0){
-            throw new BaseException("璇ユ楠岄」宸茬粦瀹氳繃璇ュ巶瀹�");
-        }
-        baseMapper.updateById(supplierAsk);
-        return supplierAsk.getSupplierAskId();
-    }
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTemplateServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTemplateServiceImpl.java
deleted file mode 100644
index f1f3ba4..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTemplateServiceImpl.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import cn.hutool.core.date.DateUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.numgen.NumberGenerator;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.mapper.StandardTemplateMapper;
-import com.ruoyi.basic.pojo.StandardTemplate;
-import com.ruoyi.basic.service.StandardTemplateService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-
-/**
-* @author Administrator
-* @description 閽堝琛ㄣ�恠tandard_template(鏍囧噯妯℃澘)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
-* @createDate 2024-03-11 13:47:52
-*/
-@Service
-@AllArgsConstructor
-public class StandardTemplateServiceImpl extends ServiceImpl<StandardTemplateMapper, StandardTemplate>
-    implements StandardTemplateService{
-
-    private StandardTemplateMapper standardTemplateMapper;
-
-
-    private final NumberGenerator<StandardTemplate> numberGenerator;
-
-    @Override
-    public IPage<StandardTemplate> selectStandardTemplatePageList(Page page, StandardTemplate standardTemplate) {
-        return standardTemplateMapper.selectStandardTemplatePageList(page, QueryWrappers.queryWrappers(standardTemplate));
-    }
-
-    @Override
-    public int addStandardTemplate(StandardTemplate standardTemplate) {
-        if (StringUtils.isBlank(standardTemplate.getNumber())) {
-            String giveCode = numberGenerator.generateNumberWithPrefix(5,
-                    "MB" + DateUtil.format(new Date(), "yyMM"),
-                    StandardTemplate::getNumber);
-            standardTemplate.setNumber(giveCode);
-        }
-        return standardTemplateMapper.insert(standardTemplate);
-    }
-
-    @Override
-    public int upStandardTemplate(StandardTemplate standardTemplate) {
-        if(standardTemplate.getThing().equals("")){
-            standardTemplate.setThing(null);
-        }
-        return standardTemplateMapper.updateById(standardTemplate);
-    }
-
-    @Override
-    public int delStandardTemplate(Integer id) {
-        return standardTemplateMapper.deleteById(id);
-    }
-
-    @Override
-    public List<StandardTemplate> getStandardTemplate() {
-        return standardTemplateMapper.selectList(Wrappers.<StandardTemplate>lambdaQuery().select(StandardTemplate::getId,StandardTemplate::getName));
-    }
-
-    @Override
-    public String getStandTempThingById(Integer templateId) {
-        StandardTemplate standardTemplate = standardTemplateMapper.selectOne(Wrappers.<StandardTemplate>lambdaQuery()
-                .eq(StandardTemplate::getId, templateId)
-                .select(StandardTemplate::getThing));
-        if(standardTemplate==null){
-            return null;
-        }else{
-            return standardTemplate.getThing();
-        }
-        // 鏌ヨ鍘嬬缉鍚庣殑鏁版嵁
-//        String thing = standardTemplateMapper.selectCompressThing(templateId);
-//        if (StringUtils.isNotBlank(thing)) {
-//            try {
-//                return DecompressMySQLData.decompress(java.util.Base64.getDecoder().decode(thing));
-//            } catch (Exception e) {
-//                throw new RuntimeException(e);
-//            }
-//        } else {
-//            return null;
-//        }
-    }
-
-    @Override
-    public String getStandTempNameById(Integer templateId) {
-        StandardTemplate standardTemplate = standardTemplateMapper.selectOne(Wrappers.<StandardTemplate>lambdaQuery()
-                .eq(StandardTemplate::getId, templateId)
-                .select(StandardTemplate::getName));
-        if(standardTemplate==null){
-            return null;
-        }else{
-            return standardTemplate.getName();
-        }
-    }
-
-    @Override
-    public StandardTemplate getStandTempIdByName(String name) {
-        return standardTemplateMapper.getStandTempIdByName(name);
-    }
-
-    /**
-     * 澶嶅埗鍘熷璁板綍妯℃澘
-     * @param newTemplate
-     * @return
-     */
-    @Override
-    public int copyStandardTemplate(StandardTemplate newTemplate) {
-        // 鏌ヨ鏃фā鏉�
-        StandardTemplate standardTemplate = baseMapper.selectById(newTemplate.getId());
-        newTemplate.setThing(standardTemplate.getThing());
-
-        if (StringUtils.isBlank(newTemplate.getNumber())) {
-            String giveCode = numberGenerator.generateNumberWithPrefix(5,
-                    "MB" + DateUtil.format(new Date(), "yyMM"),
-                    StandardTemplate::getNumber);
-            newTemplate.setNumber(giveCode);
-        }
-        newTemplate.setId(null);
-
-        return standardTemplateMapper.insert(newTemplate);
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
deleted file mode 100644
index b64ab41..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
+++ /dev/null
@@ -1,535 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.poi.excel.ExcelUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.basic.dto.FactoryDto;
-import com.ruoyi.basic.dto.LaboratoryDto;
-import com.ruoyi.basic.dto.SampleTypeDto;
-import com.ruoyi.basic.mapper.StandardProductListMapper;
-import com.ruoyi.basic.mapper.StandardTreeMapper;
-import com.ruoyi.basic.pojo.StandardProductList;
-import com.ruoyi.basic.pojo.StandardTemplate;
-import com.ruoyi.basic.pojo.StandardTree;
-import com.ruoyi.basic.pojo.StructureTestObject;
-import com.ruoyi.basic.service.*;
-import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * @author Administrator
- * @description 閽堝琛ㄣ�恠tandard_tree(鏍囧噯鏍�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
- * @createDate 2024-03-01 15:06:44
- */
-@Service
-@AllArgsConstructor
-public class StandardTreeServiceImpl extends ServiceImpl<StandardTreeMapper, StandardTree>
-        implements StandardTreeService {
-
-
-    private StandardTreeMapper standardTreeMapper;
-
-    private StandardMethodListService standardMethodListService;
-
-    private StandardProductListMapper standardProductListMapper;
-
-    private StandardProductListService standardProductListService;
-
-    private StandardTemplateService standardTemplateService;
-
-    private StructureTestObjectService structureTestObjectService;
-
-
-    @Override
-    public List<FactoryDto> selectStandardTreeList() {
-        List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeList();
-        for (FactoryDto factoryDto : factoryDtos) {
-            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
-                laboratoryDto.getChildren().sort((o1, o2) -> (o1.getSort() == null ? 0 : o1.getSort())
-                        - (o2.getSort() == null ? 0 : o2.getSort()));
-                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
-//                    if (sampleTypeDto.getChildren().size() == 0) {
-                        sampleTypeDto.getChildren().addAll(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
-//                    }
-                }
-            }
-        }
-        return factoryDtos;
-    }
-
-
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int addStandardTree(StandardTree standardTree) {
-        LambdaQueryWrapper<StandardTree> wrapper = Wrappers.<StandardTree>lambdaQuery()
-                .eq(StandardTree::getFactory, standardTree.getFactory())
-                .eq(StandardTree::getLaboratory, standardTree.getLaboratory())
-                .eq(StandardTree::getSampleType, standardTree.getSampleType())
-                .eq(StandardTree::getSample, standardTree.getSample())
-                .eq(StandardTree::getModel, standardTree.getModel());
-        if (StringUtils.isNotBlank(standardTree.getSample())) {
-            wrapper.eq(StandardTree::getSample, standardTree.getSample());
-        }
-
-        StandardTree tree = standardTreeMapper.selectOne(wrapper);
-        if (tree != null) {
-            throw new BaseException("璇ュ瀷鍙峰凡瀛樺湪");
-        }
-        return standardTreeMapper.insert(standardTree);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int delStandardTree(String tree) {
-        String[] trees = tree.split(" - ");
-        switch (trees.length) {
-            case 5:
-                if (trees[3].equals("null")) {
-                    standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).isNull(StandardTree::getSample).eq(StandardTree::getModel, trees[4]));
-                } else {
-                    standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]).eq(StandardTree::getModel, trees[4]));
-                }
-                break;
-            /*case 4:
-                standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]));
-                break;
-            case 3:
-                standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]));
-                break;
-            case 2:
-                standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]));
-                break;
-            case 1:
-                standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]));
-                break;*/
-        }
-        return 1;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int addStandardProduct(String ids, String tree) {
-        String[] trees = tree.split(" - ");
-        JSONArray jsonArray = JSON.parseArray(ids);
-        for (Object o : jsonArray) {
-            StandardProductList standardProductList = standardTreeMapper.selectStandardProductById(Integer.parseInt("" + o));
-            standardProductList.setFactory(trees[0]);
-            try {
-                standardProductList.setLaboratory(trees[1]);
-            } catch (Exception e) {
-            }
-            try {
-                standardProductList.setSampleType(trees[2]);
-            } catch (Exception e) {
-            }
-            try {
-                standardProductList.setSample(trees[3]);
-            } catch (Exception e) {
-            }
-            try {
-                standardProductList.setModel(trees[4]);
-            } catch (Exception e) {
-            }
-            standardProductListMapper.insert(standardProductList);
-        }
-        return 1;
-    }
-
-    @Override
-    public List<SampleTypeDto> getStandardTree2() {
-        return standardTreeMapper.getStandardTree2();
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int upStandardProducts(Map<String, Object> product) {
-        List<Integer> ids = JSON.parseArray(product.get("ids") + "");
-        StandardProductList productList = JSON.parseObject(JSON.toJSONString(product.get("standardProductList")), StandardProductList.class);
-        if (productList.getMethodS() != null) {
-            standardProductListMapper.update(productList, Wrappers.<StandardProductList>lambdaUpdate().in(StandardProductList::getId, ids).like(StandardProductList::getMethod, productList.getMethodS()));
-            return 1;
-        }
-        if (productList.getRadiusList() != null) {
-            standardProductListMapper.update(productList, Wrappers.<StandardProductList>lambdaUpdate().in(StandardProductList::getId, ids).like(StandardProductList::getRadiusList, productList.getRadius()));
-            return 1;
-        }
-        standardProductListMapper.update(productList, Wrappers.<StandardProductList>lambdaUpdate().in(StandardProductList::getId, ids));
-        return 1;
-    }
-
-    @Override
-    public List<StandardTree> getStandTreeBySampleType(String laboratory, String sampleType) {
-        return standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery()
-                .eq(StandardTree::getLaboratory, laboratory)
-                .eq(StandardTree::getSampleType, sampleType)
-                .select(StandardTree::getModel, StandardTree::getSample));
-    }
-
-    /**
-     * 娌冲彛妫�娴嬩腑蹇冨鍏�
-     * @param file
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void inExcelOfTree(MultipartFile file) {
-        InputStream inputStream;
-        try {
-            inputStream = file.getInputStream();
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-        List<StandardProductList> lists = new ArrayList<>();
-        AtomicReference<String> laboratory = new AtomicReference<>();
-        ExcelUtil.readBySax(inputStream, 0, (i, l, list) -> {
-            StandardProductList str = new StandardProductList();
-            if (i == 0 && l == 1) {
-                laboratory.set(standardTreeMapper.getLaboratory(list.get(1) + ""));
-                if (laboratory.get() == null) {
-                    throw new BaseException("妫�楠屽璞′笉瀛樺湪锛�" + list.get(1));
-                }
-            }
-            if (i == 0 && l >= 1) {
-                Integer standardMethodId = standardMethodListService.getStandardMethodId(list.get(0) + "");
-                if (standardMethodId == null) {
-                    throw new BaseException("鏍囧噯缂栧彿涓嶅瓨鍦細" + list.get(0));
-                }
-                str.setStandardMethodListId(standardMethodId);
-                str.setSampleType(list.get(1) + "");
-                if (list.get(2) != null) {
-                    String sample = baseMapper.selSample(list.get(2) + "");
-                    if (sample == null) {
-                        throw new BaseException("鏍峰搧涓嶅瓨鍦細" + list.get(2));
-                    }
-                    str.setSample(list.get(2) + "");
-                } else {
-                    str.setSample(null);
-                }
-                if (list.get(3) != null) {
-                    str.setModel(list.get(3) + "");
-                    Long aLong = standardTreeMapper.selectCount(Wrappers.<StandardTree>lambdaQuery()
-                            .eq(StandardTree::getModel, str.getModel())
-                            .eq(StandardTree::getSampleType, list.get(1) + ""));
-                    if (aLong == 0) {
-                        StandardTree standardTree = new StandardTree();
-                        standardTree.setFactory("涓ぉ绉戞妧妫�娴嬩腑蹇�");
-                        standardTree.setLaboratory(laboratory.get());
-                        standardTree.setSampleType(str.getSampleType());
-                        standardTree.setSample(str.getSample());
-                        standardTree.setModel(str.getModel());
-                        standardTreeMapper.insert(standardTree);
-                    }
-                } else {
-                    str.setModel(null);
-                }
-                str.setInspectionItem(list.get(4) + "");
-                if (list.get(6) == null) {
-                    str.setInspectionItemSubclass("");
-                } else {
-                    str.setInspectionItemSubclass(list.get(6).toString());
-                }
-                StandardProductList db_str;
-                try {
-                    db_str = standardProductListMapper.getOne(str.getStandardMethodListId(), str.getInspectionItem(), str.getSample(), str.getInspectionItemSubclass(), str.getModel(), str.getInspectionItemClass());
-                } catch (Exception e) {
-                    throw new BaseException("閲嶅鏌ヨ锛�" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
-                }
-                if (ObjectUtils.isNotEmpty(db_str)) {
-                    str.setId(db_str.getId());
-                    str.setStructureItemParameterId(db_str.getStructureItemParameterId());
-                }
-                if (list.get(8) != null) {
-                    str.setMethodS(list.get(8) + "");
-                }
-
-                if (list.get(11) == null) {
-                    str.setTell(null);
-                } else {
-                    str.setTell(list.get(11).toString());
-                }
-
-                if (list.get(12) == null) {
-                    str.setAsk(null);
-                } else {
-                    str.setAsk(list.get(12).toString());
-                }
-
-                if (list.get(13) == null) {
-                    str.setPrice(null);
-                } else {
-                    str.setPrice((list.get(13).toString()));
-                }
-
-                if (list.get(14) == null) {
-                    str.setManHour(null);
-                } else {
-                    str.setManHour(list.get(14).toString());
-                }
-
-                StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list.get(21)));
-                if (standTempIdByName != null) {
-                    str.setTemplateId(standTempIdByName.getId());
-                } else {
-                    throw new BaseException("妯℃澘涓嶅瓨鍦細" + list.get(21));
-                }
-                str.setFactory("涓ぉ绉戞妧妫�娴嬩腑蹇�");
-                str.setLaboratory(laboratory.get());
-                str.setState(1);
-                str.setTree(str.getFactory() + " - " + str.getLaboratory() + " - " + str.getSampleType() + " - " + str.getSample() + " - " + (str.getModel() == null ? "" : str.getModel()));
-                try {
-                    str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
-                } catch (Exception e) {
-                    str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\",\"" + str.getSample() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
-                }
-                if (str.getStructureItemParameterId() == null) {
-                    throw new BaseException("妫�楠岄」鐩笉瀛樺湪锛�" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
-                }
-                lists.add(str);
-            }
-        });
-        lists.forEach(a -> {
-            if (a.getId() != null) {
-                standardProductListMapper.updateById(a);
-            } else {
-                standardProductListMapper.insert(a);
-            }
-        });
-    }
-
-    @Override
-    public void importWorkstationExcel(MultipartFile file) {
-        InputStream inputStream;
-        try {
-            inputStream = file.getInputStream();
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-        List<StandardProductList> lists = new ArrayList<>();
-        AtomicReference<String> laboratory = new AtomicReference<>();
-        ExcelUtil.readBySax(inputStream, 0, (i, l, list) -> {
-            StandardProductList str = new StandardProductList();
-            if (i == 0 && l == 1) {
-                laboratory.set(standardTreeMapper.getLaboratory(list.get(1) + ""));
-                if (laboratory.get() == null) {
-                    throw new BaseException("妫�楠屽璞′笉瀛樺湪锛�" + list.get(1));
-                }
-            }
-            if (i == 0 && l >= 1) {
-                Integer standardMethodId = standardMethodListService.getStandardMethodId(list.get(0) + "");
-                if (standardMethodId == null) {
-                    throw new BaseException("鏍囧噯缂栧彿涓嶅瓨鍦細" + list.get(0));
-                }
-                str.setStandardMethodListId(standardMethodId);
-                str.setSampleType(list.get(1) + "");
-                if (list.get(2) != null) {
-                    String sample = baseMapper.selSample(list.get(2) + "");
-                    if (sample == null) {
-                        throw new BaseException("鏍峰搧涓嶅瓨鍦細" + list.get(2));
-                    }
-                    str.setSample(list.get(2) + "");
-                } else {
-                    str.setSample(null);
-                }
-                if (list.get(3) != null) {
-                    str.setModel(list.get(3) + "");
-                    Long aLong = standardTreeMapper.selectCount(Wrappers.<StandardTree>lambdaQuery()
-                            .eq(StandardTree::getModel, str.getModel())
-                            .eq(StandardTree::getSampleType, list.get(1) + ""));
-                    if (aLong == 0) {
-                        StandardTree standardTree = new StandardTree();
-                        standardTree.setFactory("涓ぉ绉戞妧妫�娴嬩腑蹇�");
-                        standardTree.setLaboratory(laboratory.get());
-                        standardTree.setSampleType(str.getSampleType());
-                        standardTree.setSample(str.getSample());
-                        standardTree.setModel(str.getModel());
-                        standardTreeMapper.insert(standardTree);
-                    }
-                } else {
-                    str.setModel(null);
-                }
-                str.setInspectionItemClass(list.get(4).toString());
-                str.setInspectionItemClassEn(list.get(5).toString());
-                // 寮�濮嬪姞2
-                str.setInspectionItem(list.get(6) + "");
-                if (list.get(8) == null) {
-                    str.setInspectionItemSubclass("");
-                } else {
-                    str.setInspectionItemSubclass(list.get(8).toString());
-                }
-                StandardProductList db_str;
-                try {
-                    db_str = standardProductListMapper.getOne(str.getStandardMethodListId(), str.getInspectionItem(), str.getSample(), str.getInspectionItemSubclass(), str.getModel(), str.getInspectionItemClass());
-                } catch (Exception e) {
-                    throw new BaseException("閲嶅鏌ヨ锛�" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
-                }
-                if (ObjectUtils.isNotEmpty(db_str)) {
-                    str.setId(db_str.getId());
-                    str.setStructureItemParameterId(db_str.getStructureItemParameterId());
-                }
-                if (list.get(10) != null) {
-                    str.setMethodS(list.get(10) + "");
-                }
-                if (list.get(13) == null) {
-                    str.setTell(null);
-                } else {
-                    str.setTell(list.get(13).toString());
-                }
-
-                if (list.get(14) == null) {
-                    str.setAsk(null);
-                } else {
-                    str.setAsk(list.get(14).toString());
-                }
-
-                if (list.get(15) == null) {
-                    str.setPrice(null);
-                } else {
-                    str.setPrice((list.get(15).toString()));
-                }
-
-                if (list.get(16) == null) {
-                    str.setManHour(null);
-                } else {
-                    str.setManHour(list.get(16).toString());
-                }
-
-                StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list.get(23)));
-                if (standTempIdByName != null) {
-                    str.setTemplateId(standTempIdByName.getId());
-                } else {
-                    throw new BaseException("妯℃澘涓嶅瓨鍦細" + list.get(23));
-                }
-                str.setFactory("涓ぉ绉戞妧妫�娴嬩腑蹇�");
-                str.setLaboratory(laboratory.get());
-                str.setState(1);
-                str.setTree(str.getFactory() + " - " + str.getLaboratory() + " - " + str.getSampleType() + " - " + str.getSample() + " - " + (str.getModel() == null ? "" : str.getModel()));
-                try {
-                    str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
-                } catch (Exception e) {
-                    str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\",\"" + str.getSample() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
-                }
-                if (str.getStructureItemParameterId() == null) {
-                    throw new BaseException("妫�楠岄」鐩笉瀛樺湪锛�" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
-                }
-                lists.add(str);
-            }
-        });
-        lists.forEach(a -> {
-            if (a.getId() != null) {
-                standardProductListMapper.updateById(a);
-            } else {
-                standardProductListMapper.insert(a);
-            }
-        });
-    }
-
-    @Override
-    public boolean updateTreeSort(List<FactoryDto> list) {
-        List<StructureTestObject> testObjects = new ArrayList<>();
-        for (FactoryDto factoryDto : list) {
-            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
-                List<SampleTypeDto> children = laboratoryDto.getChildren();
-                int sort = 0;
-                // 寰幆绗笁灞�
-                for (SampleTypeDto child : children) {
-                    StructureTestObject structureTestObject = new StructureTestObject();
-                    structureTestObject.setSort(sort);
-                    structureTestObject.setId(child.getSampleTypeId());
-                    testObjects.add(structureTestObject);
-                    sort++;
-                }
-            }
-        }
-        structureTestObjectService.updateBatchById(testObjects);
-
-        return true;
-    }
-
-    /**
-     * 淇敼鏍囧噯鏁�
-     * @param standardTree
-     * @return
-     */
-    @Override
-    public int updateStandardTree(StandardTree standardTree) {
-        // 淇敼鍚嶇О鍖归厤鐨勬爣鍑嗘爲涓嬬殑妫�楠岄」鐩�
-        // 鏌ヨ鎵�鏈夊璞�+鍚嶇О鐨勬爲
-
-        List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
-                .eq(StandardProductList::getSample, standardTree.getSample())
-                .eq(StandardProductList::getSampleType, standardTree.getSampleType())
-                .eq(StandardProductList::getModel, standardTree.getOldModel()));
-        if (CollectionUtils.isNotEmpty(standardProductLists)) {
-            for (StandardProductList standardProductList : standardProductLists) {
-                // 淇敼鏍峰搧鍚嶇О
-                standardProductList.setModel(standardTree.getModel());
-                // 淇敼鏍戝悕绉�
-                // 闇�瑕佹埅鍙栫鍥涚骇, 閬垮厤涓夊洓绾у悕绉颁竴鏍蜂慨鏀归敊璇�
-                String[] trees = standardProductList.getTree().split(" - ");
-                trees[4] = standardTree.getModel();
-                List<String> list = CollUtil.newArrayList(trees);
-                String newName = CollUtil.join(list, " - ");
-                standardProductList.setTree(newName);
-            }
-            standardProductListService.updateBatchById(standardProductLists);
-        }
-
-        // 淇敼鏍囧噯鏁版楠岄」鐩�
-        LambdaUpdateWrapper<StandardTree> wrapper = Wrappers.<StandardTree>lambdaUpdate()
-                .eq(StandardTree::getFactory, standardTree.getFactory())
-                .eq(StandardTree::getLaboratory, standardTree.getLaboratory())
-                .eq(StandardTree::getSampleType, standardTree.getSampleType())
-                .eq(StandardTree::getModel, standardTree.getOldModel())
-                .set(StandardTree::getModel, standardTree.getModel());
-        if (StringUtils.isNotBlank(standardTree.getSample())) {
-            wrapper.eq(StandardTree::getSample, standardTree.getSample());
-        }
-        return standardTreeMapper.update(null, wrapper);
-    }
-
-    @Override
-    public void resetTreeOfPrice(String tree, Integer standardId) {
-        standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId).set(StandardProductList::getPrice, null));
-    }
-
-    @Override
-    public void resetTreeOfHour(String tree, Integer standardId) {
-        standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId).set(StandardProductList::getManHour, null));
-    }
-
-    @Override
-    public void resetTreeOfAsk(String tree, Integer standardId) {
-        standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId)
-                .set(StandardProductList::getAsk, null)
-                .set(StandardProductList::getTell, null)
-                .set(StandardProductList::getSection, null)
-                .set(StandardProductList::getCores, null)
-                .set(StandardProductList::getConductorMaterial, null)
-                .set(StandardProductList::getConductorType, null)
-                .set(StandardProductList::getPrice, null)
-                .set(StandardProductList::getManHour, null));
-    }
-
-}
-
-
-
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureItemParameterServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureItemParameterServiceImpl.java
deleted file mode 100644
index 4009106..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureItemParameterServiceImpl.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.mapper.StructureItemParameterMapper;
-import com.ruoyi.basic.pojo.StructureItemParameter;
-import com.ruoyi.basic.service.StructureItemParameterService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-
-@Service
-@AllArgsConstructor
-public class StructureItemParameterServiceImpl extends ServiceImpl<StructureItemParameterMapper, StructureItemParameter> implements StructureItemParameterService {
-
-    @Resource
-    private StructureItemParameterMapper structureItemParameterMapper;
-
-    @Override
-    public void removeNoSample(String sample) {
-        structureItemParameterMapper.removeNoSample("\""+sample+"\"");
-    }
-}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureTestObjectPartServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureTestObjectPartServiceImpl.java
deleted file mode 100644
index 819ef16..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureTestObjectPartServiceImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.mapper.ProductPartMapper;
-import com.ruoyi.basic.mapper.StructureTestObjectPartMapper;
-import com.ruoyi.basic.pojo.ProductPart;
-import com.ruoyi.basic.pojo.StructureTestObjectPart;
-import com.ruoyi.basic.service.StructureTestObjectPartService;
-
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 妫�楠屽璞¢浂浠惰〃
- *
- * @author zhuo
- * @since 2024-08-07
- */
-@Transactional
-@Service
-@AllArgsConstructor
-public class StructureTestObjectPartServiceImpl extends ServiceImpl<StructureTestObjectPartMapper, StructureTestObjectPart> implements StructureTestObjectPartService {
-
-    private ProductPartMapper productPartMapper;
-
-    @Override
-    public IPage<StructureTestObjectPart> selectByTestObjectId(Page page, StructureTestObjectPart structureTestObjectPart) {
-        return baseMapper.selectListByTestObjectId(page, QueryWrappers.queryWrappers(structureTestObjectPart),structureTestObjectPart.getTestObjectId());
-    }
-
-    @Override
-    public void addTestObjectPart(StructureTestObjectPart structureTestObjectPart) {
-        this.isPartNoExist(structureTestObjectPart.getPartNo(), null);
-        if (structureTestObjectPart.getTestObjectId() == null) {
-            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
-        }
-        baseMapper.insert(structureTestObjectPart);
-    }
-
-    @Override
-    public void updateTestObjectPart(StructureTestObjectPart structureTestObjectPart) {
-        this.isPartNoExist(structureTestObjectPart.getPartNo(),  structureTestObjectPart.getId());
-        if (structureTestObjectPart.getTestObjectId() == null) {
-            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
-        }
-        baseMapper.updateById(structureTestObjectPart);
-    }
-
-    // 鍒ゆ柇闆朵欢鍙锋槸鍚﹀瓨鍦�
-    public void isPartNoExist(String partNo, Integer id) {
-        // 闆朵欢鍙峰敮涓� 浣嗕笉蹇呭~
-        if (StringUtils.isNotBlank(partNo)) {
-            Long count = productPartMapper.selectCount(new LambdaQueryWrapper<ProductPart>()
-                    .eq(ProductPart::getPartNo, partNo));
-            Long selectCount = baseMapper.selectCount(Wrappers.<StructureTestObjectPart>lambdaQuery()
-                    .eq(StructureTestObjectPart::getPartNo, partNo)
-                    .ne(id != null, StructureTestObjectPart::getId, id));
-            if (count > 0 || selectCount > 0) {
-                throw new BaseException("璇ラ浂浠跺彿宸茬粦瀹氳繃妫�楠屽璞�");
-            }
-        } else {
-            throw new BaseException("璇疯緭鍏ラ浂浠跺彿");
-        }
-    }
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureTestObjectServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureTestObjectServiceImpl.java
deleted file mode 100644
index 60f0f40..0000000
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StructureTestObjectServiceImpl.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.ruoyi.basic.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.mapper.StructureTestObjectMapper;
-import com.ruoyi.basic.pojo.StructureTestObject;
-import com.ruoyi.basic.service.StructureTestObjectService;
-import org.springframework.stereotype.Service;
-
-/**
- * 妫�娴嬪璞�
- *
- * @author zhuo
- * @since 2024-09-13
- */
-@Service
-public class StructureTestObjectServiceImpl extends ServiceImpl<StructureTestObjectMapper, StructureTestObject> implements StructureTestObjectService {
-
-}
-
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/CapacityScopeController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/CapacityScopeController.java
new file mode 100644
index 0000000..9c2a785
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/CapacityScopeController.java
@@ -0,0 +1,393 @@
+package com.ruoyi.inspect.controller;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.system.service.ISysDictTypeService;
+import com.ruoyi.inspect.dto.PageTestObjectDto;
+import com.ruoyi.inspect.dto.ProductDTO1;
+import com.ruoyi.inspect.excel.StructureTestObjectData;
+import com.ruoyi.inspect.excel.StructureTestObjectListener;
+import com.ruoyi.inspect.pojo.Product;
+import com.ruoyi.inspect.pojo.StandardTemplate;
+import com.ruoyi.inspect.pojo.StructureItemParameter;
+import com.ruoyi.inspect.pojo.StructureTestObject;
+import com.ruoyi.inspect.service.CapacityScopeService;
+import com.ruoyi.inspect.service.ProductService;
+import com.ruoyi.inspect.service.StandardTemplateService;
+import com.ruoyi.inspect.service.StructureItemParameterService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+/**
+ * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ帶鍒跺眰
+ *
+ * @author makejava
+ * @since 2024-02-26 16:21:17
+ */
+@Api(tags = "鑳藉姏鑼冨洿")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/capacityScope")
+public class CapacityScopeController {
+
+    private CapacityScopeService capacityScopeService;
+
+    private ProductService productService;
+
+    private StructureItemParameterService structureItemParameterService;
+
+    private ISysDictTypeService dictTypeService;
+
+    private StandardTemplateService standardTemplateService;
+
+    @ApiOperation(value = "鑾峰彇椤圭洰妫�楠屽弬鏁板垪琛�")
+    @PostMapping("/selectItemParameterList")
+    public Result selectItemParameterList(Page page,StructureItemParameter itemParameter) throws Exception {
+        return Result.success(capacityScopeService.selectItemParameterList(page, itemParameter));
+    }
+
+    @ApiOperation(value = "娣诲姞椤圭洰妫�楠屽弬鏁�")
+    @PostMapping("/addItemParameter")
+    public Result addItemParameter(@RequestBody StructureItemParameter itemParameter) {
+        return Result.success(capacityScopeService.addItemParameter(itemParameter));
+    }
+
+    @ApiOperation(value = "鍒犻櫎椤圭洰妫�楠屽弬鏁�")
+    @PostMapping("/delItemParameter")
+    public Result<?> delItemParameter(Integer id) {
+        return Result.success(capacityScopeService.delItemParameter(id));
+    }
+
+    @ApiOperation(value = "淇敼椤圭洰妫�楠屽弬鏁�")
+    @PostMapping("/upItemParameter")
+    public Result<?> upItemParameter(@RequestBody StructureItemParameter itemParameter) {
+        return Result.success(capacityScopeService.upItemParameter(itemParameter));
+    }
+
+    @ApiOperation(value = "鑾峰彇妫�楠屽璞�")
+    @PostMapping("/selectTestObjectList")
+    public Result selectTestObjectList(Page page,PageTestObjectDto pageTestObjectDto) throws Exception {
+        return Result.success(capacityScopeService.selectTestObjectList(page, pageTestObjectDto));
+    }
+
+    @ApiOperation(value = "娣诲姞妫�楠屽璞�")
+    @PostMapping("/addTestObject")
+    public Result addTestObject(@RequestBody StructureTestObject testObject) {
+        return Result.success(capacityScopeService.addTestObject(testObject));
+    }
+
+    @ApiOperation(value = "鍒犻櫎妫�楠屽璞�")
+    @PostMapping("/delTestObject")
+    public Result<?> delTestObject(Integer id) {
+        return Result.success(capacityScopeService.delTestObject(id));
+    }
+
+    @ApiOperation(value = "淇敼妫�楠屽璞�")
+    @PostMapping("/upTestObject")
+    public Result upTestObject(@RequestBody StructureTestObject testObject) {
+        return Result.success(capacityScopeService.upTestObject(testObject));
+    }
+
+    @ApiOperation(value = "鑾峰彇妫�楠屽璞℃灇涓�")
+    @GetMapping("/selectTestObjectByName")
+    public Result selectTestObjectByName() {
+        return Result.success(capacityScopeService.selectTestObjectByName());
+    }
+
+    @ApiOperation(value = "璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)")
+    @PostMapping("/getInsProduction")
+    public Result getInsProduction() {
+        return Result.success(capacityScopeService.getInsProduction());
+    }
+
+    @ApiOperation(value = "缁存姢妫�楠屽璞$殑浜у搧")
+    @PostMapping("/selectProductListByObjectId")
+    public Result selectProductListByObjectId(Page page,ProductDTO1 productDTO) throws Exception {
+        return Result.success(productService.selectProductListByObjectId(page, productDTO));
+    }
+
+    @ApiOperation(value = "娣诲姞浜у搧")
+    @PostMapping("/addProduct")
+    public Result addProduct(@RequestBody Product product) {
+        return Result.success(productService.addProduct(product));
+    }
+
+    @ApiOperation(value = "淇敼浜у搧")
+    @PostMapping("/upProduct")
+    public Result upProduct(@RequestBody Product product) {
+        return Result.success(productService.upProduct(product));
+    }
+
+    @ApiOperation(value = "鍒犻櫎浜у搧")
+    @PostMapping("/delProduct")
+    public Result delProduct(Integer id) {
+        return Result.success(productService.delProduct(id));
+    }
+
+    @ApiOperation(value = "鑾峰彇妫�楠屽璞℃爲")
+    @GetMapping("/getItemTree")
+    public Result getItemTree() {
+        return Result.success(capacityScopeService.getItemTree());
+    }
+
+
+    @ApiOperation(value = "瑁呭瀵煎叆妫�楠岄」鐩�")
+    @PostMapping("/importEquipData")
+    @Transactional
+    public Result importEquipData(@RequestParam("file") MultipartFile file) throws Exception {
+        InputStream inputStream = file.getInputStream();
+        List<StructureItemParameter> lists = new ArrayList<>();
+        AtomicReference<String> sample = new AtomicReference<>();
+        ExcelUtil.readBySax(inputStream, -1, (i, l, list1) -> {
+            if (l == 1) {
+                sample.set(list1.get(1) + "");
+            }
+            if (l >= 1) {
+                StructureItemParameter str = new StructureItemParameter();
+                // 娴嬭瘯瀵硅薄
+                if (list1.get(1) == null) {
+                    str.setSample(null);
+                } else {
+                    String brand = (String) list1.get(1);
+                    StringBuilder builder = new StringBuilder();
+                    builder.append("[");
+                    // 浜у搧
+                    if (ObjectUtil.isNotEmpty(list1.get(2))) {
+                        String production = (String) list1.get(2);
+                        if (!production.contains("锛�")) {
+                            builder.append(String.format("[\"%s\",\"%s\"]", brand, production));
+                        } else {
+                            Arrays.stream(production.split("锛�")).forEach(item -> {
+                                builder.append(String.format("[\"%s\",\"%s\"],", brand, item));
+                            });
+                            builder.deleteCharAt(builder.length() - 1);
+                        }
+                    } else {
+                        builder.append("[");
+                        builder.append(String.format("\"%s\"", brand));
+                        builder.append("]");
+                    }
+                    builder.append("]");
+                    str.setSample(builder.toString());
+                }
+                // 妫�楠岄」
+                str.setInspectionItem(list1.get(4).toString().trim());
+                // 妫�楠岄」鑻辨枃
+                if (list1.get(5) != null) {
+                    str.setInspectionItemEn(list1.get(5).toString());
+                }
+                // 妫�楠屽瓙椤�
+                if (list1.get(6) == null) {
+                    str.setInspectionItemSubclass(null);
+                } else {
+                    str.setInspectionItemSubclass(list1.get(6).toString().trim());
+                }
+                // 妫�楠屽瓙椤硅嫳鏂�
+                if (list1.get(7) == null) {
+                    str.setInspectionItemSubclassEn(null);
+                } else {
+                    str.setInspectionItemSubclassEn(String.valueOf(list1.get(7).toString()));
+                }
+                // 妫�楠岄」鍒嗙被
+                if (list1.get(22) != null && list1.get(22) != "") {
+                    str.setInspectionItemClass(list1.get(22).toString().trim());
+                } else {
+                    str.setInspectionItemClass(null);
+                }
+                // 妫�楠岄」鍒嗙被鑻辨枃
+                if (list1.get(23) != null && list1.get(23) != "") {
+                    str.setInspectionItemClassEn(list1.get(23) + "");
+                } else {
+                    str.setInspectionItemClassEn(null);
+                }
+
+                LambdaQueryWrapper<StructureItemParameter> wrapper = Wrappers.lambdaQuery(StructureItemParameter.class)
+                        .eq(StructureItemParameter::getInspectionItem, str.getInspectionItem())
+                        .eq(StructureItemParameter::getSample, str.getSample())
+
+                        .last("limit 1");
+                // 鍒ゆ柇鏄惁鏈夋楠岄」绫诲瀷
+                if (ObjectUtils.isNotEmpty(str.getInspectionItemClass())) {
+                    wrapper.eq(StructureItemParameter::getInspectionItemClass, str.getInspectionItemClass());
+                }
+
+                // 鍒ゆ柇鏄惁鏈夋楠屽瓙椤�
+                if (ObjectUtils.isNotEmpty(str.getInspectionItemSubclass())) {
+                    wrapper.eq(StructureItemParameter::getInspectionItemSubclass, str.getInspectionItemSubclass());
+                }
+                StructureItemParameter db_str = structureItemParameterService.getOne(wrapper);
+                if (ObjectUtils.isNotEmpty(db_str)) {
+                    str.setId(db_str.getId());
+                }
+                // 鏂规硶鍚嶇О
+                if (list1.get(8) == null) {
+                    str.setMethod(null);
+                } else {
+                    StringBuffer buffer = new StringBuffer();
+                    String input = list1.get(8).toString();
+                    buffer.append("[");
+                    String[] values = input.split("锛�");
+                    for (String value : values) {
+                        buffer.append("\"").append(value.trim()).append("\",");
+                    }
+                    buffer.deleteCharAt(buffer.length() - 1);
+                    buffer.append("]");
+                    str.setMethod(buffer.toString());
+                }
+                // 璇曢獙瀹�
+                if (list1.get(9) == null) {
+                    str.setSonLaboratory(null);
+                } else {
+                    str.setSonLaboratory(list1.get(9).toString());
+                }
+                // 璁¢噺鍗曚綅
+                if (list1.get(10) == null) {
+                    str.setUnit(null);
+                } else {
+                    str.setUnit(list1.get(10).toString());
+                }
+                // 瑕佹眰鍊�
+                if (list1.get(11) == null) {
+                    str.setAskTell(null);
+                } else {
+                    str.setAskTell(list1.get(11).toString());
+                }
+                // 瑕佹眰鎻忚堪
+                if (list1.get(12) == null) {
+                    str.setAsk(null);
+                } else {
+                    str.setAsk(list1.get(12).toString());
+                }
+                // 鍗曚环
+                if (list1.get(13) == null) {
+                    str.setPrice(null);
+                } else {
+                    str.setPrice(list1.get(13) + "");
+                }
+                // 宸ユ椂绯绘暟
+                if (list1.get(14) == null) {
+                    str.setManHour(null);
+                } else {
+                    str.setManHour(Double.valueOf(list1.get(14).toString()));
+                }
+                // 宸ユ椂鍒嗙粍
+                if (list1.get(15) == null) {
+                    str.setManHourGroup(null);
+                } else {
+                    str.setManHourGroup(list1.get(15).toString());
+                }
+                // 棰勮瀹屾垚鏃堕棿
+                if (list1.get(16) == null) {
+                    str.setManDay(null);
+                } else {
+                    str.setManDay(Integer.valueOf(list1.get(16).toString()));
+                }
+                // 鏁版嵁绫诲瀷
+                String jy;
+                if (list1.get(17).toString().equals("闈為噰闆嗙被鍨�")) {
+                    jy = "0";
+                } else {
+                    jy = "1";
+                }
+                str.setInspectionItemType(jy);
+                // 妫�楠岄」绫诲瀷
+                String validateValueType = list1.get(18).toString();
+                if (ObjectUtils.isNotEmpty(validateValueType)) {
+                    List<SysDictData> enums = dictTypeService.selectDictDataByName("妫�楠屽�肩被鍨�")
+                            .stream().filter(sysDictData -> sysDictData.getDictLabel().equals(validateValueType)).collect(Collectors.toList());
+                    str.setInspectionValueType(enums.get(0).getDictValue());
+                }
+                int bsm;
+                //鐗规畩鏍囪瘑
+                if (list1.get(19).toString().equals("鍚�")) {
+                    bsm = 0;
+                } else {
+                    bsm = 1;
+                }
+                str.setBsm(bsm + "");
+                // 鏁板瓧瀛楀吀
+                if (list1.get(20) != null) {
+                    str.setDic(list1.get(20) + "");
+                } else {
+                    str.setDic(null);
+                }
+                // 鍘熷璁板綍妯℃澘
+                StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list1.get(21)));
+                if (standTempIdByName != null) {
+                    str.setTemplateId(standTempIdByName.getId());
+                } else {
+                    str.setTemplateId(null);
+                }
+                try {
+                    if (list1.get(24) != null) {
+                        str.setLaboratory(list1.get(24) + "");
+                    }
+                } catch (Exception e) {
+                }
+
+                // 鏉′欢
+                if (list1.get(25) == null) {
+                    str.setRadiusList(null);
+                } else {
+                    StringBuffer buffer = new StringBuffer();
+                    String input = list1.get(25).toString();
+                    buffer.append("[");
+                    String[] values = input.split("锛�");
+                    for (String value : values) {
+                        buffer.append("\"").append(value.trim()).append("\",");
+                    }
+                    buffer.deleteCharAt(buffer.length() - 1);
+                    buffer.append("]");
+                    str.setRadiusList(buffer.toString());
+                }
+                // 鏀惰垂鏍囧噯
+                if (list1.get(26) == null) {
+                    str.setRates(null);
+                } else {
+                    str.setRates(list1.get(26) + "");
+                }
+
+                lists.add(str);
+            }
+        });
+//        structureItemParameterService.removeNoSample(sample.get());
+        // 濡傛灉鏁版嵁搴撻噷闈㈢殑鏁版嵁瀛樺湪閭d箞灏辨墽琛屾洿鏂版嫹璐濇搷浣�
+        try {
+            structureItemParameterService.saveOrUpdateBatch(lists);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("鏈嶅姟绔姤閿�");
+        }
+        return Result.success();
+    }
+
+    @ApiOperation(value = "瀵煎叆妫�楠屽璞�")
+    @PostMapping("/importExcel")
+    public Result importExcel(@RequestParam("file") MultipartFile file) {
+        try {
+            EasyExcel.read(file.getInputStream(), StructureTestObjectData.class, new StructureTestObjectListener(productService)).sheet().doRead();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return Result.success();
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/CertificationController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/CertificationController.java
new file mode 100644
index 0000000..51b8ff1
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/CertificationController.java
@@ -0,0 +1,41 @@
+package com.ruoyi.inspect.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.pojo.Certification;
+import com.ruoyi.inspect.service.CertificationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "璧勮川璇存槑")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/certification")
+
+public class CertificationController {
+
+    private CertificationService certificationService;
+
+
+    @ApiOperation(value = "鏌ヨ璧勮川鏄庣粏鍒楄〃")
+    @PostMapping("/getCertificationDetail")
+    public Result getCertificationDetail(Page page,Certification certification) {
+        return Result.success(certificationService.getCertificationDetail(page, certification));
+    }
+
+    @ApiOperation(value = "娣诲姞璧勮川鏄庣粏鍒楄〃")
+    @PostMapping("/addCertificationDetail")
+    public Result addCertificationDetail(@RequestBody Certification certification) {
+        return Result.success(certificationService.addCertificationDetail(certification));
+    }
+    @ApiOperation(value = "鍒犻櫎璧勮川鏄庣粏鍒楄〃")
+    @PostMapping("/delCertificationDetail")
+    public Result<?> delCertificationDetail( String ids) {
+        return Result.success(certificationService.delCertificationDetail(ids));
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/LaboratoryController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/LaboratoryController.java
new file mode 100644
index 0000000..5133178
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/LaboratoryController.java
@@ -0,0 +1,62 @@
+package com.ruoyi.inspect.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.pojo.Laboratory;
+import com.ruoyi.inspect.service.LaboratoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 瀹為獙瀹ょ鐞�(LaboratoryController)琛ㄦ帶鍒跺眰
+ */
+@Api(tags = "鍦烘墍鎴栬鏂�")
+
+@RestController
+@RequestMapping("/laboratoryScope")
+public class LaboratoryController {
+
+    @Resource
+    private LaboratoryService laboratoryService;
+
+    @ApiOperation(value = "鏌ヨ瀹為獙瀹ょ鐞嗗垪琛�")
+    @PostMapping("/selectItemParameter")
+    public Result selectItemParameter(Page page ,Laboratory itemParameter) {
+        return Result.success(laboratoryService.selectItemParameter(page, itemParameter));
+    }
+
+    @ApiOperation(value = "娣诲姞瀹為獙瀹ゅ弬鏁�")
+    @PostMapping("/addParameter")
+    public Result addParameter(@RequestBody Laboratory itemParameter) {
+        return Result.success(laboratoryService.addParameter(itemParameter));
+    }
+
+    @ApiOperation(value = "鍒犻櫎瀹為獙瀹ゅ弬鏁�")
+    @PostMapping("/delParameter")
+    public Result<?> delParameter(Integer id) {
+        return Result.success(laboratoryService.delParameter(id));
+    }
+
+    @ApiOperation(value = "淇敼瀹為獙瀹ゅ弬鏁�")
+    @PostMapping("/upParameter")
+    public Result<?> upParameter(@RequestBody Laboratory itemParameter) {
+        return Result.success(laboratoryService.upParameter(itemParameter));
+    }
+
+    @ApiOperation(value = "鑾峰彇瀹為獙瀹ゅ悕绉�")
+    @GetMapping("/obtainItemParameterList")
+    public Result obtainItemParameterList() {
+        return Result.success(laboratoryService.obtainItemParameterList());
+    }
+}
+
+
+
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/ProductPartController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/ProductPartController.java
new file mode 100644
index 0000000..49ff94f
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/ProductPartController.java
@@ -0,0 +1,50 @@
+package com.ruoyi.inspect.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.pojo.ProductPart;
+import com.ruoyi.inspect.service.ProductPartService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/productPart")
+@Api(tags = "浜у搧闆朵欢缁戝畾")
+public class ProductPartController {
+
+    private ProductPartService productPartService;
+
+    @ApiOperation(value = "鏍规嵁浜у搧id鏌ヨ闆朵欢")
+    @PostMapping("/selectByProductId")
+    public Result selectByProductId(Page page,ProductPart productPart){
+        return Result.success(productPartService.selectByProductId(page,productPart));
+    }
+
+    @ApiOperation(value = "鏂板浜у搧闆朵欢")
+    @PostMapping("/addProductPart")
+    public Result addProductPart(@RequestBody ProductPart productPart) {
+        productPartService.addProductPart(productPart);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏇存柊浜у搧闆朵欢")
+    @PostMapping("/updateProductPart")
+    public Result updateProductPart(@RequestBody ProductPart productPart) {
+        productPartService.updateProductPartById(productPart);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎浜у搧闆朵欢")
+    @PostMapping("/deleteProductPart")
+    public Result deleteProductPart(Integer id) {
+        productPartService.removeById(id);
+        return Result.success();
+    }
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/ProductSupplierDensityController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/ProductSupplierDensityController.java
new file mode 100644
index 0000000..be25f08
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/ProductSupplierDensityController.java
@@ -0,0 +1,59 @@
+package com.ruoyi.inspect.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.pojo.ProductSupplierDensity;
+import com.ruoyi.inspect.service.ProductSupplierDensityService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * 浜у搧鍘傚瀵嗗害缁戝畾琛�
+ *
+ * @author zhuo
+ * @since 2024-09-19
+ */
+@RestController
+@RequestMapping("/productSupplierDensity")
+@AllArgsConstructor
+@Api(tags = "浜у搧鍘傚瀵嗗害缁戝畾")
+public class ProductSupplierDensityController {
+
+    private ProductSupplierDensityService productSupplierDensityService;
+
+    @ApiOperation(value = "鏍规嵁浜у搧id鏌ヨ鍘傚瀵嗗害缁戝畾")
+    @PostMapping("/selectSupplierDensityByProductId")
+    public Result selectSupplierDensityByProductId(Page page,ProductSupplierDensity supplierDensity) {
+        return Result.success(productSupplierDensityService.selectByProductId(page, supplierDensity));
+    }
+
+    @ApiOperation(value = "鏂板鍘傚瀵嗗害缁戝畾")
+    @PostMapping("/addProductSupplierDensity")
+    public Result addProductSupplierDensity(@RequestBody ProductSupplierDensity supplierDensity) {
+        productSupplierDensityService.addProductSupplierDensity(supplierDensity);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏇存柊鍘傚瀵嗗害缁戝畾")
+    @PostMapping("/updateProductSupplierDensity")
+    public Result updateProductSupplierDensity(@RequestBody ProductSupplierDensity supplierDensity) {
+        productSupplierDensityService.updateProductSupplierDensity(supplierDensity);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎鍘傚瀵嗗害缁戝畾")
+    @PostMapping("/deleteProductSupplierDensity")
+    public Result deleteProductSupplierDensity(Integer id) {
+        productSupplierDensityService.removeById(id);
+        return Result.success();
+    }
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/SealController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/SealController.java
new file mode 100644
index 0000000..6822a8a
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/SealController.java
@@ -0,0 +1,48 @@
+package com.ruoyi.inspect.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.Laboratory;
+import com.ruoyi.inspect.pojo.Seal;
+import com.ruoyi.inspect.service.SealService;
+import com.ruoyi.common.core.domain.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 鍗扮珷绠$悊(SealController)琛ㄦ帶鍒跺眰
+ */
+@Api(tags = "鍗扮珷绠$悊")
+
+@RestController
+@RequestMapping("/sealScope")
+public class SealController {
+
+    @Resource
+    private SealService sealService;
+
+    @ApiOperation(value = "娣诲姞鍗扮珷鍙傛暟")
+    @PostMapping("/addSeal")
+    public Result addSeal(@RequestBody Seal seal) {
+        int i = sealService.addSeal(seal);
+        if(i>0){
+            Integer labId = seal.getLabId();
+            List<Laboratory> laboratory = sealService.Laboratory(labId);
+            return Result.success(laboratory);
+        }else{
+            return Result.fail();
+        }
+
+    }
+    @ApiOperation(value="鏌ヨ鍗扮珷鍒楄〃")
+    @PostMapping("/selectSeal")
+    public  Result selectSeal(Page page,Seal seal) {
+        return Result.success(sealService.selectSeal(page,seal));
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardMethodController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardMethodController.java
new file mode 100644
index 0000000..038f092
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardMethodController.java
@@ -0,0 +1,59 @@
+package com.ruoyi.inspect.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.pojo.StandardMethod;
+import com.ruoyi.inspect.service.StandardMethodService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+@Api(tags = "鏍囧噯鏂规硶")
+@RestController
+@RequestMapping("/standardMethod")
+@AllArgsConstructor
+public class StandardMethodController {
+
+    private StandardMethodService standardMethodService;
+
+    @ApiOperation(value = "鑾峰彇鏍囧噯鏂规硶鍒楄〃")
+    @PostMapping("/selectStandardMethodList")
+    public Result selectStandardMethodList(Page page,StandardMethod standardMethod) throws Exception {
+        return Result.success(standardMethodService.selectStandardMethodList(page, standardMethod));
+    }
+
+    @ApiOperation(value = "鑾峰彇鏍囧噯鏂规硶鏋氫妇")
+    @GetMapping("/selectStandardMethods")
+    public Result selectStandardMethods(){
+        return Result.success(standardMethodService.selectStandardMethods());
+    }
+
+    @ApiOperation(value = "娣诲姞鏍囧噯鏂规硶")
+    @PostMapping("/addStandardMethod")
+    public Result addStandardMethod(@RequestBody StandardMethod standardMethod) {
+        return Result.success(standardMethodService.addStandardMethod(standardMethod));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏍囧噯鏂规硶")
+    @PostMapping("/delStandardMethod")
+    public Result<?> delStandardMethod(Integer id) {
+        return Result.success(standardMethodService.delStandardMethod(id));
+    }
+
+    @ApiOperation(value = "淇敼鏍囧噯鏂规硶")
+    @PostMapping("/upStandardMethod")
+    public Result<?> upStandardMethod(@RequestBody StandardMethod standardMethod) {
+        return Result.success(standardMethodService.upStandardMethod(standardMethod));
+    }
+
+    @ApiOperation(value = "瀵煎叆鏍囧噯鏄庣粏")
+    @PostMapping("/importStandardDetails")
+    public Result<?> importStandardDetails(@RequestPart("file") MultipartFile file) throws IOException {
+        standardMethodService.inputExcel(file);
+        return Result.success();
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardTemplateController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardTemplateController.java
new file mode 100644
index 0000000..b2a82e9
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardTemplateController.java
@@ -0,0 +1,68 @@
+package com.ruoyi.inspect.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.pojo.StandardTemplate;
+import com.ruoyi.inspect.service.StandardTemplateService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RequestMapping("/StandardTemplate")
+@RestController
+@AllArgsConstructor
+@Api(tags = "鍘熷璁板綍妯℃澘")
+public class StandardTemplateController {
+
+    private StandardTemplateService standardTemplateService;
+
+    @ApiOperation(value = "鑾峰彇鍘熷璁板綍妯℃澘鍒楄〃")
+    @PostMapping("/selectStandardTemplatePageList")
+    public Result selectStandardTemplatePageList(Page page,StandardTemplate standardTemplate) throws Exception {
+        return Result.success(standardTemplateService.selectStandardTemplatePageList(page, standardTemplate));
+    }
+
+    @ApiOperation(value = "娣诲姞鍘熷璁板綍妯℃澘")
+    @PostMapping("/addStandardTemplate")
+    public Result addStandardTemplate(@RequestBody StandardTemplate standardTemplate) {
+        return Result.success(standardTemplateService.addStandardTemplate(standardTemplate));
+    }
+
+    @ApiOperation(value = "淇敼鍘熷璁板綍妯℃澘")
+    @PostMapping("/upStandardTemplate")
+    public Result<?> upStandardTemplate(@RequestBody StandardTemplate standardTemplate) {
+        return Result.success(standardTemplateService.upStandardTemplate(standardTemplate));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鍘熷璁板綍妯℃澘")
+    @PostMapping("/delStandardTemplate")
+    public Result<?> delStandardTemplate(Integer id) {
+        return Result.success(standardTemplateService.delStandardTemplate(id));
+    }
+
+    @ApiOperation(value = "鏌ヨ鍘熷璁板綍妯℃澘鏋氫妇")
+    @GetMapping("/getStandardTemplate")
+    public Result<?> getStandardTemplate() {
+        return Result.success(standardTemplateService.getStandardTemplate());
+    }
+
+    @ApiOperation(value = "閫氳繃妯℃澘id鑾峰彇妫�楠岄」妯℃澘鍐呭")
+    @PostMapping("/getStandTempThingById")
+    public Result<?> getStandTempThingById(Integer id) {
+        return Result.success(standardTemplateService.getStandTempThingById(id));
+    }
+
+    @ApiOperation(value = "缂栬緫妯℃澘缂栧埗")
+    @GetMapping("/getEditTemplatePreparation")
+    public Result<?> getEditTemplatePreparation(@RequestParam("id") Integer id) {
+        StandardTemplate byId = standardTemplateService.getById(id);
+        return Result.success("OK", byId.getThing());
+    }
+
+    @ApiOperation(value = "澶嶅埗鍘熷璁板綍妯℃澘")
+    @PostMapping("/copyStandardTemplate")
+    public Result copyStandardTemplate(@RequestBody StandardTemplate newTemplate) {
+        return Result.success(standardTemplateService.copyStandardTemplate(newTemplate));
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardTreeController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardTreeController.java
new file mode 100644
index 0000000..a92e4d1
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/StandardTreeController.java
@@ -0,0 +1,276 @@
+package com.ruoyi.inspect.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.dto.CopyStandardProductListDto;
+import com.ruoyi.inspect.dto.FactoryDto;
+import com.ruoyi.inspect.dto.InsSampleReceiveDto;
+import com.ruoyi.inspect.dto.ResetTreeDragDTO;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import com.ruoyi.inspect.pojo.StandardProductListSupplierAsk;
+import com.ruoyi.inspect.pojo.StandardTree;
+import com.ruoyi.inspect.service.StandardMethodListService;
+import com.ruoyi.inspect.service.StandardProductListService;
+import com.ruoyi.inspect.service.StandardProductListSupplierAskService;
+import com.ruoyi.inspect.service.StandardTreeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/standardTree")
+@Api(tags = "鏍囧噯搴�")
+public class StandardTreeController {
+
+    private StandardTreeService standardTreeService;
+
+    private StandardMethodListService standardMethodListService;
+
+    private StandardProductListService standardProductListService;
+
+    private StandardProductListSupplierAskService standardProductListSupplierAskService;
+
+    @ApiOperation(value = "鑾峰彇鏍囧噯鏍�")
+    @GetMapping("/selectStandardTreeList")
+    public Result selectStandardTreeList() {
+        return Result.success(standardTreeService.selectStandardTreeList());
+    }
+
+    @ApiOperation(value = "鑾峰彇鏍囧噯鏍�(妫�楠屼笅鍗�)")
+    @GetMapping("/selectStandardTreeList2")
+    public Result selectStandardTreeList2() {
+        return Result.success(standardTreeService.selectStandardTreeList());
+    }
+
+    @ApiOperation(value = "娣诲姞鏍囧噯鏍�")
+    @PostMapping("/addStandardTree")
+    public Result addStandardTree(@RequestBody StandardTree standardTree) {
+        return Result.success(standardTreeService.addStandardTree(standardTree));
+    }
+
+    @ApiOperation(value = "缁欐爣鍑嗘爲娣诲姞妫�楠屾爣鍑�")
+    @PostMapping("/addStandardMethodList")
+    public Result addStandardMethodList(String tree, Integer standardId) {
+        return Result.success(standardMethodListService.addStandardMethodList(standardId, tree));
+    }
+
+    @ApiOperation(value = "鏍规嵁鏍囧噯鏍戣繘琛屾爣鍑嗘煡璇�")
+    @PostMapping("/selectsStandardMethodByFLSSM")
+    public Result selectsStandardMethodByFLSSM(String tree) {
+        return Result.success(standardMethodListService.selectsStandardMethodByFLSSM(tree));
+    }
+
+    @ApiOperation(value = "淇敼鏍囧噯搴撲腑鐨勫唴瀹�")
+    @PostMapping("/upStandardProductList")
+    public Result upStandardProductList(String str) {
+        StandardProductList list = JSON.parseObject(str, StandardProductList.class);
+        return Result.success(standardProductListService.upStandardProductList(list));
+    }
+
+    @ApiOperation(value = "淇敼鏍囧噯搴撳尯闂�")
+    @PostMapping("/updateSection")
+    public Result updateSection(String str) {
+        StandardProductList list = JSON.parseObject(str, StandardProductList.class);
+        return Result.success(standardProductListService.updateSection(list));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏍囧噯鏍戜笅鐨勬楠屾爣鍑�")
+    @PostMapping("/delStandardMethodByFLSSM")
+    public Result delStandardMethodByFLSSM(Integer id) {
+        return Result.success(standardMethodListService.delStandardMethodByFLSSM(id));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏍囧噯鏍戜笅鐨勬楠岄」鐩�")
+    @PostMapping("/delStandardProductByIds")
+    public Result delStandardProductByIds(String ids) {
+        JSONArray lists = JSON.parseArray(ids);
+        return Result.success(standardProductListService.delStandardProduct(lists));
+    }
+
+    @ApiOperation(value = "鏂板鏍囧噯鏍戜笅鐨勬楠岄」鐩�")
+    @PostMapping("/addStandardProduct")
+    public Result addStandardProduct(String ids, String tree) {
+        return Result.success(standardTreeService.addStandardProduct(ids, tree));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏍囧噯鏍戠殑灞傜骇")
+    @PostMapping("/delStandardTree")
+    public Result delStandardTree(String tree) {
+        return Result.success(standardTreeService.delStandardTree(tree));
+    }
+
+    @ApiOperation(value = "閫氳繃鏍囧噯鏍戞煡璇㈠搴旂殑妫�楠岄」鐩�")
+    @PostMapping("/selectStandardProductList")
+    public Result selectStandardProductList(@RequestBody InsSampleReceiveDto insSample) {
+        return Result.success(standardProductListService.selectStandardProductList(insSample));
+    }
+
+    @ApiOperation(value = "閫氳繃妫�楠屾爣鍑嗘煡璇㈡楠岄」鐩�")
+    @PostMapping("/selectStandardProductListByMethodId")
+    public Result selectStandardProductListByMethodId(Integer id, String tree, Integer page) {
+        return Result.success(standardProductListService.selectStandardProductListByMethodId(id, tree, page));
+    }
+
+    @ApiOperation(value = "鎵归噺缂栬緫鏌ヨ妫�楠岄」鐩�")
+    @PostMapping("/selectStandardProductByMethodId")
+    public Result selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items) {
+        return Result.success(standardProductListService.selectStandardProductByMethodId(id, tree, page, laboratory, item, items));
+    }
+
+    @ApiOperation(value = "鎵归噺缂栬緫鏌ヨ鎵�鏈夋楠岄」鐩拰妫�楠屽瓙椤规灇涓�")
+    @PostMapping("/selectStandardProductEnumByMethodId")
+    public Result selectStandardProductEnumByMethodId(Integer id, String tree, String item) {
+        return Result.success(standardProductListService.selectStandardProductEnumByMethodId(id, tree, item));
+    }
+
+    @ApiOperation(value = "鑾峰彇鏍囧噯鏍戜笅鏍囧噯鏂规硶鏋氫妇")
+    @GetMapping("/selectStandardMethodEnum")
+    public Result selectStandardMethodEnum() {
+        return Result.success(standardMethodListService.selectStandardMethodEnum());
+    }
+
+    @ApiOperation(value = "鑾峰彇浜у搧鏋舵瀯")
+    @GetMapping("/getStandardTree2")
+    public Result getStandardTree2() {
+        return Result.success(standardTreeService.getStandardTree2());
+    }
+
+    @ApiOperation(value = "鎵归噺淇敼椤圭洰鍐呭")
+    @PostMapping("/upStandardProducts")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "standardProductList", dataTypeClass = StandardProductList.class),
+            @ApiImplicitParam(name = "ids", dataTypeClass = Integer.class)
+    })
+    public Result upStandardProducts(@RequestBody Map<String, Object> product) {
+        return Result.success(standardTreeService.upStandardProducts(product));
+    }
+
+    @PostMapping("/getStandTreeBySampleType")
+    @ApiOperation("浠呰幏鍙栧厜绾ょ殑鍨嬪彿")
+    public Result<?> getStandTreeBySampleType(String laboratory, String sampleType) {
+        return Result.success(standardTreeService.getStandTreeBySampleType(laboratory, sampleType));
+    }
+
+    @ApiOperation("瀵煎叆鏍囧噯搴�")
+    @PostMapping("/inExcelOfTree/{isEquipment}")
+    public Result inExcelOfTree(@RequestParam("file") MultipartFile file, @PathVariable("isEquipment") Boolean isEquipment) {
+        if (!isEquipment) {
+            standardTreeService.inExcelOfTree(file);
+        } else {
+            standardTreeService.importWorkstationExcel(file);
+        }
+        return Result.success();
+    }
+
+    @ApiOperation("閲嶇疆鏍囧噯搴撳崟浠�")
+    @PostMapping("/resetTreeOfPrice")
+    public Result resetTreeOfPrice(String tree, Integer standardId) {
+        standardTreeService.resetTreeOfPrice(tree, standardId);
+        return Result.success();
+    }
+
+    @ApiOperation("閲嶇疆鏍囧噯搴撳伐鏃剁郴鏁�")
+    @PostMapping("/resetTreeOfHour")
+    public Result resetTreeOfHour(String tree, Integer standardId) {
+        standardTreeService.resetTreeOfHour(tree, standardId);
+        return Result.success();
+    }
+
+    @ApiOperation("閲嶇疆鏍囧噯搴撹姹傛弿杩板拰瑕佹眰鍊�")
+    @PostMapping("/resetTreeOfAsk")
+    public Result resetTreeOfAsk(String tree, Integer standardId) {
+        standardTreeService.resetTreeOfAsk(tree, standardId);
+        return Result.success();
+    }
+
+    @ApiOperation("鏍囧噯搴撴嫋鎷�")
+    @PostMapping("/resetTreeDrag")
+    public Result resetTreeDrag(@RequestBody ResetTreeDragDTO resetTreeDragDTO) {
+        standardProductListService.resetTreeDrag(resetTreeDragDTO);
+        return Result.success();
+    }
+
+    @ApiOperation("鏍囧噯搴撴嫋鎷藉叏閮�")
+    @PostMapping("/resetTreeDragBatch")
+    public Result resetTreeDragBatch(@RequestBody Map<String, Object> params) {
+        List<StandardProductList> standardProductLists = (List<StandardProductList>) params.get("params");
+        standardProductListService.resetTreeDragBatch(standardProductLists);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏍囧噯鏍戞帓搴�")
+    @PostMapping("/updateTreeSort")
+    public Result updateTreeSort(@RequestBody List<FactoryDto> list) {
+        return Result.success(standardTreeService.updateTreeSort(list));
+    }
+
+    /*************************************************** 鍘傚鐗规畩瑕佹眰鍊煎鐞� ************************************************************/
+
+    @ApiOperation(value = "鏍规嵁浜у搧id鏌ヨ鍘傚瑕佹眰鍊肩粦瀹�")
+    @PostMapping("/selectSupplierAsk")
+    public Result selectSupplierAsk(StandardProductListSupplierAsk supplierAsk) throws Exception {
+        return Result.success(standardProductListSupplierAskService.selectByProductId(supplierAsk));
+    }
+
+    @ApiOperation(value = "鏂板鍘傚瑕佹眰鍊肩粦瀹�")
+    @PostMapping("/addProductSupplierAsk")
+    public Result addProductSupplierAsk(String str) {
+        StandardProductListSupplierAsk supplierAsk = JSON.parseObject(str, StandardProductListSupplierAsk.class);
+        return Result.success(standardProductListSupplierAskService.addProductSupplierAsk(supplierAsk));
+    }
+
+    @ApiOperation(value = "鏇存柊鍘傚瑕佹眰鍊肩粦瀹�")
+    @PostMapping("/updateProductSupplierAsk")
+    public Result updateProductSupplierAsk(String str) {
+        StandardProductListSupplierAsk supplierAsk = JSON.parseObject(str, StandardProductListSupplierAsk.class);
+        standardProductListSupplierAskService.updateProductSupplierAsk(supplierAsk);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎鍘傚瑕佹眰鍊肩粦瀹�")
+    @PostMapping("/deleteProductSupplierAsk")
+    public Result deleteProductSupplierAsk(Integer supplierAskId) {
+        standardProductListSupplierAskService.removeById(supplierAskId);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "淇敼鏍囧噯鏍�")
+    @PostMapping("/updateStandardTree")
+    public Result updateStandardTree(@RequestBody StandardTree standardTree) {
+        return Result.success(standardTreeService.updateStandardTree(standardTree));
+    }
+
+    @ApiOperation(value = "妫�楠岄」瑕佹眰鍊煎鍒跺姣�")
+    @PostMapping("/copyStandardProductList")
+    public Result copyStandardProductList(@RequestBody CopyStandardProductListDto copyStandardProductListDto) {
+        return Result.success(standardProductListService.copyStandardProductList(copyStandardProductListDto));
+    }
+
+    @ApiOperation(value = "妫�楠岄」瑕佹眰鍊煎崟鐙姣�")
+    @PostMapping("/copyStandardProductOne")
+    public Result copyStandardProductOne(@RequestBody CopyStandardProductListDto copyStandardProductListDto) {
+        return Result.success(standardProductListService.copyStandardProductOne(copyStandardProductListDto));
+    }
+
+    @ApiOperation(value = "妫�楠岄」鎵归噺淇敼瑕佹眰鍊艰姹傛弿杩�")
+    @PostMapping("/updateStandardProductListBatch")
+    public Result updateStandardProductListBatch(@RequestBody Map<String, Object> param) {
+        List<StandardProductList> standardProductList = (List<StandardProductList>) param.get("standardProductList");
+        return Result.success(standardProductListService.updateBatchById(standardProductList));
+    }
+
+    @ApiOperation(value = "妫�楠岄」澶嶅埗鎺掑簭")
+    @PostMapping("/copyStandardProductSort")
+    public Result copyStandardProductSort(@RequestBody CopyStandardProductListDto copyStandardProductListDto) {
+        return Result.success(standardProductListService.copyStandardProductSort(copyStandardProductListDto));
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/controller/StructureTestObjectPartController.java b/basic-server/src/main/java/com/ruoyi/inspect/controller/StructureTestObjectPartController.java
new file mode 100644
index 0000000..e6aca05
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/controller/StructureTestObjectPartController.java
@@ -0,0 +1,59 @@
+package com.ruoyi.inspect.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.pojo.StructureTestObjectPart;
+import com.ruoyi.inspect.service.StructureTestObjectPartService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * 妫�楠屽璞¢浂浠惰〃
+ *
+ * @author zhuo
+ * @since 2024-08-07
+ */
+@RestController
+@RequestMapping("/structureTestObjectPart")
+@AllArgsConstructor
+@Api(tags = "妫�楠屽璞¢浂浠惰〃")
+public class StructureTestObjectPartController {
+
+    private StructureTestObjectPartService structureTestObjectPartService;
+
+    @ApiOperation(value = "鏍规嵁妫�楠屽璞d鏌ヨ闆朵欢")
+    @PostMapping("/selectByTestObjectId")
+    public Result selectByTestObjectId(Page page,StructureTestObjectPart structureTestObjectPart){
+        return Result.success(structureTestObjectPartService.selectByTestObjectId(page,structureTestObjectPart));
+    }
+
+    @ApiOperation(value = "鏂板妫�楠屽璞¢浂浠�")
+    @PostMapping("/addTestObjectPart")
+    public Result addTestObjectPart(@RequestBody StructureTestObjectPart structureTestObjectPart) {
+        structureTestObjectPartService.addTestObjectPart(structureTestObjectPart);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏇存柊妫�楠屽璞¢浂浠�")
+    @PostMapping("/updateTestObjectPart")
+    public Result updateTestObjectPart(@RequestBody StructureTestObjectPart structureTestObjectPart) {
+        structureTestObjectPartService.updateTestObjectPart(structureTestObjectPart);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎妫�楠屽璞¢浂浠�")
+    @PostMapping("/deleteTestObjectPart")
+    public Result deleteTestObjectPart(Integer id) {
+        structureTestObjectPartService.removeById(id);
+        return Result.success();
+    }
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/CopyStandardProductListDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/CopyStandardProductListDto.java
new file mode 100644
index 0000000..08f9bfc
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/CopyStandardProductListDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.StandardProductList;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鏍囧噯妫�楠岄」澶嶅埗
+ *
+ * @Author zhuo
+ * @Date 2024/10/31
+ */
+@Data
+public class CopyStandardProductListDto {
+
+    @ApiModelProperty("鍘熸湰妫�楠岄」淇℃伅")
+    private List<StandardProductList> oldStandardProductList;
+
+    @ApiModelProperty("闇�瑕佸姣旂殑妫�楠岄」淇℃伅")
+    private List<StandardProductList> newStandardProductList;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java
new file mode 100644
index 0000000..a5b36d9
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FactoryDto {
+
+    private String code = "[1]";
+
+    private String label;
+
+    private String value;
+
+    private List<LaboratoryDto> children;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantityCheckDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantityCheckDto.java
new file mode 100644
index 0000000..e7df599
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantityCheckDto.java
@@ -0,0 +1,182 @@
+package com.ruoyi.inspect.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 鍘熸潗鏂欐煡璇�, 鎺掗櫎浜嗕緵搴斿晢
+ * @Author zhuo
+ * @Date 2024/8/28
+ */
+@Data
+public class IfsInventoryQuantityCheckDto  implements Serializable {
+
+    private Integer id;
+
+    @ApiModelProperty("鍩�")
+    private String contract;
+
+    @ApiModelProperty("璁㈠崟鍙�")
+    private String orderNo;
+
+
+    @ApiModelProperty("琛屽彿")
+    private String lineNo;
+
+    @ApiModelProperty("涓嬭揪鍙�")
+    private String releaseNo;
+
+    @ApiModelProperty("鎺ユ敹鍙�")
+    private Integer receiptNo;
+
+    @ApiModelProperty("闆朵欢鍙�")
+    private String partNo;
+
+    @ApiModelProperty("闆朵欢鎻忚堪")
+    private String partDesc;
+
+    @ApiModelProperty("鐘舵�佹弿杩�")
+    private String status;
+
+    @ApiModelProperty("鐘舵��")
+    private String statusDb;
+
+    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
+    private BigDecimal qtyArrived;
+
+    @ApiModelProperty("宸叉楠岀殑璐拱鏁伴噺")
+    private BigDecimal qtyInspected;
+
+    @ApiModelProperty("瑕佹楠岀殑閲囪喘鏁伴噺")
+    private BigDecimal qtyToInspect;
+
+    @ApiModelProperty("鎶佃揪鐨勫簱瀛樻暟閲�")
+    private BigDecimal invQtyInStore;
+
+    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
+    private BigDecimal purQtyInStore;
+
+    @ApiModelProperty("閰嶇疆鏍囪瘑")
+    private String configurationId;
+
+    @ApiModelProperty("鎵瑰彿")
+    private String lotBatchNo;
+
+    @ApiModelProperty("wdr鍙�")
+    private String waivDevRejNo;
+
+    @ApiModelProperty("娲诲姩搴忓垪")
+    private Integer activitySeq;
+
+
+    @ApiModelProperty("搴忓垪鍙�")
+    private String serialNo;
+
+    @ApiModelProperty("搴撲綅鍙�")
+    private String locationNo;
+
+    @ApiModelProperty("鐗堟湰鍙�")
+    private String engChgLevel;
+
+    @ApiModelProperty("鎺ユ敹浜�")
+    private String receiver;
+
+    @ApiModelProperty("鎺ユ敹浜哄鍚�")
+    private String receiverName;
+
+    @ApiModelProperty("閲囪喘鍛�")
+    private String buyerCode;
+
+    @ApiModelProperty("閲囪喘鍛樺鍚�")
+    private String buyerName;
+
+    @ApiModelProperty("瀹為檯鍒拌揣鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime arriveDate;
+
+    @ApiModelProperty("瀹為檯浜よ揣鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime deliveryDate;
+
+    @ApiModelProperty("鐢熶骇鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime productDate;
+
+    @ApiModelProperty("澶辨晥鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime invalidDate;
+
+
+    @ApiModelProperty("瀹℃壒鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime approvedDate;
+
+    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜�")
+    private String reqCeater;
+
+    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜哄鍚�")
+    private String reqCeaterName;
+
+    @ApiModelProperty("閲囪喘璁㈠崟琛屽娉�")
+    private String lineRemarks;
+
+    @ApiModelProperty("鍗曚綅")
+    private String buyUnitMeas;
+
+
+    private Integer isSource;
+
+    private Integer number;
+
+
+    private Integer state;
+
+    @ApiModelProperty("鎺ユ敹鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime receiverDate;
+
+    @ApiModelProperty("鏄惁涓洪娆″嚭鐜� 0 鍚� 1 鏄�")
+    private Integer isFirst;
+
+    @ApiModelProperty("鐩爣搴撲綅鍙�")
+    private String toLocation;
+
+    @ApiModelProperty("鏄惁鏄姤妫� 0 鍚� 1 鏄�")
+    private Integer isInspect;
+
+    @ApiModelProperty("鎶ユ浜�")
+    private String declareUser;
+
+
+    @ApiModelProperty("鎶ユ浜篿d")
+    private Integer declareUserId;
+
+    @ApiModelProperty("鍗曚綅")
+    private String partUnit;
+
+    @ApiModelProperty("浜т笟閾炬娴嬫暟鎹�")
+    private String industryChain;
+
+    @ApiModelProperty("鎶ユ鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime declareDate;
+
+    @ApiModelProperty("鏄惁鍗″彲浠ュ搴︽楠� 0 鍚� 1 鏄�")
+    private Integer isQuarter;
+
+    // 淇敼鍚庣殑
+    @ApiModelProperty("鎵瑰彿")
+    private String updateBatchNo;
+
+    @ApiModelProperty("鏄惁鏄摐鍗曚笣, 0鍚�, 1鏄�")
+    private Integer isCopper;
+
+    @ApiModelProperty("鐗╂枡绫诲瀷")
+    private Integer isExpire;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantityDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantityDto.java
new file mode 100644
index 0000000..b52057a
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantityDto.java
@@ -0,0 +1,82 @@
+package com.ruoyi.inspect.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class IfsInventoryQuantityDto extends IfsInventoryQuantityCheckDto {
+
+    /**
+     * 濮旀墭缂栧彿
+     */
+    @ApiModelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ApiModelProperty("妫�楠屽璞�")
+    private String sampleType;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sampleName;
+
+    @ApiModelProperty("鏍峰搧鍨嬪彿")
+    private String sampleModel;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    // 杩涘巶
+    @ApiModelProperty("璁㈠崟id")
+    private Integer enterOrderId;
+
+    @ApiModelProperty("鎶ュ憡id")
+    private String enterReportId;
+
+    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
+    private String enterUrl;
+
+    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
+    private String enterUrlS;
+
+    // 瀛e害
+    @ApiModelProperty("璁㈠崟id")
+    private Integer quarterOrderId;
+
+    @ApiModelProperty("鎶ュ憡id")
+    private String quarterReportId;
+
+    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
+    private String quarterUrl;
+
+    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
+    private String quarterUrlS;
+
+    private Integer orderState;
+
+    @ApiModelProperty("涓嬪彂鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime sendTime;
+
+    @ApiModelProperty("鏉愭枡鍘傚")
+    private String supplierName;
+
+    @ApiModelProperty("濮旀墭浜�")
+    private String prepareUser;
+
+    @ApiModelProperty("棰滆壊")
+    private String color;
+
+    @ApiModelProperty("鏍囩鐘舵��")
+    private String labelStatus;
+
+    @ApiModelProperty("鏍囩鏉″舰鐮�")
+    private String labelBarCode;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    private Integer createUser;
+
+    @ApiModelProperty("妫�楠屼汉")
+    private String userName;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantitySupplierDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantitySupplierDto.java
new file mode 100644
index 0000000..f829043
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/IfsInventoryQuantitySupplierDto.java
@@ -0,0 +1,124 @@
+package com.ruoyi.inspect.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.inspect.pojo.IfsInventoryQuantity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鑳芥煡璇㈠埌渚涘簲鍟�
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class IfsInventoryQuantitySupplierDto extends IfsInventoryQuantity {
+
+    /**
+     * 濮旀墭缂栧彿
+     */
+    @ExcelProperty(index = 2, value = "濮旀墭缂栧彿")
+    @ApiModelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ApiModelProperty("鏍峰搧id")
+    private Integer sampleId;
+
+    @ApiModelProperty("妫�楠屽璞�")
+    private String sampleType;
+
+    @ExcelProperty(index = 7, value = "鏍峰搧鍚嶇О")
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sampleName;
+
+    @ExcelProperty(index = 8, value = "鏍峰搧鍨嬪彿")
+    @ApiModelProperty("鏍峰搧鍨嬪彿")
+    private String sampleModel;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    // 杩涘巶
+    @ApiModelProperty("杩涘巶璁㈠崟id")
+    private Integer enterOrderId;
+
+    @ApiModelProperty("鎶ュ憡id")
+    private String enterReportId;
+
+    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
+    private String enterUrl;
+
+    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
+    private String enterUrlS;
+
+    // 瀛e害
+    @ApiModelProperty("瀛e害璁㈠崟id")
+    private Integer quarterOrderId;
+
+    @ApiModelProperty("鎶ュ憡id")
+    private String quarterReportId;
+
+    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
+    private String quarterUrl;
+
+    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
+    private String quarterUrlS;
+
+    private Integer orderState;
+
+    @ApiModelProperty("涓嬪彂鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime sendTime;
+
+    @ApiModelProperty("濮旀墭浜�")
+    private String prepareUser;
+
+    @ApiModelProperty("棰滆壊")
+    private String color;
+
+    @ApiModelProperty("鏍囩鐘舵��")
+    private String labelStatus;
+
+    @ApiModelProperty("鏍囩鏉″舰鐮�")
+    private String labelBarCode;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    private Integer createUser;
+
+    @ExcelProperty(index = 9, value = "妫�楠屼汉")
+    @ApiModelProperty("妫�楠屼汉")
+    private String userName;
+
+    @ExcelProperty(index = 10, value = "涓嬪彂鏃堕棿")
+    private String sendTimeString;
+
+    @ExcelProperty(index = 14, value = "鎺ユ敹鏃堕棿")
+    private String receiverDateString;
+
+    @ExcelProperty(index = 15, value = "鎶ユ鏃堕棿")
+    private String declareDateString;
+
+    // 鍚堟牸鐘舵��,: 0 妫�楠屼腑, 1鍚堟牸, 2涓嶅悎鏍�, 3鏈笅鍗�,4璁╂鏀捐
+    @ExcelProperty(index = 6, value = "妫�楠岀姸鎬�")
+    private String inspectStatusString;
+
+    @ApiModelProperty("鎶ユ寮�濮嬫椂闂�")
+    private String beginDeclareDate;
+
+    @ApiModelProperty("鎶ユ缁撴潫鏃堕棿")
+    private String endDeclareDate;
+
+    @ApiModelProperty("涓嶅悎鏍兼弿杩�")
+    @ExcelProperty(index = 16, value = "涓嶅悎鏍兼弿杩�")
+    private String unqualifiedDesc;
+
+
+    @ApiModelProperty("涓嶅悎鏍奸」")
+    @ExcelProperty(index = 17, value = "涓嶅悎鏍奸」")
+    private String unqualifiedItem;
+
+    @ApiModelProperty("鍏嶆")
+    private Integer isExemption;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/InsSampleReceiveDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/InsSampleReceiveDto.java
new file mode 100644
index 0000000..98b716d
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/InsSampleReceiveDto.java
@@ -0,0 +1,35 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsSample1;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/10/29
+ */
+@Data
+public class InsSampleReceiveDto extends InsSample1 {
+
+    @ApiModelProperty("闆朵欢鍙�")
+    private String partNo;
+
+    @ApiModelProperty("鍘熸潗鏂檌d")
+    private Integer ifsInventoryId;
+
+    @ApiModelProperty("鑺暟")
+    private String cores;
+
+    @ApiModelProperty("鍨嬪彿鍙傛暟")
+    private String modelNum;
+
+    @ApiModelProperty("瀵间綋鏉愯川")
+    private String conductorMaterial;
+
+    @ApiModelProperty("瀵间綋绫诲瀷")
+    private String conductorType;
+
+    @ApiModelProperty("鏄惁鏄數缂嗛厤缃�")
+    private String isCableTag;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java
new file mode 100644
index 0000000..59d088d
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class LaboratoryDto {
+
+    private String code = "[2]";
+
+    private String label;
+
+    private String value;
+
+    private List<SampleTypeDto> children;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java
new file mode 100644
index 0000000..5ed39bf
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class ModelDto {
+
+    private String code = "[5]";
+
+    private String label;
+
+    private String value;
+
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/PageTestObjectDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/PageTestObjectDto.java
new file mode 100644
index 0000000..f4736d5
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/PageTestObjectDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.StructureTestObject;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author 鎴村崜
+ * @Date 2024/2/26
+ */
+@Data
+public class PageTestObjectDto extends StructureTestObject {
+
+    @ApiModelProperty(value = "浜у搧")
+    private String product;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createUserName;
+
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateUserName;
+
+    @ApiModelProperty(value = "闆朵欢鍙�")
+    private String partNo;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/ProductDTO1.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/ProductDTO1.java
new file mode 100644
index 0000000..f9fa558
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/ProductDTO1.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.Product;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/8/5
+ */
+@Data
+public class ProductDTO1 extends Product {
+
+    @ApiModelProperty(value = "闆朵欢鍙�")
+    private String partNo;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java
new file mode 100644
index 0000000..a1502e6
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java
@@ -0,0 +1,11 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class ProductDto {
+
+    private Integer id;
+
+    private String name;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/ResetTreeDragDTO.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/ResetTreeDragDTO.java
new file mode 100644
index 0000000..1fee4c7
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/ResetTreeDragDTO.java
@@ -0,0 +1,26 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/8/22
+ */
+@Data
+public class ResetTreeDragDTO {
+    @ApiModelProperty(value = "寮�濮嬬储寮�")
+    private String beginIndex;
+
+    @ApiModelProperty(value = "缁撴潫绱㈠紩")
+    private String endIndex;
+
+    @ApiModelProperty(value = "鏍囧噯缂栧彿id")
+    private String methodId;
+
+    @ApiModelProperty(value = "鏁�")
+    private String tree;
+
+    @ApiModelProperty(value = "妫�楠岄」琛宨d")
+    private String productionId;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java
new file mode 100644
index 0000000..3db9c2f
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SampleDto {
+
+    private String code = "[4]";
+
+    private String label;
+
+    private String value;
+
+    private String partNo;
+
+    // 鏍峰搧鑻辨枃
+    private String sampleEn;
+
+    private List<ModelDto> children;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java
new file mode 100644
index 0000000..4744706
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SampleTypeDto {
+
+    private String code = "[3]";
+
+    // 妫�娴嬪璞d
+    private Integer sampleTypeId;
+
+    // 妫�娴嬪璞℃帓搴�
+    private Integer sort;
+
+    private String label;
+
+    private String value;
+
+    private String partNo;
+
+    // 瀵硅薄鑻辨枃
+    private String sampleTypeEn;
+
+    private List<SampleDto> children;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/dto/TestItemDto.java b/basic-server/src/main/java/com/ruoyi/inspect/dto/TestItemDto.java
new file mode 100644
index 0000000..627fc66
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/dto/TestItemDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TestItemDto {
+
+    private Integer id;
+
+    private String name;
+
+    private List<ProductDto> children;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/excel/StructureTestObjectData.java b/basic-server/src/main/java/com/ruoyi/inspect/excel/StructureTestObjectData.java
new file mode 100644
index 0000000..8242910
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/excel/StructureTestObjectData.java
@@ -0,0 +1,25 @@
+package com.ruoyi.inspect.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class StructureTestObjectData {
+    @ExcelProperty(value = "鍦烘墍")
+    private String laboratory;
+
+    @ExcelProperty(value = "妫�娴嬪璞�")
+    private String specimenName;
+
+    @ExcelProperty(value = "妫�娴嬪璞�(EN)")
+    private String specimenNameEn;
+
+    @ExcelProperty(value = "瀵硅薄浠e彿")
+    private String code;
+
+    @ExcelProperty(value = "浜у搧鍚嶇О")
+    private String name;
+
+    @ExcelProperty(value = "浜у搧鍚嶇О(EN)")
+    private String nameEn;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/excel/StructureTestObjectListener.java b/basic-server/src/main/java/com/ruoyi/inspect/excel/StructureTestObjectListener.java
new file mode 100644
index 0000000..9c3810b
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/excel/StructureTestObjectListener.java
@@ -0,0 +1,38 @@
+package com.ruoyi.inspect.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.ruoyi.inspect.service.ProductService;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StructureTestObjectListener extends AnalysisEventListener<StructureTestObjectData> {
+    private static final int BATCH_COUNT = 1000;
+    List<StructureTestObjectData> list = new ArrayList<>();
+
+    private ProductService productService;
+
+    public StructureTestObjectListener(ProductService productService) {
+        this.productService = productService;
+    }
+
+    @Override
+    public void invoke(StructureTestObjectData data, AnalysisContext analysisContext) {
+        list.add(data);
+        if (list.size() >= BATCH_COUNT) {
+            save();
+            list.clear();
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        save();
+    }
+
+
+    private void save() {
+        productService.importPartExcel(list);
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/CertificationMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/CertificationMapper.java
new file mode 100644
index 0000000..86153df
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/CertificationMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.Certification;
+import org.apache.ibatis.annotations.Param;
+
+public interface CertificationMapper extends BaseMapper<Certification> {
+
+    //鏌ヨ璧勮川鏄庣粏鍒楄〃
+    IPage<Certification> getCertificationDetail(Page page, @Param("ew") QueryWrapper<Certification> ew);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/IfsInventoryQuantityMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/IfsInventoryQuantityMapper.java
new file mode 100644
index 0000000..8ca353a
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/IfsInventoryQuantityMapper.java
@@ -0,0 +1,42 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.dto.IfsInventoryQuantityDto;
+import com.ruoyi.inspect.pojo.IfsInventoryQuantity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Mapper
+public interface IfsInventoryQuantityMapper extends BaseMapper<IfsInventoryQuantity> {
+
+    /**
+     * 鎵撳嵃鏍囩鏌ヨ
+     * @param ids
+     * @return
+     */
+    List<IfsInventoryQuantityDto> printLabel(@Param("ids") List<Integer> ids);
+
+    /**
+     *
+     * @param ifsInventoryId
+     * @return
+     */
+    int selectReportCountById(@Param("ifsInventoryId") Integer ifsInventoryId);
+
+
+    /**
+     * 鏌ヨ褰撳墠瀛e害鏄惁鍑虹幇杩囪鏉愭枡
+     * @param partDetail         鍨嬪彿
+     * @param supplierName       渚涘簲鍟嗗悕绉�
+     * @param startOfNextQuarter 瀛e害寮�濮嬫椂闂�
+     * @param endOfQuarter       瀛e害缁撴潫鏃堕棿
+     * @return
+     */
+    Integer selectIsFirst(@Param("partDetail") String partDetail,
+                          @Param("supplierName") String supplierName,
+                          @Param("startOfNextQuarter") LocalDateTime startOfNextQuarter,
+                          @Param("endOfQuarter") LocalDateTime endOfQuarter);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/LaboratoryMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/LaboratoryMapper.java
new file mode 100644
index 0000000..6be3f72
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/LaboratoryMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.Laboratory;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 瀹為獙瀹ょ鐞�(Laboratory)琛ㄦ暟鎹簱璁块棶灞�
+ */
+public interface LaboratoryMapper extends BaseMapper<Laboratory> {
+
+    IPage<Laboratory> selectItemParameter(Page page, @Param("ew") QueryWrapper<Laboratory> ew);
+
+    Object obtainItemParameterList(@Param("page") Page page, @Param("ew") QueryWrapper<Laboratory> ew);
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductMapper.java
new file mode 100644
index 0000000..d6e9def
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.dto.ProductDTO1;
+import com.ruoyi.inspect.pojo.Product;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恜roduct(浜у搧琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-04-26 01:11:02
+* @Entity com.ruoyi.basic.pojo.Product
+*/
+public interface ProductMapper extends BaseMapper<Product> {
+
+    IPage<Product> selectProductListByObjectId(Page page, @Param("ew") QueryWrapper<ProductDTO1> ew, @Param("partNo") String partNo);
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductPartMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductPartMapper.java
new file mode 100644
index 0000000..e45e3f5
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductPartMapper.java
@@ -0,0 +1,13 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.inspect.pojo.ProductPart;
+import org.apache.ibatis.annotations.Param;
+
+public interface ProductPartMapper extends BaseMapper<ProductPart> {
+    IPage<ProductPart> selectListByProductId(IPage<ProductPart> page,
+                                              @Param("ew") QueryWrapper<ProductPart> ew,
+                                              @Param("productId") Integer productId);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductSupplierDensityMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductSupplierDensityMapper.java
new file mode 100644
index 0000000..391f77d
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/ProductSupplierDensityMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.ProductSupplierDensity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 浜у搧鍘傚瀵嗗害缁戝畾琛�
+ *
+ * @author zhuo
+ * @since 2024-09-19
+ */
+@Mapper
+public interface ProductSupplierDensityMapper extends BaseMapper<ProductSupplierDensity> {
+
+    IPage<ProductSupplierDensity> selectListByProductId(@Param("page") Page page, @Param("ew") QueryWrapper<ProductSupplierDensity> ew, @Param("productId") Integer productId);
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/SealMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/SealMapper.java
new file mode 100644
index 0000000..1ebdeb0
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/SealMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.Laboratory;
+import com.ruoyi.inspect.pojo.Seal;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface SealMapper extends BaseMapper<Seal> {
+    IPage<Seal>selectSeal(Page page, @Param("ew") QueryWrapper<Seal> ew);
+    List<Laboratory> selectLaboratory (Integer labId);
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardMethodListMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardMethodListMapper.java
new file mode 100644
index 0000000..540c4ab
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardMethodListMapper.java
@@ -0,0 +1,40 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.StandardMethodList;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_method_list(鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-04 13:44:04
+* @Entity com.ruoyi.basic.pojo.StandardMethodList
+*/
+public interface StandardMethodListMapper extends BaseMapper<StandardMethodList> {
+
+    Map<String, String> selectStandardMethodById(Integer id);
+
+    String selectUserById(Integer id);
+
+    List<StandardMethodList> selectStandardMethodLists(String tree);
+
+    List<StandardMethodList> selectStandardMethodListsByNull(String tree);
+
+    List<StandardMethodList> selectStandardMethodLists3(String tree);
+
+    List<StandardMethodList> selectStandardMethodLists2(@Param("data1") String data1, @Param("data2") String data2, @Param("data3") String data3, @Param("data4") String data4, @Param("data5") String data5);
+
+    List<StandardProductList> selectParameterList(String code);
+
+    List<StandardMethodList> selectListEnum();
+
+    Integer getStandardMethodId(String code);
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardMethodMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardMethodMapper.java
new file mode 100644
index 0000000..93795d4
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardMethodMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.mybatis_config.MyBaseMapper;
+import com.ruoyi.inspect.pojo.StandardMethod;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_method(鏍囧噯鏂规硶)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-03 19:21:41
+* @Entity com.ruoyi.basic.pojo.StandardMethod
+*/
+public interface StandardMethodMapper extends MyBaseMapper<StandardMethod> {
+
+    IPage<StandardMethod> selectStandardMethodList(Page page, @Param("ew") QueryWrapper<StandardMethod> ew);
+
+    StandardMethod selectStandMethodById(Integer id);
+
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardProductListMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardProductListMapper.java
new file mode 100644
index 0000000..1b0e867
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardProductListMapper.java
@@ -0,0 +1,69 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_product_list(鏍囧噯鏍戜笅鐨勬楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-05 10:33:29
+* @Entity com.ruoyi.basic.pojo.StandardProductList
+*/
+public interface StandardProductListMapper extends BaseMapper<StandardProductList> {
+
+    IPage<StandardProductList> standardProductListIPage(@Param("id") Integer id, @Param("tree") String tree, IPage<StandardProductList> page, @Param("laboratory") String laboratory, @Param("insItem") String insItem, @Param("insItems") String insItems);
+
+    StandardProductList getOne(@Param("standardMethodListId") Integer standardMethodListId, @Param("inspectionItem") String inspectionItem, @Param("sample") String sample, @Param("inspectionItemSubclass") String inspectionItemSubclass, @Param("model") String model, @Param("inspectionItemClass") String inspectionItemClass);
+
+    List<StandardProductList> selectDetail(@Param("standardMethodListId") Integer standardMethodListId, @Param("state") int state, @Param("model") String model, @Param("isCableTag") String isCableTag);
+
+    List<StandardProductList> selectDetail2(@Param("standardMethodListId") Integer standardMethodListId, @Param("state") int state, @Param("tree") String tree, @Param("isCableTag") String isCableTag);
+
+    /**
+     * 鏌ヨ闆朵欢棰滆壊
+     * @param partNo
+     * @return
+     */
+    Map<String, String> selectPartColor(@Param("partNo") String partNo);
+
+    /**
+     * 鍖洪棿淇敼
+     * @param productList
+     * @return
+     */
+    void updateSection(@Param("productList") StandardProductList productList);
+
+
+    /**
+     * 浠庝笂寰�涓嬩慨鏀归『搴�
+     * @param beginIndex 寮�濮嬩綅缃�
+     * @param endIndex 缁撴潫浣嶇疆
+     * @param methodId 鏍囧噯id
+     * @param tree 鏍�
+     */
+    void updateSortUp(@Param("beginIndex") Integer beginIndex,
+                      @Param("endIndex") Integer endIndex,
+                      @Param("methodId") Integer methodId,
+                      @Param("tree") String tree);
+
+    /**
+     * 浠庝笅缃戜笂淇敼椤哄簭
+     * @param beginIndex
+     * @param endIndex
+     * @param methodId
+     * @param tree
+     */
+    void updateSortDown(@Param("beginIndex") Integer beginIndex,
+                        @Param("endIndex") Integer endIndex,
+                        @Param("methodId") Integer methodId,
+                        @Param("tree") String tree);
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardProductListSupplierAskMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardProductListSupplierAskMapper.java
new file mode 100644
index 0000000..23ffae9
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardProductListSupplierAskMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.StandardProductListSupplierAsk;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 妫�楠岄」鐩巶瀹跺瘑搴︾粦瀹氳〃
+ *
+ * @author zhuo
+ * @since 2024-09-23
+ */
+@Mapper
+public interface StandardProductListSupplierAskMapper extends BaseMapper<StandardProductListSupplierAsk> {
+
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardTemplateMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardTemplateMapper.java
new file mode 100644
index 0000000..0f39a84
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardTemplateMapper.java
@@ -0,0 +1,32 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.StandardTemplate;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_template(鏍囧噯妯℃澘)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-11 13:47:52
+* @Entity com.ruoyi.basic.pojo.StandardTemplate
+*/
+public interface StandardTemplateMapper extends BaseMapper<StandardTemplate> {
+
+    IPage<StandardTemplate> selectStandardTemplatePageList(Page page, @Param("ew") QueryWrapper<StandardTemplate> ew);
+
+    StandardTemplate getStandTempIdByName(String name);
+
+    /**
+     * 鏌ヨ鍘嬬缉鍚庣殑鏁版嵁
+     * @param templateId
+     * @return
+     */
+    String selectCompressThing(Integer templateId);
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardTreeMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardTreeMapper.java
new file mode 100644
index 0000000..6a91a68
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StandardTreeMapper.java
@@ -0,0 +1,92 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.dto.*;
+import com.ruoyi.inspect.pojo.IfsInventoryQuantity;
+import com.ruoyi.inspect.pojo.StandardMethodList;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import com.ruoyi.inspect.pojo.StandardTree;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恠tandard_tree(鏍囧噯鏍�)銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2024-03-01 15:06:44
+ * @Entity com.ruoyi.basic.pojo.StandardTree
+ */
+public interface StandardTreeMapper extends BaseMapper<StandardTree> {
+
+    List<FactoryDto> selectStandardTreeList();
+
+    List<StandardTree> selectStandardTreeList2(String sampleType);
+
+    StandardProductList selectStandardProductById(Integer id);
+
+    List<StandardProductList> getStandardProductListBySample(String sampleType);
+
+    List<StandardMethodList> getStandardMethodListBySample(String sampleType);
+
+    List<StandardProductList> selectStandardProductListByTree(String tree, String sample, String model, String trees, String laboratory);
+
+    List<StandardProductList> selectStandardProductListByTree2(String tree, String sample, String model, String trees, String laboratory);
+
+
+    List<SampleTypeDto> getStandardTree2();
+
+    List<SampleDto> getStandardTree3(String sampleType);
+
+
+    String getLaboratory(String str);
+
+    Integer getStructureItemParameterId(String sampleType, String item, String itemChild, String inspectionItemClass);
+
+    List<ProductDto> selectPList(String name);
+
+    String selSample(String sample);
+
+    List<FactoryDto> selectStandardTreeListByPartNo(@Param("partNo") String partNo);
+
+    IPage<IfsInventoryQuantity> selectIfsPage(IPage<IfsInventoryQuantity> page,
+                                              @Param("ew") QueryWrapper<IfsInventoryQuantity> ew);
+
+    IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page,
+                                                    @Param("ew") QueryWrapper<IfsInventoryQuantityDto> ew);
+
+
+    IPage<IfsInventoryQuantityCheckDto> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, @Param("ew")QueryWrapper<IfsInventoryQuantityCheckDto> ew);
+
+    /**
+     * 鍘熸潗鎶ユ鏌ヨ鍏ㄩ儴(鍒嗛〉)
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<IfsInventoryQuantitySupplierDto> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, @Param("ew") QueryWrapper<IfsInventoryQuantitySupplierDto> ew, @Param("beginDeclareDate") String beginDeclareDate, @Param("endDeclareDate")String endDeclareDate);
+
+    /**
+     * 鍘熸潗鎶ユ鏌ヨ鍏ㄩ儴(鏃犲垎椤�)
+     * @param ew
+     * @return
+     */
+    List<IfsInventoryQuantitySupplierDto> getIfsByOverList(@Param("ew") QueryWrapper<IfsInventoryQuantitySupplierDto> ew, @Param("beginDeclareDate") String beginDeclareDate, @Param("endDeclareDate")String endDeclareDate);
+
+    /**
+     * 鍘熸潗鏂欐煡璇㈠搴︽楠�
+     * @param page
+     * @param
+     * @param beginDeclareDate
+     * @param endDeclareDate
+     * @return
+     */
+    IPage<IfsInventoryQuantitySupplierDto> getIfsByQuarter(Page<IfsInventoryQuantitySupplierDto> page, @Param("ew") QueryWrapper<IfsInventoryQuantitySupplierDto> ew, @Param("beginDeclareDate") String beginDeclareDate, @Param("endDeclareDate")String endDeclareDate);
+
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureItemParameterMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureItemParameterMapper.java
new file mode 100644
index 0000000..d32b7c4
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureItemParameterMapper.java
@@ -0,0 +1,30 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.dto.TestItemDto;
+import com.ruoyi.inspect.pojo.StructureItemParameter;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-02-26 16:21:17
+ */
+public interface StructureItemParameterMapper extends BaseMapper<StructureItemParameter> {
+
+    IPage<StructureItemParameter> selectItemParameterList(Page page, @Param("ew") QueryWrapper<StructureItemParameter> ew);
+
+    List<Map<String, Object>> getInsProduction();
+
+    List<TestItemDto> getItemTree();
+
+    int removeNoSample(@Param("sample") String sample);
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureTestObjectMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureTestObjectMapper.java
new file mode 100644
index 0000000..84bf87a
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureTestObjectMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.dto.PageTestObjectDto;
+import com.ruoyi.inspect.pojo.StructureTestObject;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 妫�娴嬪璞�(StructureTestObject)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-02-26 17:36:41
+ */
+public interface StructureTestObjectMapper extends BaseMapper<StructureTestObject> {
+
+    IPage<PageTestObjectDto> selectTestObjectList(Page page, @Param("ew") QueryWrapper<PageTestObjectDto> ew, @Param("partNo") String partNo);
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureTestObjectPartMapper.java b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureTestObjectPartMapper.java
new file mode 100644
index 0000000..29a4fc3
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/mapper/StructureTestObjectPartMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.StructureTestObjectPart;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 妫�楠屽璞¢浂浠惰〃
+ *
+ * @author zhuo
+ * @since 2024-08-07
+ */
+@Mapper
+public interface StructureTestObjectPartMapper extends BaseMapper<StructureTestObjectPart> {
+    IPage<StructureTestObjectPart> selectListByTestObjectId(Page page, @Param("ew") QueryWrapper<StructureTestObjectPart> structureTestObjectPartQueryWrapper, @Param("testObjectId") Integer testObjectId);
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/Certification.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/Certification.java
new file mode 100644
index 0000000..b20050e
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/Certification.java
@@ -0,0 +1,72 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@TableName(value = "certification")
+@Data
+public class Certification implements Serializable {
+
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "璧勮川鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "璧勮川缂栫爜")
+    private String code;
+
+    @ApiModelProperty(value = "棰佸彂鏈烘瀯")
+    private String organization;
+
+    @ApiModelProperty(value = "璧勮川璇存槑")
+    private String explanation;
+
+    @ApiModelProperty(value = "棣栨棰佸彂鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime firstIssuanceDate;
+
+    @ApiModelProperty(value = "鏈�杩戦鍙戞椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime latestIssuanceDate;
+
+
+
+    @ApiModelProperty(value = "鍒版湡棰佸彂鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime expireTime;
+
+
+    @ApiModelProperty(value = "棰佸竷鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime dateOfIssuance;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String createUserName;
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "璧勮川鍥剧墖鍦板潃")
+    private String imageUrl;
+
+    @ApiModelProperty(value = "璧勮川闄勪欢鍦板潃")
+    private String fileUrl;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/IfsInventoryQuantity.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/IfsInventoryQuantity.java
new file mode 100644
index 0000000..d84b299
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/IfsInventoryQuantity.java
@@ -0,0 +1,210 @@
+package com.ruoyi.inspect.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("ifs_inventory_quantity")
+@ExcelIgnoreUnannotated
+public class IfsInventoryQuantity  implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    @ApiModelProperty("鍩�")
+    private String contract;
+
+    @ExcelProperty(index = 13, value = "璁㈠崟鍙�")
+    @ApiModelProperty("璁㈠崟鍙�")
+    private String orderNo;
+
+    @ApiModelProperty("琛屽彿")
+    private String lineNo;
+
+    @ApiModelProperty("涓嬭揪鍙�")
+    private String releaseNo;
+
+    @ApiModelProperty("鎺ユ敹鍙�")
+    private Integer receiptNo;
+
+    @ExcelProperty(index = 3, value = "闆朵欢鍙�")
+    @ApiModelProperty("闆朵欢鍙�")
+    private String partNo;
+
+    @ExcelProperty(index = 4, value = "闆朵欢鎻忚堪")
+    @ApiModelProperty("闆朵欢鎻忚堪")
+    private String partDesc;
+
+    @ApiModelProperty("鐘舵�佹弿杩�(IFS鍘熸湰鎷夊彇鐨勭姸鎬�)")
+    private String status;
+
+    @ApiModelProperty("鐘舵��(IFS鍘熸湰鎷夊彇鐨勭姸鎬�)")
+    private String statusDb;
+
+    @ExcelProperty(index = 11, value = "鎶佃揪鐨勯噰璐暟閲�")
+    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
+    private BigDecimal qtyArrived;
+
+    @ApiModelProperty("宸叉楠岀殑璐拱鏁伴噺")
+    private BigDecimal qtyInspected;
+
+    @ApiModelProperty("瑕佹楠岀殑閲囪喘鏁伴噺")
+    private BigDecimal qtyToInspect;
+
+    @ApiModelProperty("渚涘簲鍟嗙紪鍙�")
+    private String supplierId;
+
+    @ExcelProperty(index = 5, value = "渚涘簲鍟嗗悕绉�")
+    @ApiModelProperty("渚涘簲鍟嗗悕绉�")
+    private String supplierName;
+
+    @ApiModelProperty("鎶佃揪鐨勫簱瀛樻暟閲�")
+    private BigDecimal invQtyInStore;
+
+    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
+    private BigDecimal purQtyInStore;
+
+    @ApiModelProperty("閰嶇疆鏍囪瘑")
+    private String configurationId;
+
+    @ApiModelProperty("鎵瑰彿")
+    private String lotBatchNo;
+
+    @ApiModelProperty("wdr鍙�")
+    private String waivDevRejNo;
+
+    @ApiModelProperty("娲诲姩搴忓垪")
+    private Integer activitySeq;
+
+    @ApiModelProperty("搴忓垪鍙�")
+    private String serialNo;
+
+    @ApiModelProperty("搴撲綅鍙�")
+    private String locationNo;
+
+    @ApiModelProperty("鐗堟湰鍙�")
+    private String engChgLevel;
+
+    @ApiModelProperty("鎺ユ敹浜�")
+    private String receiver;
+
+    @ApiModelProperty("鎺ユ敹浜哄鍚�")
+    private String receiverName;
+
+    @ApiModelProperty("閲囪喘鍛�")
+    private String buyerCode;
+
+    @ApiModelProperty("閲囪喘鍛樺鍚�")
+    private String buyerName;
+
+    @ApiModelProperty("瀹為檯鍒拌揣鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime arriveDate;
+
+    @ApiModelProperty("瀹為檯浜よ揣鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime deliveryDate;
+
+    @ApiModelProperty("鐢熶骇鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime productDate;
+
+    @ApiModelProperty("澶辨晥鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime invalidDate;
+
+
+    @ApiModelProperty("瀹℃壒鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime approvedDate;
+
+    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜�")
+    private String reqCeater;
+
+    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜哄鍚�")
+    private String reqCeaterName;
+
+    @ApiModelProperty("閲囪喘璁㈠崟琛屽娉�")
+    private String lineRemarks;
+
+    @ExcelProperty(index = 12, value = "鍗曚綅")
+    @ApiModelProperty("鍗曚綅")
+    private String buyUnitMeas;
+
+    @ApiModelProperty("鏄惁涓篿fs鎷夊彇,0 鍚�, 1鏄�")
+    private Integer isSource;
+
+    private Integer number;
+
+
+    @ApiModelProperty("鐘舵��: 0:寰呮姤妫�, 1:寰呮楠�, :宸插鏍�")
+    private Integer state;
+
+    @ApiModelProperty("鎺ユ敹鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime receiverDate;
+
+    @ApiModelProperty("鏄惁涓洪娆″嚭鐜� 0 鍚� 1 鏄�")
+    private Integer isFirst;
+
+    @ApiModelProperty("鐩爣搴撲綅鍙�")
+    private String toLocation;
+
+    @ApiModelProperty("鏄惁鏄姤妫� 0 鍚� 1 鏄�")
+    private Integer isInspect;
+
+    @ApiModelProperty("鎶ユ浜�")
+    private String declareUser;
+
+
+    @ApiModelProperty("鎶ユ浜篿d")
+    private Integer declareUserId;
+
+    @ApiModelProperty("鍗曚綅")
+    private String partUnit;
+
+    @ApiModelProperty("浜т笟閾炬娴嬫暟鎹�")
+    private String industryChain;
+
+    @ApiModelProperty("鎶ユ鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime declareDate;
+
+    @ApiModelProperty("鏄惁鍗″彲浠ュ搴︽楠� 0 鍚� 1 鏄�")
+    private Integer isQuarter;
+
+    // 淇敼鍚庣殑
+    @ExcelProperty(index = 1, value = "鎵瑰彿")
+    @ApiModelProperty("鎵瑰彿")
+    private String updateBatchNo;
+
+    @ApiModelProperty("鏄惁缁撴潫, 0鍚�, 1鏄�")
+    private Integer isFinish;
+
+    @ApiModelProperty("鏄惁鏄摐鍗曚笣, 0鍚�, 1鏄�")
+    private Integer isCopper;
+
+    // 鍚堟牸鐘舵��,: 0 妫�楠屼腑, 1鍚堟牸, 2涓嶅悎鏍�, 3鏈笅鍗�,4璁╂鏀捐
+    @ApiModelProperty("妫�楠岀姸鎬�")
+    private Integer inspectStatus;
+
+    @ApiModelProperty("鏄惁閲囪喘璁㈠崟鐧昏: 0鍚�, 1:鏄�")
+    private Integer isRegister;
+
+    @ApiModelProperty("鏄惁淇敼杩囨壒鍙�: 0鍚�, 1:鏄�")
+    private Integer isUpdateBatch;
+
+    // 鏄惁鏄繃鏈熸潗鏂�: 0鍚�, 1:鏄�"
+    @ApiModelProperty("鐗╂枡绫诲瀷")
+    private Integer isExpire;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/InsSample1.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/InsSample1.java
new file mode 100644
index 0000000..79b048f
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/InsSample1.java
@@ -0,0 +1,123 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 妫�楠屾牱鍝�
+ * @TableName ins_sample
+ */
+@TableName(value ="ins_sample")
+@Data
+public class InsSample1 implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 1锛氬悎鏍� 0锛氫笉鍚堟牸
+     */
+    private Integer insResult;
+
+    /**
+     * 澶栭敭锛歩ns_order琛╥d
+     */
+    private Integer insOrderId;
+
+    /**
+     * 閰嶅鏍峰搧鍨嬪彿
+     */
+    private String joinModel;
+
+    /**
+     * 閰嶅鏍峰搧鍚嶇О
+     */
+    private String joinName;
+
+    /**
+     * 閰嶅鏍峰搧鏁伴噺
+     */
+    private Integer joinNum;
+
+    /**
+     * 鏍峰搧缂栫爜
+     */
+    private String sampleCode;
+
+    /**
+     * 妫�楠屽伐鍘�
+     */
+    private String factory;
+
+    /**
+     * 瀹為獙瀹ゅ悕绉�
+     */
+    private String laboratory;
+
+    /**
+     * 鏍峰搧绫诲瀷
+     */
+    private String sampleType;
+
+    /**
+     * 鏍峰搧鍚嶇О
+     */
+    private String sample;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String model;
+
+    /**
+     * 妫�楠岀姸鎬�(0锛氬緟妫�楠�1:妫�楠屼腑 2:宸叉楠�3锛氬緟澶嶆牳4锛氬鏍告湭閫氳繃5锛氬鏍搁�氳繃)
+     */
+    private Integer insState;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+    private Integer standardMethodListId;
+
+    @ApiModelProperty("鏍峰搧鍗曚綅")
+    private String unit;
+
+    private Integer cellId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    private Integer parentId;
+
+    @ApiModelProperty("鏁伴噺")
+    private Integer quantity;
+
+    @ApiModelProperty("鐗规畩鏍囧噯鏂规硶")
+    private String specialStandardMethod;
+
+    @TableField(select = false,exist = false)
+    private Integer num=1;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/Laboratory.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/Laboratory.java
new file mode 100644
index 0000000..ac72303
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/Laboratory.java
@@ -0,0 +1,62 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 瀹為獙瀹ょ鐞�(Laboratory)琛ㄥ璞�
+ */
+@TableName(value = "laboratory")
+@Data
+@NoArgsConstructor
+public class Laboratory  implements Serializable {
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "瀹為獙瀹ゅ悕绉�")
+    private String laboratoryName;
+
+    @ApiModelProperty(value = "鍦烘墍缂栫爜")
+    private String laboratoryNumber;
+
+    @ApiModelProperty(value = "瀹為獙瀹や唬鍙�")
+    private String laboratoryCode;
+
+    @ApiModelProperty(value = "璐熻矗浜虹數璇�")
+    private String phoneNumber;
+
+    @ApiModelProperty(value = "璐熻矗浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private String head;
+
+    @ApiModelProperty(value = "鍦板潃")
+    private String address;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createUserName;
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/Product.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/Product.java
new file mode 100644
index 0000000..1d8f47f
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/Product.java
@@ -0,0 +1,57 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 浜у搧琛�
+ * @TableName product
+ */
+@TableName(value ="product")
+@Data
+public class Product  implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 浜у搧鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 浜у搧鍚嶇ОEN
+     */
+    private String nameEn;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 澶栭敭锛歴tructure_test_object琛╥d
+     */
+    private Integer objectId;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/ProductPart.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/ProductPart.java
new file mode 100644
index 0000000..f7eef84
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/ProductPart.java
@@ -0,0 +1,49 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("product_part")
+public class ProductPart implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("浜у搧id")
+    private Integer productId;
+
+    @ApiModelProperty("闆朵欢鍙�")
+    private String partNo;
+
+    @ApiModelProperty("棰滆壊")
+    private String color;
+
+    @ApiModelProperty("鑹叉爣")
+    private String colorCode;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/ProductSupplierDensity.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/ProductSupplierDensity.java
new file mode 100644
index 0000000..e0a13a9
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/ProductSupplierDensity.java
@@ -0,0 +1,57 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 浜у搧鍘傚瀵嗗害缁戝畾琛�
+ *
+ * @author zhuo
+ * @since 2024-09-19
+ */
+@Data
+@TableName("product_supplier_density")
+public class ProductSupplierDensity implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("浜у搧id")
+    private Integer productId;
+
+    @ApiModelProperty("鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鍘傚鍚嶇О")
+    private String supplierName;
+
+    @ApiModelProperty("瀵嗗害鍊�")
+    private String densityValue;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/Seal.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/Seal.java
new file mode 100644
index 0000000..9008197
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/Seal.java
@@ -0,0 +1,43 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鍗扮珷绠$悊(Laboratory)琛ㄥ璞�
+ */
+
+@TableName(value = "seal")
+@Data
+public class Seal  implements Serializable {
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "瀹為獙瀹d")
+    private Integer labId;
+
+    @TableField(exist=false)
+    @ApiModelProperty(value = "瀹為獙瀹ゅ悕绉�")
+    private String laboratoryName;
+
+    @ApiModelProperty(value = "鍗扮珷鍥剧墖")
+    private String address;
+
+    @ApiModelProperty(value = "鍗扮珷绫诲瀷")
+    private String type;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethod.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethod.java
new file mode 100644
index 0000000..1c31147
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethod.java
@@ -0,0 +1,85 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯鏂规硶
+ * @TableName standard_method
+ */
+@TableName(value ="standard_method")
+@Data
+public class StandardMethod implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    private String field;
+
+    @ApiModelProperty("妫�楠屽璞�")
+    private String structureTestObjectId;
+
+    /**
+     * 鏍囧噯缂栧彿
+     */
+    @ApiModelProperty(value = "鏍囧噯缂栧彿")
+    private String code;
+
+    /**
+     * 鏍囧噯鏂规硶
+     */
+    @ApiModelProperty(value = "鏍囧噯鎻忚堪")
+    private String name;
+
+    @ApiModelProperty(value = "鏍囧噯鎻忚堪EN")
+    private String nameEn;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "璧勮川")
+    private String qualificationId;
+
+    @ApiModelProperty(value = "鏄惁浜у搧鏍囧噯")
+    private Integer isProduct;
+
+    @ApiModelProperty(value = "鏄惁鍚敤")
+    private Integer isUse;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @TableField(exist = false,select = false)
+    private String createUserName;
+
+    @ApiModelProperty(value = "鏇存柊浜�")
+    @TableField(exist = false,select = false)
+    private String updateUserName;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java
new file mode 100644
index 0000000..bbc0cc4
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java
@@ -0,0 +1,83 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�
+ * @TableName standard_method_list
+ */
+@TableName(value ="standard_method_list")
+@Data
+public class StandardMethodList implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鏍囧噯缂栧彿
+     */
+    @ApiModelProperty("鏍囧噯缂栧彿")
+    private String code;
+
+    /**
+     * 鏍囧噯鍚嶇О
+     */
+    @ApiModelProperty("鏍囧噯绉板彿")
+    private String name;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("宸ュ巶")
+    private String factory;
+
+    @ApiModelProperty("瀹為獙瀹�")
+    private String laboratory;
+
+    @ApiModelProperty("鏍峰搧鍒嗙被")
+    private String sampleType;
+
+    @ApiModelProperty("鏍峰搧")
+    private String sample;
+
+    @ApiModelProperty("鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(exist = false)
+    private String createUserName;
+    /**
+     *
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     *
+     */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+    /**
+     *
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java
new file mode 100644
index 0000000..b10c2ae
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java
@@ -0,0 +1,221 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯鏍戜笅鐨勬楠岄」鐩�
+ * @TableName standard_product_list
+ */
+@TableName(value ="standard_product_list")
+@Data
+public class StandardProductList implements Serializable {
+    /**
+     * 涓婚敭id
+     */
+    @TableId(value = "id",type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 妫�楠岄」
+     */
+    @ApiModelProperty("妫�楠岄」")
+    private String inspectionItem;
+
+    @ApiModelProperty("妫�楠岄」EN")
+    private String inspectionItemEn;
+
+    /**
+     * 妫�楠岄」灏忕被
+     */
+    @ApiModelProperty("妫�楠岄」灏忕被")
+    private String inspectionItemSubclass;
+
+    @ApiModelProperty("妫�楠岄」灏忕被EN")
+    private String inspectionItemSubclassEn;
+
+    /**
+     * 瀹為獙瀹�
+     */
+    @ApiModelProperty("瀹為獙瀹�")
+    private String laboratory;
+
+    @ApiModelProperty("瀛愬疄楠屽")
+    private String sonLaboratory;
+
+    /**
+     * 璁¢噺鍗曚綅
+     */
+    @ApiModelProperty("璁¢噺鍗曚綅")
+    private String unit;
+
+    /**
+     * 鍗曚环(鍏�)
+     */
+    @ApiModelProperty("鍗曚环")
+    private String price;
+
+    /**
+     * 宸ユ椂(H)
+     */
+    @ApiModelProperty("宸ユ椂")
+    private String manHour;
+
+    /**
+     * 宸ユ椂鍒嗙粍
+     */
+    @ApiModelProperty("宸ユ椂鍒嗙粍")
+    private String manHourGroup;
+
+    /**
+     * 妫�楠岄」绫诲瀷
+     */
+    @ApiModelProperty("妫�楠岄」绫诲瀷")
+    private String inspectionItemType;
+
+    /**
+     * 妫�楠屽�肩被鍨�
+     */
+    @ApiModelProperty("妫�楠屽�肩被鍨�")
+    private String inspectionValueType;
+
+    /**
+     * 妫�楠屾鏁�
+     */
+    @ApiModelProperty("妫�楠屾鏁�")
+    private Integer checkoutNumber;
+
+    /**
+     * 鍖洪棿
+     */
+    @ApiModelProperty("鍖洪棿")
+    private String section;
+
+    /**
+     * 鍖洪棿
+     */
+    @ApiModelProperty("鑺暟鍖洪棿")
+    private String cores;
+
+    /**
+     * 鏂规硶
+     */
+    @ApiModelProperty("鏂规硶鍒楄〃")
+    private String method;
+
+    @ApiModelProperty("鏂规硶")
+    private String methodS;
+
+    /**
+     * 棰勮鏃堕棿(澶�)
+     */
+    @ApiModelProperty("棰勮鏃堕棿")
+    private Integer manDay;
+
+    /**
+     * 鐗规畩鏍囪瘑
+     */
+    @ApiModelProperty("鐗规畩鏍囪瘑")
+    private String bsm;
+
+    /**
+     * 瑕佹眰鍊�
+     */
+    @ApiModelProperty("瑕佹眰鍊�")
+    private String ask;
+
+    @ApiModelProperty("瑕佹眰鎻忚堪")
+    private String tell;
+
+    /**
+     * 澶栭敭锛氭爣鍑嗘柟娉昳d
+     */
+    @ApiModelProperty("鏍囧噯鏂规硶id")
+    private Integer standardMethodListId;
+
+    @ApiModelProperty("宸ュ巶")
+    private String factory;
+
+    @ApiModelProperty("鏍峰搧鍒嗙被")
+    private String sampleType;
+
+    @ApiModelProperty("鏍峰搧")
+    private String sample;
+
+    @ApiModelProperty("鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鍨嬪彿")
+    private Integer templateId;
+
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+    /**
+     *
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     *
+     */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+    /**
+     *
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("1锛氭湁鏁� 0锛氭棤鏁�")
+    private Integer state;
+
+    private String dic;
+
+    private String tree;
+
+    private Integer structureItemParameterId;
+
+    @ApiModelProperty(value = "妫�楠岄」鍒嗙被")
+    private String inspectionItemClass;
+
+    @ApiModelProperty(value = "妫�楠岄」鍒嗙被EN")
+    private String inspectionItemClassEn;
+
+    @ApiModelProperty(value = "鏉′欢")
+    private String radius;
+
+    @ApiModelProperty(value = "鏉′欢鍒楄〃")
+    private String radiusList;
+
+    @ApiModelProperty(value = "鏀惰垂鏍囧噯(鍏�/娆�)")
+    private String rates;
+
+    @ApiModelProperty(value = "绱㈠紩椤哄簭")
+    private Integer sort;
+
+    /**
+     * 瀵间綋鏉愯川
+     */
+    @ApiModelProperty("瀵间綋鏉愯川")
+    private String conductorMaterial;
+
+    /**
+     * 瀵间綋绫诲瀷
+     */
+    @ApiModelProperty("瀵间綋绫诲瀷")
+    private String conductorType;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductListSupplierAsk.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductListSupplierAsk.java
new file mode 100644
index 0000000..ad0b683
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductListSupplierAsk.java
@@ -0,0 +1,58 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 妫�楠岄」鐩巶瀹跺瘑搴︾粦瀹氳〃
+ *
+ * @author zhuo
+ * @since 2024-09-23
+ */
+@TableName(value ="standard_product_list_supplier_ask")
+@Data
+public class StandardProductListSupplierAsk {
+
+    @TableId(type = IdType.AUTO)
+    private Integer supplierAskId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("妫�楠岄」鐩甶d")
+    private Long productListId;
+
+    @ApiModelProperty("鍘傚鍚嶇О")
+    private String supplierName;
+
+    @ApiModelProperty("瑕佹眰鍊�")
+    private String ask;
+
+    @ApiModelProperty("瑕佹眰鎻忚堪")
+    private String tell;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java
new file mode 100644
index 0000000..04b5c0b
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java
@@ -0,0 +1,76 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯妯℃澘
+ * @TableName standard_template
+ */
+@TableName(value ="standard_template")
+@Data
+public class StandardTemplate  implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 妯℃澘鍚嶇О
+     */
+    @ApiModelProperty("妯℃澘鍚嶇О")
+    private String name;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    /**
+     * 妯℃澘缁撴瀯
+     */
+    private String thing;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+    /**
+     *
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     *
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+    /**
+     *
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓鐢ㄦ埛")
+    @TableField(exist = false)
+    private String createUserName;
+
+    @ApiModelProperty("鏇存柊鐢ㄦ埛")
+    @TableField(exist = false)
+    private String updateUserName;
+
+    /**
+     * 妯℃澘缂栧彿
+     */
+    @ApiModelProperty("妯℃澘缂栧彿")
+    private String number;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java
new file mode 100644
index 0000000..fe40352
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java
@@ -0,0 +1,96 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+* 鏍囧噯鏍�
+* @TableName standard_tree
+*/
+@TableName(value ="standard_tree")
+@Data
+public class StandardTree implements Serializable {
+
+    /**
+    *
+    */
+    @NotNull(message="[]涓嶈兘涓虹┖")
+    @ApiModelProperty("")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+    /**
+    * 宸ュ巶
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("宸ュ巶")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String factory;
+    /**
+    * 瀹為獙瀹�
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("瀹為獙瀹�")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String laboratory;
+    /**
+    * 鏍峰搧澶х被
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("鏍峰搧澶х被")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String sampleType;
+    /**
+    * 鏍峰搧
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("鏍峰搧")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String sample;
+    /**
+    * 鍨嬪彿
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("鍨嬪彿")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String model;
+    /**
+    *
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+    /**
+    *
+    */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+    *
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+    /**
+    *
+    */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 淇敼鍓嶅悕绉�
+     */
+    @TableField(exist = false,select = false)
+    private String oldModel;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureItemParameter.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureItemParameter.java
new file mode 100644
index 0000000..6325cc8
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureItemParameter.java
@@ -0,0 +1,121 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄥ璞�
+ *
+ * @author makejava
+ * @since 2024-02-26 16:21:17
+ */
+@TableName(value ="structure_item_parameter")
+@Data
+public class StructureItemParameter implements Serializable {
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "妫�楠岄」")
+    private String inspectionItem;
+
+    @ApiModelProperty(value = "妫�楠岄」EN")
+    private String inspectionItemEn;
+
+    @ApiModelProperty(value = "妫�楠屽瓙椤�")
+    private String inspectionItemSubclass;
+
+    @ApiModelProperty(value = "妫�楠屽瓙椤笶N")
+    private String inspectionItemSubclassEn;
+
+    @ApiModelProperty(value = "妫�楠屽璞�")
+    private String sample;
+
+    @ApiModelProperty(value = "鍗曚环(鍏�)")
+    private String price;
+
+    @ApiModelProperty(value = "鍦烘墍")
+    private String laboratory;
+
+    @ApiModelProperty(value = "璇曢獙瀹�")
+    private String sonLaboratory;
+
+    @ApiModelProperty(value = "瑕佹眰鎻忚堪")
+    private String askTell;
+
+    @ApiModelProperty(value = "瑕佹眰鍊�")
+    private String ask;
+
+    @ApiModelProperty(value = "璁¢噺鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty(value = "璇曢獙鏂规硶")
+    private String method;
+
+    @ApiModelProperty(value = "宸ユ椂(H)")
+    private Double manHour;
+
+    @ApiModelProperty(value = "棰勮鏃堕棿(H)")
+    private Integer manDay;
+
+    @ApiModelProperty(value = "宸ユ椂鍒嗙粍")
+    private String manHourGroup;
+
+    @ApiModelProperty(value = "妫�楠岄」绫诲瀷")
+    private String inspectionItemType;
+
+    @ApiModelProperty(value = "妫�楠屽�肩被鍨�")
+    private String inspectionValueType;
+
+    @ApiModelProperty(value = "妫�楠屾鏁�")
+    private Integer checkoutNumber;
+
+    @ApiModelProperty(value = "鍖洪棿")
+    private String section;
+
+    @ApiModelProperty(value = "鐗规畩鏍囪瘑")
+    private String bsm;
+
+    @ApiModelProperty(value = "鍘熷璁板綍妯℃澘")
+    private Integer templateId;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "瀛楀吀绫诲瀷")
+    private String dic;
+
+    @ApiModelProperty(value = "妫�楠岄」鍒嗙被")
+    private String inspectionItemClass;
+
+    @ApiModelProperty(value = "妫�楠岄」鍒嗙被EN")
+    private String inspectionItemClassEn;
+
+    @ApiModelProperty(value = "鏉′欢")
+    private String radiusList;
+
+    @ApiModelProperty(value = "鏀惰垂鏍囧噯(鍏�/娆�)")
+    private String rates;
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureTestObject.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureTestObject.java
new file mode 100644
index 0000000..4403363
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureTestObject.java
@@ -0,0 +1,63 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 妫�娴嬪璞�(StructureTestObject)琛ㄥ璞�
+ *
+ * @author makejava
+ * @since 2024-02-26 17:36:41
+ */
+@TableName(value ="structure_test_object")
+@Data
+public class StructureTestObject implements Serializable {
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "鍦烘墍")
+    private Integer laboratoryId;
+
+    @ApiModelProperty(value = "妫�楠屽璞�")
+    private String specimenName;
+
+    @ApiModelProperty(value = "妫�楠屽璞N")
+    private String specimenNameEn;
+
+    @ApiModelProperty(value = "瀵硅薄浠e彿")
+    private String code;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鎺掑簭")
+    private Integer sort;
+
+    //"瀵硅薄绫诲瀷, 1:鍘熸潗鏂�, 2:鎴愬搧, 3:杈呮潗"
+    @ApiModelProperty(value = "瀵硅薄绫诲瀷")
+    private String objectType;
+
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureTestObjectPart.java b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureTestObjectPart.java
new file mode 100644
index 0000000..7a6aa14
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/pojo/StructureTestObjectPart.java
@@ -0,0 +1,56 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 妫�楠屽璞¢浂浠惰〃(StructureTestObjectPart)$desc
+ *
+ * @author makejava
+ * @since 2024-08-07 10:10:30
+ */
+@TableName(value ="structure_test_object_part")
+@Data
+public class StructureTestObjectPart implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("妫�楠屽璞d")
+    private Integer testObjectId;
+
+    @ApiModelProperty("闆朵欢鍙�")
+    private String partNo;
+
+    @ApiModelProperty("棰滆壊")
+    private String color;
+
+    @ApiModelProperty("鑹叉爣")
+    private String colorCode;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+
+    @ApiModelProperty(value = "淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/CapacityScopeService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/CapacityScopeService.java
new file mode 100644
index 0000000..f988c0f
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/CapacityScopeService.java
@@ -0,0 +1,46 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.PageTestObjectDto;
+import com.ruoyi.inspect.dto.TestItemDto;
+
+import com.ruoyi.inspect.pojo.StructureItemParameter;
+import com.ruoyi.inspect.pojo.StructureTestObject;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2024-02-26 16:21:17
+ */
+public interface CapacityScopeService extends IService<StructureItemParameter> {
+
+    IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter);
+
+    int addItemParameter(StructureItemParameter itemParameter);
+
+    int delItemParameter(Integer id);
+
+    int upItemParameter(StructureItemParameter itemParameter);
+
+    IPage<PageTestObjectDto> selectTestObjectList(Page page, PageTestObjectDto pageTestObjectDto);
+
+    int addTestObject(StructureTestObject testObject);
+
+    int delTestObject(Integer id);
+
+    int upTestObject(StructureTestObject testObject);
+
+    List<StructureTestObject> selectTestObjectByName();
+
+    //璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)
+    List<Map<String, Object>> getInsProduction();
+
+    List<TestItemDto> getItemTree();
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/CertificationService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/CertificationService.java
new file mode 100644
index 0000000..78398ed
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/CertificationService.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.Certification;
+
+public interface CertificationService extends IService<Certification> {
+    //鏌ヨ璧勮川鏄庣粏鍒楄〃
+    IPage<Certification> getCertificationDetail(Page page, Certification certification);
+
+    //娣诲姞璧勮川鏄庣粏鍒楄〃
+    int addCertificationDetail(Certification certification);
+
+    //鍒犻櫎璧勮川鏄庣粏鍒楄〃
+    int delCertificationDetail(String ids);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/LaboratoryService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/LaboratoryService.java
new file mode 100644
index 0000000..e86f89b
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/LaboratoryService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.Laboratory;
+
+import java.util.List;
+
+/**
+ * 瀹為獙瀹ょ鐞�(Laboratory)琛ㄦ湇鍔℃帴鍙�
+ */
+public interface LaboratoryService extends IService<Laboratory> {
+
+    IPage<Laboratory> selectItemParameter(Page page, Laboratory itemParameter);
+
+    int addParameter(Laboratory itemParameter);
+
+    int delParameter(Integer id);
+
+    int upParameter(Laboratory itemParameter);
+
+    List<Laboratory> obtainItemParameterList();
+
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/ProductPartService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/ProductPartService.java
new file mode 100644
index 0000000..b1127b8
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/ProductPartService.java
@@ -0,0 +1,14 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.ProductPart;
+
+public interface ProductPartService extends IService<ProductPart> {
+
+    IPage<ProductPart> selectByProductId(IPage<ProductPart> page,ProductPart productPart);
+
+    void addProductPart(ProductPart productPart);
+
+    void updateProductPartById(ProductPart productPart);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/ProductService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/ProductService.java
new file mode 100644
index 0000000..c55af4f
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/ProductService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.ProductDTO1;
+import com.ruoyi.inspect.excel.StructureTestObjectData;
+import com.ruoyi.inspect.pojo.Product;
+
+import java.util.List;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恜roduct(浜у搧琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-04-26 01:11:02
+*/
+public interface ProductService extends IService<Product> {
+
+    IPage<Product> selectProductListByObjectId(Page page, ProductDTO1 productDto);
+
+    int addProduct(Product product);
+
+    int upProduct(Product product);
+
+    int delProduct(Integer id);
+
+    void importPartExcel(List<StructureTestObjectData> list);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/ProductSupplierDensityService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/ProductSupplierDensityService.java
new file mode 100644
index 0000000..d8b8e83
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/ProductSupplierDensityService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.ProductSupplierDensity;
+
+/**
+ * 浜у搧鍘傚瀵嗗害缁戝畾琛�
+ *
+ * @author zhuo
+ * @since 2024-09-19
+ */
+public interface ProductSupplierDensityService extends IService<ProductSupplierDensity> {
+
+    IPage<ProductSupplierDensity> selectByProductId(Page page, ProductSupplierDensity supplierDensity);
+
+    void addProductSupplierDensity(ProductSupplierDensity supplierDensity);
+
+    void updateProductSupplierDensity(ProductSupplierDensity supplierDensity);
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/SealService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/SealService.java
new file mode 100644
index 0000000..00d5ada
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/SealService.java
@@ -0,0 +1,23 @@
+package com.ruoyi.inspect.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.Laboratory;
+import com.ruoyi.inspect.pojo.Seal;
+
+import java.util.List;
+
+public interface SealService extends IService<Seal> {
+
+    //鏂板
+    int addSeal(Seal seal);
+
+    //鏌ヨ
+    IPage<Seal> selectSeal(Page page, Seal seal);
+
+    List<Laboratory>  Laboratory(Integer id);
+
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StandardMethodListService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardMethodListService.java
new file mode 100644
index 0000000..2c0c066
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardMethodListService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.StandardMethodList;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_method_list(鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-03-04 13:44:04
+*/
+public interface StandardMethodListService extends IService<StandardMethodList> {
+
+    int addStandardMethodList(Integer standardId, String tree);
+
+    Map<String, List<?>> selectsStandardMethodByFLSSM(String tree);
+
+    Map<String, List<?>> selectsStandardMethodByFLSSM2(String tree);
+
+    int delStandardMethodByFLSSM(Integer id);
+
+    List<StandardMethodList> selectStandardMethodEnum();
+
+    Integer getStandardMethodId(String code);
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StandardMethodService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardMethodService.java
new file mode 100644
index 0000000..a2e7678
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardMethodService.java
@@ -0,0 +1,30 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.StandardMethod;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_method(鏍囧噯鏂规硶)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-03-03 19:21:41
+*/
+public interface StandardMethodService extends IService<StandardMethod> {
+
+    IPage<StandardMethod> selectStandardMethodList(Page page, StandardMethod standardMethod);
+
+    List<StandardMethod> selectStandardMethods();
+
+    int addStandardMethod(StandardMethod standardMethod);
+
+    int delStandardMethod(Integer id);
+
+    int upStandardMethod(StandardMethod standardMethod);
+
+    void inputExcel(MultipartFile file) throws IOException;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListService.java
new file mode 100644
index 0000000..e7fcbae
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListService.java
@@ -0,0 +1,67 @@
+package com.ruoyi.inspect.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.CopyStandardProductListDto;
+import com.ruoyi.inspect.dto.InsSampleReceiveDto;
+import com.ruoyi.inspect.dto.ResetTreeDragDTO;
+import com.ruoyi.inspect.pojo.StandardProductList;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恠tandard_product_list(鏍囧噯鏍戜笅鐨勬楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2024-03-05 10:33:29
+ */
+public interface StandardProductListService extends IService<StandardProductList> {
+
+    int upStandardProductList(StandardProductList list);
+
+    int delStandardProduct(JSONArray list);
+
+    List<StandardProductList> selectStandardProductList(InsSampleReceiveDto insSample);
+
+    Map<String, Object> selectStandardProductListByMethodId(Integer id, String tree, Integer page);
+
+    IPage<StandardProductList> selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items);
+
+    Map<String, List<?>> selectStandardProductEnumByMethodId(Integer id, String tree, String item);
+
+    boolean updateSection(StandardProductList list);
+
+    /**
+     * 鏍囧噯搴撴嫋鎷�
+     * @param resetTreeDragDTO
+     */
+    void resetTreeDrag(ResetTreeDragDTO resetTreeDragDTO);
+
+    /**
+     * 鏍囧噯搴撴嫋鎷�
+     * @param standardProductLists
+     */
+    void resetTreeDragBatch(List<StandardProductList> standardProductLists);
+
+    /**
+     * 妫�楠岄」瑕佹眰鍊煎姣�
+     * @param copyStandardProductListDto
+     * @return
+     */
+    List<StandardProductList> copyStandardProductList(CopyStandardProductListDto copyStandardProductListDto);
+
+    /**
+     * 妫�楠岄」瑕佹眰鍊煎姣斾竴涓�
+     * @param copyStandardProductListDto
+     * @return
+     */
+    List<StandardProductList> copyStandardProductOne(CopyStandardProductListDto copyStandardProductListDto);
+
+    /**
+     * 妫�楠岄」澶嶅埗鎺掑簭
+     * @param copyStandardProductListDto
+     * @return
+     */
+    boolean copyStandardProductSort(CopyStandardProductListDto copyStandardProductListDto);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListService2.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListService2.java
new file mode 100644
index 0000000..1f64bae
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListService2.java
@@ -0,0 +1,13 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.StandardProductList;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_product_list(鏍囧噯鏍戜笅鐨勬楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-03-05 10:33:29
+*/
+public interface StandardProductListService2 extends IService<StandardProductList> {
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListSupplierAskService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListSupplierAskService.java
new file mode 100644
index 0000000..40267e9
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardProductListSupplierAskService.java
@@ -0,0 +1,23 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.StandardProductListSupplierAsk;
+
+import java.util.List;
+
+/**
+ * 妫�楠岄」鐩巶瀹跺瘑搴︾粦瀹氳〃
+ *
+ * @author makejava
+ * @since 2024-09-23
+ */
+public interface StandardProductListSupplierAskService extends IService<StandardProductListSupplierAsk> {
+
+    List<StandardProductListSupplierAsk> selectByProductId(StandardProductListSupplierAsk supplierAsk);
+
+    Integer addProductSupplierAsk(StandardProductListSupplierAsk supplierAsk);
+
+    Integer updateProductSupplierAsk(StandardProductListSupplierAsk supplierAsk);
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StandardTemplateService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardTemplateService.java
new file mode 100644
index 0000000..1240e66
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardTemplateService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.StandardTemplate;
+
+import java.util.List;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_template(鏍囧噯妯℃澘)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-03-11 13:47:52
+*/
+public interface StandardTemplateService extends IService<StandardTemplate> {
+
+    IPage<StandardTemplate> selectStandardTemplatePageList(Page page, StandardTemplate standardTemplate);
+
+    int addStandardTemplate(StandardTemplate standardTemplate);
+
+    int upStandardTemplate(StandardTemplate standardTemplate);
+
+    int delStandardTemplate(Integer id);
+
+    List<StandardTemplate> getStandardTemplate();
+
+    String getStandTempThingById(Integer templateId);
+
+    String getStandTempNameById(Integer templateId);
+
+    StandardTemplate getStandTempIdByName(String name);
+
+    int copyStandardTemplate(StandardTemplate newTemplate);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StandardTreeService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardTreeService.java
new file mode 100644
index 0000000..62da5e3
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StandardTreeService.java
@@ -0,0 +1,52 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.FactoryDto;
+import com.ruoyi.inspect.dto.SampleTypeDto;
+import com.ruoyi.inspect.pojo.StandardTree;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_tree(鏍囧噯鏍�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-03-01 15:06:44
+*/
+public interface StandardTreeService extends IService<StandardTree> {
+
+    List<FactoryDto> selectStandardTreeList();
+
+
+    int addStandardTree(StandardTree standardTree);
+
+    int delStandardTree(String tree);
+
+    int addStandardProduct(String ids, String tree);
+
+    List<SampleTypeDto> getStandardTree2();
+
+    int upStandardProducts(Map<String, Object> product);
+
+    List<StandardTree> getStandTreeBySampleType(String laboratory, String sampleType);
+
+    void inExcelOfTree(MultipartFile file);
+
+    void resetTreeOfPrice(String tree, Integer standardId);
+
+    void resetTreeOfHour(String tree, Integer standardId);
+
+    void resetTreeOfAsk(String tree, Integer standardId);
+
+    void importWorkstationExcel(MultipartFile file);
+
+    /**
+     * 鏍囧噯鏁版帓搴�
+     * @param list
+     * @return
+     */
+    boolean updateTreeSort(List<FactoryDto> list);
+
+    int updateStandardTree(StandardTree standardTree);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StructureItemParameterService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StructureItemParameterService.java
new file mode 100644
index 0000000..8d2cedf
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StructureItemParameterService.java
@@ -0,0 +1,8 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.StructureItemParameter;
+
+public interface StructureItemParameterService extends IService<StructureItemParameter> {
+    void removeNoSample(String sample);
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StructureTestObjectPartService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StructureTestObjectPartService.java
new file mode 100644
index 0000000..420d1ed
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StructureTestObjectPartService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.StructureTestObjectPart;
+
+/**
+ * 妫�楠屽璞¢浂浠惰〃
+ *
+ * @author zhuo
+ * @since 2024-08-07
+ */
+public interface StructureTestObjectPartService extends IService<StructureTestObjectPart> {
+
+    IPage<StructureTestObjectPart> selectByTestObjectId(Page page, StructureTestObjectPart structureTestObjectPart);
+
+    void addTestObjectPart(StructureTestObjectPart structureTestObjectPart);
+
+    void updateTestObjectPart(StructureTestObjectPart structureTestObjectPart);
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/StructureTestObjectService.java b/basic-server/src/main/java/com/ruoyi/inspect/service/StructureTestObjectService.java
new file mode 100644
index 0000000..74c115b
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/StructureTestObjectService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.StructureTestObject;
+
+/**
+ * 妫�娴嬪璞�(StructureTestObject)$desc
+ *
+ * @author makejava
+ * @since 2024-09-13 09:45:55
+ */
+public interface StructureTestObjectService extends IService<StructureTestObject> {
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/CapacityScopeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/CapacityScopeServiceImpl.java
new file mode 100644
index 0000000..bf763cf
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/CapacityScopeServiceImpl.java
@@ -0,0 +1,185 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.dto.PageTestObjectDto;
+import com.ruoyi.inspect.dto.TestItemDto;
+import com.ruoyi.inspect.mapper.*;
+import com.ruoyi.inspect.pojo.*;
+import com.ruoyi.inspect.service.CapacityScopeService;
+import com.ruoyi.inspect.service.StandardProductListService;
+import com.ruoyi.inspect.service.StructureItemParameterService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2024-02-26 16:21:17
+ */
+@Service
+@AllArgsConstructor
+public class CapacityScopeServiceImpl extends ServiceImpl<StructureItemParameterMapper, StructureItemParameter> implements CapacityScopeService {
+
+    private LaboratoryMapper laboratoryMapper;
+
+    private StructureItemParameterMapper structureItemParameterMapper;
+
+    private StructureTestObjectMapper structureTestObjectMapper;
+
+    private ProductMapper productMapper;
+
+    private StructureTestObjectPartMapper structureTestObjectPartMapper;
+
+    private ProductPartMapper productPartMapper;
+
+    private StandardProductListService standardProductListService;
+
+    private StandardTreeMapper standardTreeMapper;
+
+    private StructureItemParameterService structureItemParameterService;
+
+    @Override
+    public IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter) {
+       return structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter));
+    }
+
+    @Override
+    public int addItemParameter(StructureItemParameter itemParameter) {
+        if (itemParameter.getBsm().equals("")||itemParameter.getBsm()==null){
+            itemParameter.setBsm("0");
+        }
+        int insert = structureItemParameterMapper.insert(itemParameter);
+        return insert;
+    }
+
+    @Override
+    public int delItemParameter(Integer id) {
+        return structureItemParameterMapper.deleteById(id);
+    }
+
+    @Override
+    public int upItemParameter(StructureItemParameter itemParameter) {
+        return structureItemParameterMapper.updateById(itemParameter);
+    }
+
+    @Override
+    public IPage<PageTestObjectDto> selectTestObjectList(Page page, PageTestObjectDto pageTestObjectDto) {
+        String partNo = pageTestObjectDto.getPartNo();
+        pageTestObjectDto.setPartNo(null);
+        return structureTestObjectMapper.selectTestObjectList(page, QueryWrappers.queryWrappers(pageTestObjectDto),partNo);
+    }
+
+    @Override
+    public int addTestObject(StructureTestObject testObject) {
+        Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery().eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName()));
+        if(count.compareTo(0L) > 0){
+            throw new BaseException("妫�楠屽璞′笉鑳介噸澶�");
+        }
+
+        return structureTestObjectMapper.insert(testObject);
+    }
+
+    @Override
+    public int delTestObject(Integer id) {
+        // 浜у嚭妫�楠屽璞′骇鍝佺淮鎶�
+        structureTestObjectPartMapper.delete(Wrappers.<StructureTestObjectPart>lambdaQuery()
+                .eq(StructureTestObjectPart::getTestObjectId, id));
+
+        // 鍒犻櫎浜у搧缁存姢鐨勯浂浠剁粦瀹�
+        List<Product> products = productMapper.selectList(Wrappers.<Product>lambdaQuery()
+                .eq(Product::getObjectId, id));
+        List<Integer> productIds = products.stream().map(Product::getId).collect(Collectors.toList());
+        productPartMapper.delete(Wrappers.<ProductPart>lambdaQuery()
+                .in(ProductPart::getProductId, productIds));
+
+        // 鍒犻櫎浜у搧缁存姢
+        productMapper.delete(Wrappers.<Product>lambdaQuery()
+                .in(Product::getId, productIds));
+
+        return structureTestObjectMapper.deleteById(id);
+    }
+
+    @Override
+    public int upTestObject(StructureTestObject testObject) {
+        // 鏌ヨ鏃х殑妫�楠屽璞�
+        StructureTestObject oldTestObject = structureTestObjectMapper.selectById(testObject.getId());
+
+        if (!oldTestObject.getSpecimenName().equals(testObject.getSpecimenName())) {
+            // 鏌ヨ鎵�鏈夊璞′竴鏍风殑妫�楠岄」鐩�
+            List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
+                    .eq(StandardProductList::getSampleType, oldTestObject.getSpecimenName()));
+            if (CollectionUtils.isNotEmpty(standardProductLists)){
+                for (StandardProductList standardProductList : standardProductLists) {
+                    // 淇敼鎵�鏈夌殑瀵硅薄鍚嶇О鍜屾暟鍨嬬粨鏋�
+                    standardProductList.setSampleType(testObject.getSpecimenName());
+                    // 闇�瑕佹埅鍙栫涓夌骇, 閬垮厤涓夊洓绾у悕绉颁竴鏍蜂慨鏀归敊璇�
+                    String[] trees = standardProductList.getTree().split(" - ");
+                    trees[2] = testObject.getSpecimenName();
+                    List<String> list = CollUtil.newArrayList(trees);
+                    String newName = CollUtil.join(list, " - ");
+                    standardProductList.setTree(newName);
+                }
+                standardProductListService.updateBatchById(standardProductLists);
+            }
+            // 淇敼妫�楠岄」鐩弬鏁扮殑妫�楠屽璞�
+            // 鎷兼帴 ["object", 鏌ヨ妫�楠岄」鐩弬鏁颁慨鏀圭粦瀹氱殑妫�楠屽璞�
+            String format = "[\"{}\",";
+            String sampleOld = StrUtil.format(format, oldTestObject.getSpecimenName());
+            List<StructureItemParameter> itemParameterList = structureItemParameterService.list(Wrappers.<StructureItemParameter>lambdaQuery()
+                    .like(StructureItemParameter::getSample, sampleOld));
+            if (CollectionUtils.isNotEmpty(itemParameterList)) {
+                for (StructureItemParameter structureItemParameter : itemParameterList) {
+                    // 淇敼缁戝畾鐨勬牱鍝佸悕绉�
+                    String sampleNew = StrUtil.format(format, testObject.getSpecimenName());
+                    String sampleUp = structureItemParameter.getSample().replace(sampleOld, sampleNew);
+                    structureItemParameter.setSample(sampleUp);
+                }
+                structureItemParameterService.updateBatchById(itemParameterList);
+            }
+
+            // 淇敼鏍戠殑鍨嬪彿
+            standardTreeMapper.update(null, Wrappers.<StandardTree>lambdaUpdate()
+                    .eq(StandardTree::getSampleType, oldTestObject.getSpecimenName())
+                    .set(StandardTree::getSampleType, testObject.getSpecimenName()));
+        }
+
+        Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery()
+                .eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName())
+                .ne(StructureTestObject::getId, testObject.getId()));
+        if(count.compareTo(0L) > 0){
+            throw new BaseException("妫�楠屽璞′笉鑳介噸澶�");
+        }
+
+        return structureTestObjectMapper.updateById(testObject);
+    }
+
+    @Override
+    public List<StructureTestObject> selectTestObjectByName() {
+        return structureTestObjectMapper.selectList(Wrappers.<StructureTestObject>lambdaQuery().select(StructureTestObject::getSpecimenName,StructureTestObject::getId));
+    }
+
+    //璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)
+    @Override
+    public List<Map<String, Object>> getInsProduction() {
+        return structureItemParameterMapper.getInsProduction();
+    }
+
+    @Override
+    public List<TestItemDto> getItemTree() {
+        return structureItemParameterMapper.getItemTree();
+    }
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/CertificationServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/CertificationServiceImpl.java
new file mode 100644
index 0000000..4eb722a
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/CertificationServiceImpl.java
@@ -0,0 +1,45 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.mapper.CertificationMapper;
+import com.ruoyi.inspect.pojo.Certification;
+import com.ruoyi.inspect.service.CertificationService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class CertificationServiceImpl extends ServiceImpl<CertificationMapper, Certification> implements CertificationService {
+
+
+    private CertificationMapper certificationMapper;
+
+
+    //鏌ヨ璧勮川鏄庣粏鍒楄〃
+    @Override
+    public IPage<Certification> getCertificationDetail(Page page, Certification certification) {
+        return  certificationMapper.getCertificationDetail(page, QueryWrappers.queryWrappers(certification));
+    }
+
+    //娣诲姞璧勮川鏄庣粏鍒楄〃
+    @Override
+    public int addCertificationDetail(Certification certification) {
+        return certificationMapper.insert(certification);
+    }
+
+    //鍒犻櫎璧勮川鏄庣粏鍒楄〃
+    @Override
+    public int delCertificationDetail(String ids) {
+        List<Integer> list = JSON.parseArray(ids,Integer.class);
+        return certificationMapper.deleteBatchIds(list);
+    }
+
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/LaboratoryServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/LaboratoryServiceImpl.java
new file mode 100644
index 0000000..18c4318
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/LaboratoryServiceImpl.java
@@ -0,0 +1,53 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.mapper.LaboratoryMapper;
+import com.ruoyi.inspect.pojo.Laboratory;
+import com.ruoyi.inspect.service.LaboratoryService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 瀹為獙瀹ょ鐞�(Laboratory)琛ㄦ湇鍔″疄鐜扮被
+ */
+@Service
+@AllArgsConstructor
+public class LaboratoryServiceImpl extends ServiceImpl<LaboratoryMapper, Laboratory> implements LaboratoryService {
+
+
+    private LaboratoryMapper laboratoryMapper;
+
+    @Override
+    public IPage<Laboratory> selectItemParameter(Page page, Laboratory itemParameter) {
+        return laboratoryMapper.selectItemParameter(page, QueryWrappers.queryWrappers(itemParameter));
+    }
+
+    @Override
+    public int addParameter(Laboratory itemParameter) {
+        return laboratoryMapper.insert(itemParameter);
+    }
+
+    @Override
+    public int delParameter(Integer id) {
+        return laboratoryMapper.deleteById(id);
+    }
+
+    @Override
+    public int upParameter(Laboratory itemParameter) {
+        return laboratoryMapper.updateById(itemParameter);
+    }
+
+    @Override
+    public List<Laboratory> obtainItemParameterList() {
+        return laboratoryMapper.selectList(Wrappers.<Laboratory>lambdaQuery().select(Laboratory::getLaboratoryName, Laboratory::getId));
+    }
+
+
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductPartServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductPartServiceImpl.java
new file mode 100644
index 0000000..009b279
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductPartServiceImpl.java
@@ -0,0 +1,68 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.mapper.ProductPartMapper;
+import com.ruoyi.inspect.mapper.StructureTestObjectPartMapper;
+import com.ruoyi.inspect.pojo.ProductPart;
+import com.ruoyi.inspect.pojo.StructureTestObjectPart;
+import com.ruoyi.inspect.service.ProductPartService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+@Service
+@AllArgsConstructor
+public class ProductPartServiceImpl extends ServiceImpl<ProductPartMapper, ProductPart> implements ProductPartService {
+
+    private  ProductPartMapper productPartMapper;
+    private StructureTestObjectPartMapper structureTestObjectPartMapper;
+
+
+    @Override
+    public IPage<ProductPart> selectByProductId(IPage<ProductPart> page,ProductPart productPart) {
+        return productPartMapper.selectListByProductId(page, QueryWrappers.queryWrappers(productPart),productPart.getProductId());
+    }
+
+    @Override
+    public void addProductPart(ProductPart productPart) {
+        if (productPart.getProductId() == null) {
+            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
+        }
+        this.isPartNoExist(productPart.getPartNo(), productPart.getProductId(), null);
+        productPartMapper.insert(productPart);
+    }
+
+    @Override
+    public void updateProductPartById(ProductPart productPart) {
+        this.isPartNoExist(productPart.getPartNo(), productPart.getProductId(), productPart.getId());
+        if (productPart.getProductId() == null) {
+            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
+        }
+        productPartMapper.updateById(productPart);
+    }
+
+    // 鍒ゆ柇闆朵欢鍙锋槸鍚﹀瓨鍦�
+    public void isPartNoExist(String partNo,Integer productId, Integer id) {
+        // 闆朵欢鍙峰敮涓� 浣嗕笉蹇呭~
+        if (StringUtils.isNotBlank(partNo)) {
+            Long count = productPartMapper.selectCount(new LambdaQueryWrapper<ProductPart>()
+//                    .eq(ProductPart::getProductId, productId)
+                    .eq(ProductPart::getPartNo, partNo)
+                    .ne(id != null, ProductPart::getId, id));
+            Long selectCount = structureTestObjectPartMapper.selectCount(Wrappers.<StructureTestObjectPart>lambdaQuery()
+                    .eq(StructureTestObjectPart::getPartNo, partNo));
+            if (count > 0 || selectCount > 0) {
+                throw new BaseException("璇ラ浂浠跺彿宸茬粦瀹氳繃妫�楠屽璞�");
+            }
+        } else {
+            throw new BaseException("璇疯緭鍏ラ浂浠跺彿");
+        }
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductServiceImpl.java
new file mode 100644
index 0000000..41b12b6
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductServiceImpl.java
@@ -0,0 +1,188 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.dto.ProductDTO1;
+import com.ruoyi.inspect.excel.StructureTestObjectData;
+import com.ruoyi.inspect.mapper.ProductMapper;
+import com.ruoyi.inspect.mapper.ProductPartMapper;
+import com.ruoyi.inspect.mapper.StandardTreeMapper;
+import com.ruoyi.inspect.mapper.StructureTestObjectMapper;
+import com.ruoyi.inspect.pojo.*;
+import com.ruoyi.inspect.service.LaboratoryService;
+import com.ruoyi.inspect.service.ProductService;
+import com.ruoyi.inspect.service.StandardProductListService;
+import com.ruoyi.inspect.service.StructureItemParameterService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恜roduct(浜у搧琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2024-04-26 01:11:02
+*/
+@Service
+@AllArgsConstructor
+public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
+    implements ProductService{
+
+    private ProductMapper productMapper;
+
+    private LaboratoryService laboratoryService;
+
+    private StructureTestObjectMapper structureTestObjectMapper;
+
+    private ProductPartMapper productPartMapper;
+
+    private StandardProductListService standardProductListService;
+
+    private StandardTreeMapper standardTreeMapper;
+
+    private StructureItemParameterService structureItemParameterService;
+
+    @Override
+    public IPage<Product> selectProductListByObjectId(Page page, ProductDTO1 product) {
+        String partNo = product.getPartNo();
+        product.setPartNo(null);
+        return productMapper.selectProductListByObjectId(page, QueryWrappers.queryWrappers(product), partNo);
+    }
+
+    @Override
+    public int addProduct(Product product) {
+
+        return productMapper.insert(product);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int upProduct(Product product) {
+        // 鏌ヨ鍘熸湰鐨勫悕绉�
+        Product oldProduct = productMapper.selectById(product.getId());
+
+        if (!oldProduct.getName().equals(product.getName())) {
+            // 淇敼鍚嶇О鍖归厤鐨勬爣鍑嗘爲涓嬬殑妫�楠岄」鐩�
+            // 鏌ヨ鎵�鏈夊璞�+鍚嶇О鐨勬爲
+            StructureTestObject testObject = structureTestObjectMapper.selectById(oldProduct.getObjectId());
+
+            List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
+                    .eq(StandardProductList::getSample, oldProduct.getName())
+                    .eq(StandardProductList::getSampleType, testObject.getSpecimenName()));
+            if (CollectionUtils.isNotEmpty(standardProductLists)) {
+                for (StandardProductList standardProductList : standardProductLists) {
+                    // 淇敼鏍峰搧鍚嶇О
+                    standardProductList.setSample(product.getName());
+                    // 淇敼鏍戝悕绉�
+                    // 闇�瑕佹埅鍙栫鍥涚骇, 閬垮厤涓夊洓绾у悕绉颁竴鏍蜂慨鏀归敊璇�
+                    String[] trees = standardProductList.getTree().split(" - ");
+                    trees[3] = product.getName();
+                    List<String> list = CollUtil.newArrayList(trees);
+                    String newName = CollUtil.join(list, " - ");
+                    standardProductList.setTree(newName);
+                }
+                standardProductListService.updateBatchById(standardProductLists);
+            }
+
+            // 淇敼妫�楠岄」鐩弬鏁扮殑妫�楠屽璞�
+            // 鎷兼帴["object","product"]鏌ヨ妫�楠岄」鐩弬鏁颁慨鏀圭粦瀹氱殑妫�楠屽璞�
+            String format = "[\"{}\",\"{}\"]";
+            String sampleOld = StrUtil.format(format, testObject.getSpecimenName(), oldProduct.getName());
+            List<StructureItemParameter> itemParameterList = structureItemParameterService.list(Wrappers.<StructureItemParameter>lambdaQuery()
+                    .like(StructureItemParameter::getSample, sampleOld));
+            if (CollectionUtils.isNotEmpty(itemParameterList)) {
+                for (StructureItemParameter structureItemParameter : itemParameterList) {
+                    // 淇敼缁戝畾鐨勬牱鍝佸悕绉�
+                    String sampleNew = StrUtil.format(format, testObject.getSpecimenName(), product.getName());
+                    String sampleUp = structureItemParameter.getSample().replace(sampleOld, sampleNew);
+                    structureItemParameter.setSample(sampleUp);
+                }
+                structureItemParameterService.updateBatchById(itemParameterList);
+            }
+
+            // 淇敼鏍戠殑鍨嬪彿
+            standardTreeMapper.update(null, Wrappers.<StandardTree>lambdaUpdate()
+                    .eq(StandardTree::getSampleType, testObject.getSpecimenName())
+                    .eq(StandardTree::getSample, oldProduct.getName())
+                    .set(StandardTree::getSample, product.getName()));
+        }
+
+        return productMapper.updateById(product);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int delProduct(Integer id) {
+        // 鍒犻櫎闆朵欢缁戝畾
+        productPartMapper.delete(Wrappers.<ProductPart>lambdaQuery()
+                .eq(ProductPart::getProductId, id));
+
+        return productMapper.deleteById(id);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void importPartExcel(List<StructureTestObjectData> list) {
+        list.forEach(i -> {
+            // 妫�楠屽璞�
+            StructureTestObject structureTestObject1 = structureTestObjectMapper.selectOne(Wrappers.<StructureTestObject>lambdaQuery()
+                    .eq(StructureTestObject::getSpecimenName, i.getSpecimenName())
+                    .eq(StructureTestObject::getSpecimenNameEn, i.getSpecimenNameEn()));
+            Laboratory laboratory = laboratoryService.getOne(Wrappers.<Laboratory>lambdaQuery()
+                    .eq(Laboratory::getLaboratoryName, i.getLaboratory()));
+            if (ObjectUtils.isEmpty(laboratory)) {
+                throw new BaseException("鏈壘鍒拌鍦烘墍锛�" + i.getLaboratory() + "锛岃妫�鏌ユ槸鍚﹀瓨鍦ㄨ鍦烘墍锛�");
+            }
+            // 濡傛灉涓虹┖杩涜鏂板
+            if(ObjectUtils.isEmpty(structureTestObject1)) {
+                StructureTestObject structureTestObject = new StructureTestObject();
+                structureTestObject.setLaboratoryId(laboratory.getId());
+                structureTestObject.setSpecimenName(i.getSpecimenName());
+                structureTestObject.setSpecimenNameEn(i.getSpecimenNameEn());
+                structureTestObject.setCode(i.getCode());
+                structureTestObjectMapper.insert(structureTestObject);
+
+                // 浜у搧
+                Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery()
+                        .eq(Product::getName, i.getName())
+                        .eq(Product::getNameEn, i.getNameEn()));
+                if (ObjectUtils.isEmpty(product)){
+                    Product product1 = new Product();
+                    product1.setName(i.getName());
+                    product1.setNameEn(i.getNameEn());
+                    product1.setObjectId(structureTestObject.getId());
+                    baseMapper.insert(product1);
+                }
+            } else {
+                structureTestObject1.setCode(i.getCode());
+                structureTestObject1.setLaboratoryId(laboratory.getId());
+                structureTestObjectMapper.updateById(structureTestObject1);
+                // 浜у搧
+                Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery()
+                        .eq(Product::getName, i.getName())
+                        .eq(Product::getNameEn, i.getNameEn()));
+                if (ObjectUtils.isEmpty(product)){
+                    Product product1 = new Product();
+                    product1.setName(i.getName());
+                    product1.setNameEn(i.getNameEn());
+                    product1.setObjectId(structureTestObject1.getId());
+                    baseMapper.insert(product1);
+                } else {
+                    product.setName(i.getName());
+                    product.setNameEn(i.getNameEn());
+                    product.setObjectId(structureTestObject1.getId());
+                    baseMapper.updateById(product);
+                }
+            }
+        });
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductSupplierDensityServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductSupplierDensityServiceImpl.java
new file mode 100644
index 0000000..069498c
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/ProductSupplierDensityServiceImpl.java
@@ -0,0 +1,64 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.mapper.ProductSupplierDensityMapper;
+import com.ruoyi.inspect.pojo.ProductSupplierDensity;
+import com.ruoyi.inspect.service.ProductSupplierDensityService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 浜у搧鍘傚瀵嗗害缁戝畾琛�
+ *
+ * @author zhuo
+ * @since 2024-09-19
+ */
+@Service
+public class ProductSupplierDensityServiceImpl extends ServiceImpl<ProductSupplierDensityMapper, ProductSupplierDensity> implements ProductSupplierDensityService {
+
+    @Override
+    public IPage<ProductSupplierDensity> selectByProductId(Page page, ProductSupplierDensity supplierDensity) {
+        if (supplierDensity.getProductId() == null) {
+            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
+        }
+        return baseMapper.selectListByProductId(page, QueryWrappers.queryWrappers(supplierDensity), supplierDensity.getProductId());
+    }
+
+    @Override
+    public void addProductSupplierDensity(ProductSupplierDensity supplierDensity) {
+        if (supplierDensity.getProductId() == null) {
+            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
+        }
+        // 鏌ヨ鏀瑰巶瀹舵槸鍚︾粦瀹氳繃
+//        Long count = baseMapper.selectCount(Wrappers.<ProductSupplierDensity>lambdaQuery()
+//                .eq(ProductSupplierDensity::getProductId, supplierDensity.getProductId())
+//                .eq(ProductSupplierDensity::getModel, supplierDensity)
+//                .eq(ProductSupplierDensity::getSupplierName, supplierDensity.getSupplierName()));
+//        if (count > 0){
+//            throw new BaseException("璇ヤ骇鍝佸凡缁戝畾杩囪鍘傚");
+//        }
+
+        baseMapper.insert(supplierDensity);
+    }
+
+    @Override
+    public void updateProductSupplierDensity(ProductSupplierDensity supplierDensity) {
+        if (supplierDensity.getProductId() == null) {
+            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
+        }
+        // 鏌ヨ鏀瑰巶瀹舵槸鍚︾粦瀹氳繃
+//        Long count = baseMapper.selectCount(Wrappers.<ProductSupplierDensity>lambdaQuery()
+//                .ne(ProductSupplierDensity::getId, supplierDensity.getId())
+//                .eq(ProductSupplierDensity::getProductId, supplierDensity.getProductId())
+//                .eq(ProductSupplierDensity::getModel, supplierDensity)
+//                .eq(ProductSupplierDensity::getSupplierName, supplierDensity.getSupplierName()));
+//        if (count > 0){
+//            throw new BaseException("璇ヤ骇鍝佸凡缁戝畾杩囪鍘傚");
+//        }
+        baseMapper.updateById(supplierDensity);
+    }
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/SealServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/SealServiceImpl.java
new file mode 100644
index 0000000..ee9b06e
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/SealServiceImpl.java
@@ -0,0 +1,37 @@
+package com.ruoyi.inspect.service.impl;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.SealMapper;
+import com.ruoyi.inspect.pojo.Laboratory;
+import com.ruoyi.inspect.pojo.Seal;
+import com.ruoyi.inspect.service.SealService;
+import com.ruoyi.common.utils.QueryWrappers;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class SealServiceImpl extends ServiceImpl<SealMapper, Seal> implements SealService {
+    private SealMapper sealMapper;
+
+
+    @Override
+    public int addSeal(Seal seal) {
+        return sealMapper.insert(seal);
+    }
+
+
+
+
+    @Override
+    public IPage<Seal> selectSeal(Page page, Seal seal) {
+        return sealMapper.selectSeal(page, QueryWrappers.queryWrappers(seal));
+    }
+    @Override
+    public List<Laboratory> Laboratory(Integer labId) {
+        return sealMapper.selectLaboratory(labId);
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardMethodListServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardMethodListServiceImpl.java
new file mode 100644
index 0000000..784790b
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardMethodListServiceImpl.java
@@ -0,0 +1,150 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.StandardMethodListMapper;
+import com.ruoyi.inspect.mapper.StandardProductListMapper;
+import com.ruoyi.inspect.pojo.StandardMethodList;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import com.ruoyi.inspect.service.StandardMethodListService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_method_list(鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2024-03-04 13:44:04
+*/
+@Service
+@AllArgsConstructor
+public class StandardMethodListServiceImpl extends ServiceImpl<StandardMethodListMapper, StandardMethodList>
+    implements StandardMethodListService{
+
+    private StandardMethodListMapper standardMethodListMapper;
+
+    private StandardProductListMapper standardProductListMapper;
+
+    @Override
+    public int addStandardMethodList(Integer standardId, String tree) {
+        String[] trees = tree.split(" - ");
+        Map<String, String> map = standardMethodListMapper.selectStandardMethodById(standardId);
+        StandardMethodList list = new StandardMethodList();
+        list.setCode(map.get("code"));
+        list.setName(map.get("name"));
+        list.setRemark(map.get("remark"));
+        list.setFactory(trees[0]);
+        try {
+            list.setLaboratory(trees[1]);
+        }catch (Exception e){}
+        try {
+            list.setSampleType(trees[2]);
+        }catch (Exception e){}
+        try {
+            list.setSample(trees[3]);
+        }catch (Exception e){}
+        try {
+            list.setModel(trees[4]);
+        }catch (Exception e){}
+        standardMethodListMapper.insert(list);
+        List<StandardProductList> standardProductLists = standardMethodListMapper.selectParameterList(list.getCode());
+        for (StandardProductList standardProductList : standardProductLists) {
+            standardProductList.setStandardMethodListId(list.getId());
+            standardProductList.setFactory(trees[0]);
+            try {
+                standardProductList.setLaboratory(trees[1]);
+            }catch (Exception e){}
+            try {
+                standardProductList.setSampleType(trees[2]);
+            }catch (Exception e){}
+            try {
+                standardProductList.setSample(trees[3]);
+            }catch (Exception e){}
+            try {
+                standardProductList.setModel(trees[4]);
+            }catch (Exception e){}
+            standardProductListMapper.insert(standardProductList);
+        }
+        return 1;
+    }
+
+    @Override
+    public Map<String, List<?>> selectsStandardMethodByFLSSM(String tree) {
+        String[] trees = tree.split(" - ");
+        Map<String, List<?>> map = new HashMap<>();
+        String str = "";
+        List<StandardMethodList> standardMethodLists = new ArrayList<>();
+        switch (trees.length){
+            case 5:
+                str += "\"" + trees[2] + "\",\"" + trees[3] + "\",\"" + trees[4] + "\"";
+                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists(str));
+                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists("\"" + trees[2] + "\",\"" + trees[3] + "\""));
+                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists("\"" + trees[2] + "\""));
+                break;
+            case 4:
+                str += "\"" + trees[2] + "\",\"" + trees[3] + "\"";
+                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists(str));
+                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists("\"" + trees[2] + "\""));
+                break;
+            case 3:
+                str += "\"" + trees[2] + "\"";
+                standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodLists3(str));
+                break;
+            default:
+                map.put("standardMethodList", null);
+                return map;
+        }
+        standardMethodLists.addAll(standardMethodListMapper.selectStandardMethodListsByNull(str));
+        map.put("standardMethodList", standardMethodLists);
+        return map;
+    }
+
+    @Override
+    public Map<String, List<?>> selectsStandardMethodByFLSSM2(String tree) {
+        String[] trees = tree.split(" - ");
+        List<StandardMethodList> standardMethodLists = null;
+        switch (trees.length){
+            case 5:
+                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],trees[1],trees[2],trees[3],trees[4]);
+                break;
+            case 4:
+                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],trees[1],trees[2],trees[3],null);
+                break;
+            case 3:
+                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],trees[1],trees[2],null,null);
+                break;
+            case 2:
+                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],trees[1],null,null,null);
+                break;
+            case 1:
+                standardMethodLists = standardMethodListMapper.selectStandardMethodLists2(trees[0],null,null,null,null);
+                break;
+        }
+        Map<String, List<?>> map = new HashMap<>();
+        map.put("standardMethodList", standardMethodLists);
+        return map;
+    }
+
+    @Override
+    public int delStandardMethodByFLSSM(Integer id) {
+        standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate().eq(StandardProductList::getStandardMethodListId, id));
+        return standardMethodListMapper.deleteById(id);
+    }
+    @Override
+    public List<StandardMethodList> selectStandardMethodEnum() {
+        return standardMethodListMapper.selectListEnum();
+    }
+
+    @Override
+    public Integer getStandardMethodId(String code) {
+        return baseMapper.getStandardMethodId(code);
+    }
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardMethodServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardMethodServiceImpl.java
new file mode 100644
index 0000000..e4df479
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardMethodServiceImpl.java
@@ -0,0 +1,260 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.json.JSONUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.mapper.StandardMethodMapper;
+import com.ruoyi.inspect.mapper.StandardProductListMapper;
+import com.ruoyi.inspect.mapper.StructureItemParameterMapper;
+import com.ruoyi.inspect.pojo.StandardMethod;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import com.ruoyi.inspect.pojo.StructureItemParameter;
+import com.ruoyi.inspect.service.StandardMethodService;
+import com.ruoyi.inspect.service.StandardProductListService;
+import com.ruoyi.inspect.service.StructureItemParameterService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恠tandard_method(鏍囧噯鏂规硶)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2024-03-03 19:21:41
+ */
+@Service
+@AllArgsConstructor
+public class StandardMethodServiceImpl extends ServiceImpl<StandardMethodMapper, StandardMethod>
+        implements StandardMethodService {
+
+
+    private StandardMethodMapper standardMethodMapper;
+
+    StandardProductListMapper standardProductListMapper;
+    StandardProductListService standardProductListService;
+
+    StructureItemParameterMapper structureItemParameterMapper;
+    StructureItemParameterService structureItemParameterService;
+
+    @Override
+    public IPage<StandardMethod> selectStandardMethodList(Page page, StandardMethod standardMethod) {
+        return standardMethodMapper.selectStandardMethodList(page, QueryWrappers.queryWrappers(standardMethod));
+    }
+
+    @Override
+    public List<StandardMethod> selectStandardMethods() {
+        return standardMethodMapper.selectList(Wrappers.<StandardMethod>lambdaQuery().select(StandardMethod::getId, StandardMethod::getCode, StandardMethod::getName).ne(StandardMethod::getId, 0));
+    }
+
+    @Override
+    public int addStandardMethod(StandardMethod standardMethod) {
+        int insert = standardMethodMapper.insert(standardMethod);
+        return insert;
+    }
+
+    @Override
+    public int delStandardMethod(Integer id) {
+        int i = standardMethodMapper.deleteById(id);
+        return i;
+    }
+
+    @Override
+    public int upStandardMethod(StandardMethod standardMethod) {
+        StandardMethod oldStandardMethod = standardMethodMapper.selectById(standardMethod.getId());
+        if (!oldStandardMethod.getCode().equals(standardMethod.getCode())) {
+            CompletableFuture.supplyAsync(() -> replaceMethod(oldStandardMethod.getCode(), standardMethod.getCode()));
+        }
+        int i = standardMethodMapper.updateById(standardMethod);
+        return i;
+    }
+
+    //缂栬緫method鍚庡叏閮ㄦ浛鎹�
+    public String replaceMethod(String oldCode, String code) {
+        //鏌ヨStandardProductList涓墍鏈塎ethod濡傛灉鍖呭惈涔嬪墠鐨勫垯鏇挎崲
+        List<StandardProductList> standardProductLists = standardProductListMapper.selectList(null);
+        for (StandardProductList standardProductList : standardProductLists) {
+            if (standardProductList.getMethod().contains(oldCode)) {
+                String[] split = standardProductList.getMethod().split(",");
+                String a = null;
+                for (int i = 0; i < split.length; i++) {
+                    String methodName = split[i].substring(1, split[i].length() - 1);
+                    if (i == 0) {
+                        methodName = split[i].substring(2, split[i].length() - 1);
+                    } else if (i == split.length - 1) {
+                        methodName = split[i].substring(1, split[i].length() - 2);
+                    }
+                    if (methodName.equals(oldCode)) {
+                        methodName = code;
+                    }
+                    a += "\"" + methodName + "\",";
+                }
+                String method = "[\"" + a.substring(0, a.length() - 1) + "\"]";
+                standardProductList.setMethod(method);
+            }
+        }
+        standardProductListService.updateBatchById(standardProductLists);
+        //鏌ヨStructureItemParameter涓墍鏈塎ethod濡傛灉鍖呭惈涔嬪墠鐨勫垯鏇挎崲
+        List<StructureItemParameter> structureItemParameters = structureItemParameterMapper.selectList(null);
+        for (StructureItemParameter structureItemParameter : structureItemParameters) {
+            if (structureItemParameter.getMethod().contains(oldCode)) {
+                String[] split = structureItemParameter.getMethod().split(",");
+                String a = null;
+                for (int i = 0; i < split.length; i++) {
+                    String methodName = split[i].substring(1, split[i].length() - 1);
+                    if (i == 0) {
+                        methodName = split[i].substring(2, split[i].length() - 1);
+                    } else if (i == split.length - 1) {
+                        methodName = split[i].substring(1, split[i].length() - 2);
+                    }
+                    if (methodName.equals(oldCode)) {
+                        methodName = code;
+                    }
+                    a += "\"" + methodName + "\",";
+                }
+                String method = "[\"" + a.substring(0, a.length() - 1) + "\"]";
+                structureItemParameter.setMethod(method);
+            }
+        }
+        structureItemParameterService.updateBatchById(structureItemParameters);
+        return "鏇挎崲瀹屾瘯!";
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void inputExcel(MultipartFile file) throws IOException {
+        // 瀛樺偍妫�娴嬪璞ist
+        List<Object> structureTestObjectIdList = new ArrayList<>();
+        List<StandardMethod> result = new ArrayList<>();
+        ExcelUtil.readBySax(file.getInputStream(), 0, (i, l, list) -> {
+            // 鍘婚櫎绗竴琛岃〃澶�
+            if (l == 0) {
+                return;
+            }
+            // 瀛樺偍鍞竴妫�娴嬪璞�
+            if (!structureTestObjectIdList.contains(list.get(2))) {
+                structureTestObjectIdList.add(list.get(2));
+            }
+            StandardMethod standardMethod = formatData(list);
+            result.add(standardMethod);
+        });
+        addStructureTest(structureTestObjectIdList, result);
+    }
+
+    // 鏍煎紡鍖栨暟鎹�
+    public StandardMethod formatData(List<Object> list) {
+        StandardMethod standardMethod = new StandardMethod();
+        standardMethod.setField(list.get(1).toString());
+        // 閫犳牸寮�
+        List<List<Object>> structureTestObjectId = new ArrayList<>();
+        if (ObjectUtils.isEmpty(list.get(3))) {
+            structureTestObjectId.add(Arrays.asList(list.get(2)));
+        } else {
+            structureTestObjectId.add(Arrays.asList(list.get(2), list.get(3)));
+        }
+        standardMethod.setStructureTestObjectId(JSONUtil.toJsonStr(structureTestObjectId));
+        standardMethod.setCode(list.get(4).toString());
+        standardMethod.setName(list.get(5).toString());
+        standardMethod.setNameEn(list.get(6).toString());
+        if (!Objects.equals(list.get(7), null)) {
+            standardMethod.setRemark(list.get(7).toString());
+        }
+        standardMethod.setQualificationId(list.get(8).toString());
+        if (ObjectUtils.isNotEmpty(list.get(9))) {
+            if (list.get(9).equals("鏄�")) {
+                standardMethod.setIsProduct(1);
+            } else if (list.get(9).equals("鍚�")) {
+                standardMethod.setIsProduct(0);
+            }
+        }
+        if (ObjectUtils.isNotEmpty(list.get(10))) {
+            if (list.get(10).equals("鏄�")) {
+                standardMethod.setIsUse(1);
+            } else if (list.get(9).equals("鍚�")) {
+                standardMethod.setIsUse(0);
+            }
+        }
+        return standardMethod;
+    }
+
+    // 鏂板鏁版嵁
+    public void addStructureTest(List<Object> structureTestObjectIdList, List<StandardMethod> standardMethodList) {
+        List<StandardMethod> updateList = new ArrayList<>();
+        List<Integer> deleteListId = new ArrayList<>();
+        List<StandardMethod> addList = new ArrayList<>();
+        if (!structureTestObjectIdList.isEmpty()) {
+            // 寰幆excel閲岄潰鐨勫垎缁�
+            structureTestObjectIdList.forEach(j -> {
+                // 浠xcel涓殑缁勫悕鏌ヨ鏁版嵁搴撲腑鐨勫垎缁�
+                List<StandardMethod> standardMethods = baseMapper.selectList(Wrappers.<StandardMethod>lambdaQuery()
+                        .like(StandardMethod::getStructureTestObjectId, "\"" + j + "\""));
+                // 灏嗙粨鏋滃惊鐜尮閰�
+                for (int i = 0; i < standardMethods.size(); i++) {
+                    boolean isExistence = false;
+                    for (int i1 = 0; i1 < standardMethodList.size(); i1++) {
+                        // 鏇存柊
+                        if (standardMethods.get(i).getStructureTestObjectId().equals(standardMethodList.get(i1).getStructureTestObjectId())
+                                && standardMethods.get(i).getCode().equals(standardMethodList.get(i1).getCode())
+                                && standardMethods.get(i).getField().equals(standardMethodList.get(i1).getField())) {
+                            // 缁檈xcel鏁版嵁璧嬪�糹d鍋氭洿鏂�
+                            standardMethodList.get(i1).setId(standardMethods.get(i).getId());
+                            // 鏇存柊
+                            updateList.add(standardMethodList.get(i1));
+                            isExistence = true;
+                            break;
+                        }
+                    }
+                    // 鍒犻櫎
+                    if (!isExistence) {
+                        deleteListId.add(standardMethods.get(i).getId());
+                    }
+                }
+                for (int i = 0; i < standardMethodList.size(); i++) {
+                    if (standardMethodList.get(i).getStructureTestObjectId().contains("\"" + j + "\"")) {
+                        boolean isExistence = false;
+                        for (int i1 = 0; i1 < standardMethods.size(); i1++) {
+                            if (standardMethods.get(i1).getStructureTestObjectId().equals(standardMethodList.get(i).getStructureTestObjectId())
+                                    && standardMethods.get(i1).getCode().equals(standardMethodList.get(i).getCode())
+                                    && standardMethods.get(i1).getField().equals(standardMethodList.get(i).getField())) {
+                                isExistence = true;
+                                break;
+                            }
+                        }
+                        // 鏂板
+                        if (!isExistence) {
+                            addList.add(standardMethodList.get(i));
+                        }
+                    }
+                }
+            });
+        }
+        if (!addList.isEmpty()) {
+            // 鏂板
+            baseMapper.insertBatchSomeColumn(addList);
+        }
+
+        if (!deleteListId.isEmpty()) {
+            // 鍒犻櫎
+            baseMapper.deleteBatchIds(deleteListId);
+        }
+
+        if (!updateList.isEmpty()) {
+            // 鏇存柊
+            updateList.forEach(i -> {
+                baseMapper.updateById(i);
+            });
+        }
+    }
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListService2Impl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListService2Impl.java
new file mode 100644
index 0000000..c766bb3
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListService2Impl.java
@@ -0,0 +1,12 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.StandardProductListMapper;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import com.ruoyi.inspect.service.StandardProductListService2;
+import org.springframework.stereotype.Service;
+
+@Service
+public class StandardProductListService2Impl extends ServiceImpl<StandardProductListMapper, StandardProductList>
+        implements StandardProductListService2 {
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListServiceImpl.java
new file mode 100644
index 0000000..648d57b
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListServiceImpl.java
@@ -0,0 +1,701 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.inspect.dto.CopyStandardProductListDto;
+import com.ruoyi.inspect.dto.InsSampleReceiveDto;
+import com.ruoyi.inspect.dto.ProductDto;
+import com.ruoyi.inspect.dto.ResetTreeDragDTO;
+import com.ruoyi.inspect.mapper.IfsInventoryQuantityMapper;
+import com.ruoyi.inspect.mapper.StandardProductListMapper;
+import com.ruoyi.inspect.mapper.StandardProductListSupplierAskMapper;
+import com.ruoyi.inspect.mapper.StandardTreeMapper;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import com.ruoyi.inspect.pojo.StandardProductListSupplierAsk;
+import com.ruoyi.inspect.pojo.StandardTree;
+import com.ruoyi.inspect.service.StandardProductListService;
+import com.ruoyi.inspect.service.StandardProductListService2;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恠tandard_product_list(鏍囧噯鏍戜笅鐨勬楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2024-03-05 10:33:29
+ */
+@Service
+@AllArgsConstructor
+public class StandardProductListServiceImpl extends ServiceImpl<StandardProductListMapper, StandardProductList>
+        implements StandardProductListService {
+
+    private StandardProductListMapper standardProductListMapper;
+
+    private StandardTreeMapper standardTreeMapper;
+
+    private StandardProductListService2 standardProductListService2;
+
+    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
+
+    private StandardProductListSupplierAskMapper standardProductListSupplierAskMapper;
+
+
+    @Override
+    public int upStandardProductList(StandardProductList list) {
+        return standardProductListMapper.updateById(list);
+    }
+
+    @Override
+    public int delStandardProduct(JSONArray list) {
+        return standardProductListMapper.deleteBatchIds(list);
+    }
+
+    @Override
+    public List<StandardProductList> selectStandardProductList(InsSampleReceiveDto insSample) {
+        // 鏄惁娌℃湁浜у搧
+        boolean isNoSample = false;
+//        String[] models = insSample.getModel().split("-(?=[^-]*$)");//鎷嗗垎鏈�鍚庝竴涓��-銆�
+        String model = insSample.getModel();
+        String modelNum = insSample.getModelNum();
+        List<StandardProductList> list = standardProductListMapper.selectDetail(insSample.getStandardMethodListId(), 1, model, insSample.getIsCableTag());
+        if (list.size() == 0) {
+            if (Objects.equals(insSample.getFactory(), "") || insSample.getFactory() == null) {
+                return null;
+            }
+            String[] split = insSample.getFactory().split(" - ");
+            split[3] = split[3].replace("- ", "");
+            String tree = split[0] + " - " + split[1] + " - " + split[2] + " - " + split[3] + " - null";
+            list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree, insSample.getIsCableTag());
+            if (list.size() == 0) {
+                String tree1 = split[0] + " - " + split[1] + " - " + split[2] + " - null - " + split[3];
+                list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree1, insSample.getIsCableTag());
+
+                // 鍙湁瀵硅薄鐨勪竴灞�
+                if (list.size() == 0) {
+                    String tree2 = split[0] + " - " + split[1] + " - " + split[2] + " - null - null";
+                    list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree2, insSample.getIsCableTag());
+                    // 鏍峰搧鐩存帴璧嬪�兼牱鍝佸垎绫�
+                    list.forEach(standardProductList -> standardProductList.setSample(standardProductList.getSampleType()));
+                    isNoSample = true;
+                }
+            }
+        }
+        String[] split1 = insSample.getFactory().split(" - ");
+        if (!isNoSample) {
+            //鍒ゆ柇闀垮害
+            if (split1.length > 4) {
+                if (ObjectUtils.isNotEmpty(split1[3])) {
+                    list = list.stream().filter(list1 -> Objects.nonNull(list1.getSample()) && Objects.equals(list1.getSample(), split1[3])).collect(Collectors.toList());
+                } else if (split1[3].equals("")) {
+                    list = list.stream().filter(list1 -> Objects.nonNull(list1.getSampleType()) && Objects.equals(list1.getSampleType(), split1[2])).collect(Collectors.toList());
+                }
+            }
+        }
+        list = list.stream().filter(a -> {
+                    try {
+                        if (a.getSection() != null && !Objects.equals(a.getSection(), "")) {
+                            List<String> sections = JSON.parseArray(a.getSection(), String.class);// 鍖洪棿
+                            List<String> cores = JSON.parseArray(a.getCores(), String.class); // 鑺暟
+                            List<String> conductorMaterials = JSON.parseArray(a.getConductorMaterial(), String.class); // 瀵间綋鏉愯川
+                            List<String> conductorTypes = JSON.parseArray(a.getConductorType(), String.class); // 瀵间綋绫诲瀷
+                            List<String> asks = JSON.parseArray(a.getAsk(), String.class);
+                            List<String> tells = JSON.parseArray(a.getTell(), String.class);
+                            boolean isIf;
+                            for (int i = 0; i < sections.size(); i++) {
+                                if (Objects.equals(a.getBsm(), "1")) {
+                                    return true;
+                                } else {
+                                    if (sections.get(i).contains("&")) {
+                                        String[] split = sections.get(i).split("&");
+                                        isIf = getIsIf(split[0], modelNum, cores.get(i), conductorMaterials.get(i), conductorTypes.get(i), insSample)
+                                                && getIsIf(split[1], modelNum, cores.get(i), conductorMaterials.get(i), conductorTypes.get(i), insSample);
+                                    } else {
+                                        isIf = getIsIf(sections.get(i), modelNum, cores.get(i), conductorMaterials.get(i), conductorTypes.get(i), insSample);
+                                    }
+                                    if (isIf) {
+                                        a.setSection(sections.get(i));
+                                        a.setAsk(asks.get(i));
+                                        a.setTell(tells.get(i));
+                                        return true;
+                                    }
+                                }
+                            }
+                            return false;
+                        }
+                    } catch (Exception ignored) {
+                        return false;
+                    }
+                    return true;
+                }).peek(standardProductList -> {
+                    // todo: 鍒ゆ柇鏄惁鏄師鏉愪笅鍗�, 闇�瑕佸晩鎶婇鑹茬粦瀹氬埌璇曟牱棰滆壊鐨勮姹傚�间笂
+                    if (StringUtils.isNotBlank(insSample.getPartNo())) {
+                        // 鍒ゆ柇鏄惁鏈夎繖涓瓧娈典笖鏄枃鏈被鍨�
+                        if (StringUtils.isNotBlank(standardProductList.getInspectionItem())
+                                && standardProductList.getInspectionItem().contains("璇曟牱棰滆壊")) {
+                            Map<String, String> partColor = baseMapper.selectPartColor(insSample.getPartNo());
+                            if (CollectionUtils.isNotEmpty(partColor)) {
+                                if (StringUtils.isNotBlank(partColor.get("color"))) {
+                                    // 鍒ゆ柇妫�楠屽�兼槸鍚︿负绌哄拰涓嶇瓑浜� -  鍜� /
+                                    if (StringUtils.isBlank(standardProductList.getAsk()) || partColor.get("color").contains("鏈�")) { // 娌℃湁ask鐩存帴澶嶅埗
+                                        // 鏌ヨ瀵硅薄缁戝畾琛ㄥ拰浜у搧缁戝畾琛�
+                                        standardProductList.setAsk("=" + partColor.get("color")
+                                                + (StringUtils.isBlank(partColor.get("color_code")) ? "" : "(" + partColor.get("color_code") + ")"));
+                                        standardProductList.setTell(partColor.get("color")
+                                                + (StringUtils.isBlank(partColor.get("color_code")) ? "" : "(" + partColor.get("color_code") + ")"));
+                                        standardProductList.setInspectionValueType("2");
+                                    } else { // 鎷兼帴鍒拌姹傛弿杩板墠闈�
+                                        standardProductList.setTell(partColor.get("color")
+                                                + (StringUtils.isBlank(partColor.get("color_code")) ? "" : "(" + partColor.get("color_code") + ")") + "@" + standardProductList.getTell());
+                                    }
+                                }
+                            }
+                        }
+                    }
+                })
+                .collect(Collectors.toList());
+
+        // 鏌ヨ鍘傚鏄惁鏈夌壒娈婅姹傚��
+        if (insSample.getIfsInventoryId() != null) {
+            // 鏌ヨ鍘熸潗鏂欏巶瀹跺悕绉�
+            String supplierName = ifsInventoryQuantityMapper.selectById(insSample.getIfsInventoryId())
+                    .getSupplierName();
+            List<Long> collect = list.stream().map(StandardProductList::getId).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(collect)) {
+                List<StandardProductListSupplierAsk> supplierAsks = standardProductListSupplierAskMapper.selectList(Wrappers.<StandardProductListSupplierAsk>lambdaQuery()
+                        .in(StandardProductListSupplierAsk::getProductListId, collect)
+                        .eq(StandardProductListSupplierAsk::getSupplierName, supplierName));
+
+                // 鍒ゆ柇鏈夋病鏈夌壒娈婂�肩粦瀹�
+                if (CollectionUtils.isNotEmpty(supplierAsks)) {
+                    for (StandardProductList standardProductList : list) {
+                        for (StandardProductListSupplierAsk supplierAsk : supplierAsks) {
+                            if (standardProductList.getId().equals(supplierAsk.getProductListId())) {
+                                // 閲嶆柊璧嬪�艰姹傚�煎拰瑕佹眰鎻忚堪
+                                standardProductList.setAsk(supplierAsk.getAsk());
+                                standardProductList.setTell(supplierAsk.getTell());
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return list;
+    }
+
+    /**
+     *
+     * @param str                 鍒ゅ畾鍏紡
+     * @param model               鍨嬪彿
+     * @param standardCores       鑺暟
+     * @param conductorMaterial   瀵间綋鏉愯川
+     * @param conductorType       瀵间綋绫诲瀷
+     * @param insSample
+     * @return
+     */
+    private boolean getIsIf(String str, String model, String standardCores, String conductorMaterial, String conductorType,InsSampleReceiveDto insSample) {
+        Matcher matcher = Pattern.compile("\\d+(\\.\\d+)?").matcher(model);
+        String model2 = "";
+        while (matcher.find()) {
+            model2 += matcher.group();
+            break;
+        }
+        boolean flag = false;
+        if (str.contains("鈮�") || str.contains(">=")) {
+            String param = str.replace("鈮�", "").replace(">=", "");
+            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) > -1;
+        } else if (str.contains("鈮�") || str.contains("<=")) {
+            String param = str.replace("鈮�", "").replace("<=", "");
+            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) < 1;
+        } else if (str.contains(">") || str.contains("锛�")) {
+            String param = str.replace(">", "").replace("锛�", "");
+            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) > 0;
+        } else if (str.contains("<") || str.contains("锛�")) {
+            String param = str.replace("<", "").replace("锛�", "");
+            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) < 0;
+        } else if (str.contains("=")) {
+            String param = str.replace("=", "");
+            flag = new BigDecimal(model2).compareTo(new BigDecimal(param)) == 0;
+        }
+        if (flag) {
+            boolean coresMatch = true;
+            boolean conductorMaterialMatch = true;
+            boolean conductorTypeMatch = true;
+
+            // 鍒ゆ柇鏄惁鏈夌嚎鑺暟閲�
+            if (StringUtils.isNotBlank(standardCores)) {
+                if (StringUtils.isBlank(insSample.getCores()) || !standardCores.equals(insSample.getCores())) {
+                    coresMatch = false;
+                }
+            }
+
+            // 鍒ゆ柇鏄惁鏈夊浣撴潗璐�
+            if (StringUtils.isNotBlank(conductorMaterial)) {
+                if (StringUtils.isBlank(insSample.getConductorMaterial()) || !conductorMaterial.equals(insSample.getConductorMaterial())) {
+                    conductorMaterialMatch = false;
+                }
+            }
+
+            // 鍒ゆ柇鏄惁鏈夊浣撶被鍨�
+            if (StringUtils.isNotBlank(conductorType)) {
+                if (StringUtils.isBlank(insSample.getConductorType()) || !conductorType.equals(insSample.getConductorType())) {
+                    conductorTypeMatch = false;
+                }
+            }
+            // 鏈�缁堝垽鏂�
+            flag = coresMatch && conductorMaterialMatch && conductorTypeMatch;
+        }
+
+        return flag;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> selectStandardProductListByMethodId(Integer id, String tree, Integer page) {
+        String[] trees = tree.split(" - ");
+        try {
+            String tree1 = trees[2];
+        } catch (Exception e) {
+            throw new BaseException("鎿嶄綔澶揩,绯荤粺浼犲弬閿欒!!!!");
+        }
+        boolean isDrag = false;
+        List<StandardProductList> list = new ArrayList<>();
+        if (trees.length == 3) {
+            List<StandardTree> treeList = new ArrayList<>();
+            StandardTree standardTree = new StandardTree();
+            standardTree.setFactory(trees[0]);
+            standardTree.setLaboratory(trees[1]);
+            standardTree.setSampleType(trees[2]);
+            List<ProductDto> pList = standardTreeMapper.selectPList(trees[2]);
+            if (pList.size() == 0 || pList.get(0) == null) {
+                List<StandardTree> treeList1 = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]));
+                if (treeList1.size() == 0) {
+                    treeList.add(standardTree);
+                } else {
+                    treeList.addAll(treeList1);
+                }
+            } else {
+                for (ProductDto p : pList) {
+                    standardTree.setSample(p.getName());
+                    List<StandardTree> treeList1 = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, p.getName()));
+                    if (treeList1.size() == 0) {
+                        treeList.add(JSON.parseObject(JSON.toJSONString(standardTree), StandardTree.class));
+                    } else {
+                        treeList.addAll(treeList1);
+                    }
+                }
+            }
+            for (StandardTree standardTree2 : treeList) {
+                String tree2 = trees[0] + " - " + trees[1] + " - " + trees[2] + " - " + standardTree2.getSample() + " - " + standardTree2.getModel();
+                list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree2.getSample(), standardTree2.getModel(), tree2, trees[1]));
+                list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + standardTree2.getSample() + "\"", standardTree2.getSample(), standardTree2.getModel(), tree2, trees[1]));
+            }
+        } else if (trees.length == 4) {
+            // 鍒ゆ柇绗洓灞傛槸鍚︽湁鍨嬪彿
+            Long count = standardProductListMapper.selectCount(Wrappers.<StandardProductList>lambdaQuery()
+                    .eq(StandardProductList::getStandardMethodListId, id)
+                    .isNull(StandardProductList::getModel)
+                    .like(StandardProductList::getTree, tree));
+            if (count == 0) {
+                isDrag = true;
+            }
+
+            isDrag = true;
+            List<StandardTree> treeList = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]));
+            if (treeList.size() == 0) {
+                StandardTree standardTree = new StandardTree();
+                standardTree.setFactory(trees[0]);
+                standardTree.setLaboratory(trees[1]);
+                standardTree.setSampleType(trees[2]);
+                standardTree.setSample(trees[3]);
+                treeList.add(standardTree);
+            }
+            for (StandardTree standardTree : treeList) {
+                String str = tree + " - " + standardTree.getModel();
+                list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree.getSample(), standardTree.getModel(), str, trees[1]));
+                list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", standardTree.getSample(), standardTree.getModel(), str, trees[1]));
+            }
+        } else {
+            isDrag = true;
+            list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", trees[3].equals("null") ? null : trees[3], trees[4], tree, trees[1]));
+            list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", trees[3].equals("null") ? null : trees[3], trees[4], tree, trees[1]));
+        }
+        for (StandardProductList productList : list) {
+            productList.setId(IdWorker.getId());
+        }
+        List<StandardProductList> standardProductLists;
+
+        if (isDrag) {
+            standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
+                    .eq(StandardProductList::getStandardMethodListId, id)
+                    .like(StandardProductList::getTree, tree)
+                    .orderByAsc(StandardProductList::getSort));
+            // 鍒ゆ柇鏄惁鏈夋病鏈夊簭鍙风殑, 娌℃湁搴忓彿閲嶇疆
+            boolean b = standardProductLists.stream().anyMatch(standardProductList -> standardProductList.getSort() == null);
+        } else {
+            standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
+                    .eq(StandardProductList::getStandardMethodListId, id)
+                    .like(StandardProductList::getTree, tree));
+        }
+
+        for (StandardProductList sp : standardProductLists) {
+            for (StandardProductList pl : list) {
+                // 鍒ゆ柇鏉′欢鏄惁鍙湁涓�涓�, 鏈変竴涓殑璇濋粯璁ょ涓�涓�
+                String radiusList = pl.getRadiusList();
+                if (StringUtils.isNotBlank(radiusList) && !radiusList.equals("null") && !radiusList.equals("\"\"")) {
+                    JSONArray jsonArray = JSON.parseArray(radiusList);
+                    List<String> radius = jsonArray.toJavaList(String.class);
+                    if (CollectionUtils.isNotEmpty(radius) && radius.size() == 1) {
+                        pl.setRadius(radius.get(0));
+                    }
+                }
+                if (Objects.equals(sp.getInspectionItem(), pl.getInspectionItem())
+                        && Objects.equals((sp.getInspectionItemSubclass() == null) ? "" : sp.getInspectionItemSubclass(), pl.getInspectionItemSubclass() == null ? "" : pl.getInspectionItemSubclass())
+//                        && Objects.equals(sp.getSample(), pl.getSample())
+                        && Objects.equals(sp.getModel(), pl.getModel())
+                        && sp.getTree().indexOf(pl.getSample() == null ? "null" : pl.getSample()) > -1
+                        && Objects.equals(sp.getStructureItemParameterId(), pl.getStructureItemParameterId())) {
+                    pl.setId(sp.getId());
+                    // 娣诲姞鎺掑簭瀛楁
+                    pl.setSort(sp.getSort());
+                    if (sp.getState() != null && !sp.getState().equals("")) {
+                        pl.setState(sp.getState());
+                    } else {
+                        pl.setState(id == 0 ? 1 : 0);
+                    }
+                    if (sp.getMethodS() != null && !sp.getMethodS().equals("")) {
+                        pl.setMethod(sp.getMethodS());
+                    }
+                    if (sp.getRadius() != null && !sp.getRadius().equals("")) {
+                        pl.setRadius(sp.getRadius());
+                    }
+                    if (sp.getRates() != null && !sp.getRates().equals("")) {
+                        pl.setRates(sp.getRates());
+                    }
+                    if (sp.getAsk() != null && !sp.getAsk().equals("")) {
+                        pl.setAsk(sp.getAsk());
+                    }
+                    if (sp.getTell() != null && !sp.getTell().equals("")) {
+                        pl.setTell(sp.getTell());
+                    }
+                    if (sp.getPrice() != null && !sp.getPrice().equals("")) {
+                        pl.setPrice(sp.getPrice());
+                    }
+                    if (sp.getManHour() != null && !sp.getManHour().equals("")) {
+                        pl.setManHour(sp.getManHour());
+                    }
+                    if (sp.getSection() != null && !sp.getSection().equals("")) {
+                        pl.setSection(sp.getSection());
+                    }
+                    if (sp.getCores() != null && !sp.getCores().equals("")) {
+                        pl.setCores(sp.getCores());
+                    }
+                    if (sp.getConductorMaterial() != null && !sp.getConductorMaterial().equals("")) {
+                        pl.setConductorMaterial(sp.getConductorMaterial());
+                    }
+                    if (sp.getConductorType() != null && !sp.getConductorType().equals("")) {
+                        pl.setConductorType(sp.getConductorType());
+                    }
+                    if (sp.getTemplateId() != null && !sp.getTemplateId().equals("")) {
+                        pl.setTemplateId(sp.getTemplateId());
+                    }
+                    //鍥犱负杩樻湁涓骇鍝佸彨鑰愬紶绾垮す 鎺ョ画閲戝叿 ,杩欎袱涓」鐩殑鏁版嵁瀹屽叏涓�鏍�,鐗规畩澶勭悊
+                    if (sp.getTree() != null && !sp.getTree().equals("") && !pl.getTree().equals("涓ぉ绉戞妧妫�娴嬩腑蹇� - 鐢靛姏浜у搧瀹為獙瀹� - 閲戝叿 - 鑰愬紶绾垮す - null")) {
+                        pl.setTree(sp.getTree());
+                    }
+                    break;
+                }
+            }
+        }
+        if (page == 1) {
+            Integer userId = SecurityUtils.getUserId().intValue();
+//            CompletableFuture.supplyAsync(() -> {
+            if (trees.length == 5) {
+                standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate()
+                        .eq(StandardProductList::getStandardMethodListId, id)
+                        .eq(StandardProductList::getTree, tree));
+            } else {
+                standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate()
+                        .eq(StandardProductList::getStandardMethodListId, id)
+                        .like(StandardProductList::getTree, tree));
+            }
+
+            boolean success = false;
+            int retryCount = 0;
+            while (!success && retryCount < 100) {
+                try {
+                    standardProductListService2.saveBatch(list.stream().map(a -> {
+                        a.setFactory(trees[0]);
+                        a.setLaboratory(trees[1]);
+                        a.setSampleType(trees[2]);
+                        a.setCreateUser(userId);
+                        a.setUpdateUser(userId);
+                        a.setStandardMethodListId(id);
+                        return a;
+                    }).collect(Collectors.toList()));
+                    ;
+                    success = true;
+                } catch (Exception e) {
+                    // 澶勭悊閲嶅 ID 鐨勮褰曪紝閲嶆柊鐢熸垚 ID 骞剁户缁皾璇曟彃鍏�
+                    for (StandardProductList productList : list) {
+                        productList.setId(IdWorker.getId());
+                    }
+                }
+            }
+            if (!success) {
+                throw new RuntimeException("鎻掑叆澶辫触");
+            }
+
+        }
+        Map<String, Object> map = new HashMap<>();
+        Collections.sort(list, (o1, o2) -> {
+            String field1 = o1.getManHourGroup();
+            String field2 = o2.getManHourGroup();
+
+            boolean isEmpty1 = field1 == null || field1.isEmpty();
+            boolean isEmpty2 = field2 == null || field2.isEmpty();
+
+            if (isEmpty1 && isEmpty2) {
+                return 0;
+            } else if (isEmpty1) {
+                return 1;
+            } else if (isEmpty2) {
+                return -1;
+            } else {
+                int num1 = extractNumber(field1);
+                int num2 = extractNumber(field2);
+                return Integer.compare(num1, num2);
+            }
+        });
+          // 鎸夌収绱㈠紩鎺掑簭
+        if (isDrag) {
+            list.sort((o1, o2) -> (o1.getSort() == null ? 0 : o1.getSort())
+                    - (o2.getSort() == null ? 0 : o2.getSort()));
+        }
+        try {
+            map.put("productList", list.subList((page - 1) * 300, page * 300));
+        } catch (IndexOutOfBoundsException e) {
+            map.put("productList", list.subList((page - 1) * 300, list.size()));
+        }
+        map.put("total", list.size());
+        return map;
+    }
+
+    private int extractNumber(String s) {
+        // 浠庡瓧绗︿覆涓彁鍙栨暟瀛楃殑閫昏緫锛岃繖閲屽亣璁惧瓧娈电殑鏍煎紡鏄� "text<number>"
+        String number = s;
+        if (!s.matches("\\d+")) {
+            number = s.replaceAll("\\D", "");
+        }
+        return Integer.parseInt(number);
+    }
+
+    @Override
+    public IPage<StandardProductList> selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items) {
+        IPage<StandardProductList> iPage = new Page<>();
+        iPage.setSize(100);
+        iPage.setCurrent(page);
+        return standardProductListMapper.standardProductListIPage(id, tree, iPage, laboratory, item, items);
+    }
+
+    @Override
+    public Map<String, List<?>> selectStandardProductEnumByMethodId(Integer id, String tree, String item) {
+        HashMap<String, List<?>> map = new HashMap<>();
+        map.put("item", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
+                .eq(StandardProductList::getStandardMethodListId, id)
+                .like(StandardProductList::getTree, tree)
+                .select(StandardProductList::getInspectionItem)
+                .groupBy(StandardProductList::getInspectionItem)));
+        if (ObjectUtils.isNotEmpty(item)) {
+            map.put("items", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
+                    .eq(StandardProductList::getStandardMethodListId, id)
+                    .eq(StandardProductList::getInspectionItem, item)
+                    .like(StandardProductList::getTree, tree)
+                    .select(StandardProductList::getInspectionItemSubclass)
+                    .groupBy(StandardProductList::getInspectionItemSubclass)));
+        } else {
+            map.put("items", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
+                    .eq(StandardProductList::getStandardMethodListId, id)
+                    .like(StandardProductList::getTree, tree)
+                    .select(StandardProductList::getInspectionItemSubclass)
+                    .groupBy(StandardProductList::getInspectionItemSubclass)));
+        }
+        return map;
+    }
+
+    /**
+     * 淇敼鏍囧噯搴撳尯闂�
+     * @param list
+     * @return
+     */
+    @Override
+    public boolean updateSection(StandardProductList list) {
+        standardProductListMapper.updateSection(list);
+        return true;
+    }
+
+
+    /**
+     * 鏍囧噯搴撴嫋鎷�
+     * @param resetTreeDragDTO
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void resetTreeDrag(ResetTreeDragDTO resetTreeDragDTO) {
+        Integer beginIndex = Integer.parseInt(resetTreeDragDTO.getBeginIndex());
+        Integer endIndex = Integer.parseInt(resetTreeDragDTO.getEndIndex());
+        Integer methodId = Integer.parseInt(resetTreeDragDTO.getMethodId());
+        Long productionId = Long.parseLong(resetTreeDragDTO.getProductionId());
+        // 鍒ゆ柇鏄粠涓婂線涓嬫嫋鎷借繕鏄粠涓嬪線涓婃斁鎷栨嫿
+        // 浠庝笂寰�涓�
+        if (beginIndex < endIndex) {
+            standardProductListMapper.updateSortUp(beginIndex,
+                    endIndex,
+                    methodId,
+                    resetTreeDragDTO.getTree());
+
+            // 浠庝笅寰�涓�
+        } else if (beginIndex > endIndex){
+            standardProductListMapper.updateSortDown(beginIndex,
+                    endIndex,
+                    methodId,
+                    resetTreeDragDTO.getTree());
+        } else {
+            return;
+        }
+        // 淇敼鏍囧噯搴撻」椤哄簭
+        standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate()
+                .eq(StandardProductList::getId, productionId)
+                .set(StandardProductList::getSort, endIndex));
+    }
+
+    @Override
+    public void resetTreeDragBatch(List<StandardProductList> standardProductLists) {
+        standardProductListService2.updateBatchById(standardProductLists);
+    }
+
+    /**
+     * 妫�楠岄」瑕佹眰鍊煎姣�
+     * @param copyDto
+     * @return
+     */
+    @Override
+    public List<StandardProductList> copyStandardProductList(CopyStandardProductListDto copyDto) {
+        List<StandardProductList> productLists = new ArrayList<>();
+
+        // 瀵规瘮妫�楠岄」涓�鏍风殑濉厖瑕佹眰鍊艰姹傛弿杩�
+        for (StandardProductList oldProductList : copyDto.getOldStandardProductList()) {
+            String oldItemName = oldProductList.getInspectionItemClassEn()
+                    + oldProductList.getInspectionItem()
+                    + oldProductList.getInspectionItemSubclass();
+            for (StandardProductList newProductList : copyDto.getNewStandardProductList()) {
+                String newItemName = newProductList.getInspectionItemClassEn()
+                        + newProductList.getInspectionItem()
+                        + newProductList.getInspectionItemSubclass();
+                // 鍒ゆ柇鍚嶇О鏄惁涓�鏍�
+                if (oldItemName.equals(newItemName)) {
+                    // 鍖洪棿
+                    oldProductList.setSection(newProductList.getSection());
+                    // 鑺暟
+                    oldProductList.setCores(newProductList.getCores());
+                    // 瑕佹眰鍊�
+                    oldProductList.setAsk(newProductList.getAsk());
+                    // 瑕佹眰鎻忚堪
+                    oldProductList.setTell(newProductList.getTell());
+                    // 鍗曚环
+                    oldProductList.setPrice(newProductList.getPrice());
+                    // 宸ユ椂鍒嗙粍
+                    oldProductList.setManHour(newProductList.getManHour());
+                    // 瀵间綋鏉愯川
+                    oldProductList.setConductorMaterial(newProductList.getConductorMaterial());
+                    // 瀵间綋绫诲瀷
+                    oldProductList.setConductorType(newProductList.getConductorType());
+                    productLists.add(oldProductList);
+                }
+            }
+        }
+        return productLists;
+    }
+
+    /**
+     * 妫�楠岄」澶嶅埗瀵规瘮涓�涓�
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<StandardProductList> copyStandardProductOne(CopyStandardProductListDto dto) {
+        if (CollectionUtils.isEmpty(dto.getNewStandardProductList()) && dto.getNewStandardProductList().size() == 1 &&
+                CollectionUtils.isEmpty(dto.getOldStandardProductList()) && dto.getOldStandardProductList().size() == 1) {
+            throw new BaseException("闇�瑕佸姣旂殑妫�楠岄」璇烽�夋嫨涓�涓�");
+        }
+        StandardProductList newProductList = dto.getNewStandardProductList().get(0);
+        StandardProductList oldProductList = dto.getOldStandardProductList().get(0);
+        // 鍖洪棿
+        oldProductList.setSection(newProductList.getSection());
+        // 鑺暟
+        oldProductList.setCores(newProductList.getCores());
+        // 瑕佹眰鍊�
+        oldProductList.setAsk(newProductList.getAsk());
+        // 瑕佹眰鎻忚堪
+        oldProductList.setTell(newProductList.getTell());
+        // 鍗曚环
+        oldProductList.setPrice(newProductList.getPrice());
+        // 宸ユ椂鍒嗙粍
+        oldProductList.setManHour(newProductList.getManHour());
+        // 瀵间綋鏉愯川
+        oldProductList.setConductorMaterial(newProductList.getConductorMaterial());
+        // 瀵间綋绫诲瀷
+        oldProductList.setConductorType(newProductList.getConductorType());
+        List<StandardProductList> productLists = new ArrayList<>();
+        productLists.add(oldProductList);
+        return productLists;
+    }
+
+    /**
+     * 妫�楠岄」澶嶅埗鎺掑簭
+     * @param copyDto
+     * @return
+     */
+    @Override
+    public boolean copyStandardProductSort(CopyStandardProductListDto copyDto) {
+        List<StandardProductList> productLists = new ArrayList<>();
+
+        // 瀵规瘮妫�楠岄」涓�鏍风殑濉厖瑕佹眰鍊艰姹傛弿杩�
+        for (StandardProductList oldProductList : copyDto.getOldStandardProductList()) {
+            String oldItemName = oldProductList.getInspectionItemClassEn()
+                    + oldProductList.getInspectionItem()
+                    + oldProductList.getInspectionItemSubclass();
+            for (StandardProductList newProductList : copyDto.getNewStandardProductList()) {
+                String newItemName = newProductList.getInspectionItemClassEn()
+                        + newProductList.getInspectionItem()
+                        + newProductList.getInspectionItemSubclass();
+                // 鍒ゆ柇鍚嶇О鏄惁涓�鏍�
+                if (oldItemName.equals(newItemName)) {
+                    StandardProductList standardProductList = new StandardProductList();
+                    standardProductList.setId(oldProductList.getId());
+                    // 澶嶅埗鎺掑簭
+                    standardProductList.setSort(newProductList.getSort());
+                    productLists.add(standardProductList);
+                }
+            }
+        }
+        this.updateBatchById(productLists);
+        return false;
+    }
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListSupplierAskServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListSupplierAskServiceImpl.java
new file mode 100644
index 0000000..72c261f
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardProductListSupplierAskServiceImpl.java
@@ -0,0 +1,79 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.inspect.mapper.StandardProductListSupplierAskMapper;
+import com.ruoyi.inspect.pojo.StandardProductListSupplierAsk;
+import com.ruoyi.inspect.service.StandardProductListSupplierAskService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 妫�楠岄」鐩巶瀹跺瘑搴︾粦瀹氳〃
+ *
+ * @author zhuo
+ * @since 2024-09-23
+ */
+@Service
+public class StandardProductListSupplierAskServiceImpl extends ServiceImpl<StandardProductListSupplierAskMapper, StandardProductListSupplierAsk> implements StandardProductListSupplierAskService {
+
+    /**
+     * 鏌ヨ鍘傚瑕佹眰鍊肩粦瀹�
+     * @param supplierAsk
+     * @return
+     */
+    @Override
+    public List<StandardProductListSupplierAsk> selectByProductId(StandardProductListSupplierAsk supplierAsk) {
+        if (supplierAsk.getProductListId() == null) {
+            throw new BaseException("缂哄皯妫�楠岄」id");
+        }
+        return baseMapper.selectList(Wrappers.<StandardProductListSupplierAsk>lambdaQuery()
+                .eq(StandardProductListSupplierAsk::getProductListId, supplierAsk.getProductListId()));
+    }
+
+    /**
+     * 鏂板鍘傚瑕佹眰鍊肩粦瀹�
+     * @param supplierAsk
+     * @return
+     */
+    @Override
+    public Integer addProductSupplierAsk(StandardProductListSupplierAsk supplierAsk) {
+        if (supplierAsk.getProductListId() == null) {
+            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
+        }
+        // 鏌ヨ鏀瑰巶瀹舵槸鍚︾粦瀹氳繃
+        Long count = baseMapper.selectCount(Wrappers.<StandardProductListSupplierAsk>lambdaQuery()
+                .eq(StandardProductListSupplierAsk::getProductListId, supplierAsk.getProductListId())
+                .eq(StandardProductListSupplierAsk::getSupplierName, supplierAsk.getSupplierName()));
+        if (count > 0){
+            throw new BaseException("璇ヤ骇鍝佸凡缁戝畾杩囪鍘傚");
+        }
+        baseMapper.insert(supplierAsk);
+        return supplierAsk.getSupplierAskId();
+    }
+
+    /**
+     * 淇敼鍘傚瑕佹眰鍊肩粦瀹�
+     * @param supplierAsk
+     * @return
+     */
+    @Override
+    public Integer updateProductSupplierAsk(StandardProductListSupplierAsk supplierAsk) {
+        if (supplierAsk.getProductListId() == null) {
+            throw new BaseException("缂哄皯妫�楠岄」id");
+        }
+        // 鏌ヨ鏀瑰巶瀹舵槸鍚︾粦瀹氳繃
+        Long count = baseMapper.selectCount(Wrappers.<StandardProductListSupplierAsk>lambdaQuery()
+                .ne(StandardProductListSupplierAsk::getSupplierAskId, supplierAsk.getSupplierAskId())
+                .eq(StandardProductListSupplierAsk::getProductListId, supplierAsk.getProductListId())
+                .eq(StandardProductListSupplierAsk::getSupplierName, supplierAsk.getSupplierName()));
+        if (count > 0){
+            throw new BaseException("璇ユ楠岄」宸茬粦瀹氳繃璇ュ巶瀹�");
+        }
+        baseMapper.updateById(supplierAsk);
+        return supplierAsk.getSupplierAskId();
+    }
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardTemplateServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardTemplateServiceImpl.java
new file mode 100644
index 0000000..ea5bf63
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardTemplateServiceImpl.java
@@ -0,0 +1,130 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.mapper.StandardTemplateMapper;
+import com.ruoyi.inspect.pojo.StandardTemplate;
+import com.ruoyi.inspect.service.StandardTemplateService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard_template(鏍囧噯妯℃澘)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2024-03-11 13:47:52
+*/
+@Service
+@AllArgsConstructor
+public class StandardTemplateServiceImpl extends ServiceImpl<StandardTemplateMapper, StandardTemplate>
+    implements StandardTemplateService{
+
+    private StandardTemplateMapper standardTemplateMapper;
+
+
+    private final NumberGenerator<StandardTemplate> numberGenerator;
+
+    @Override
+    public IPage<StandardTemplate> selectStandardTemplatePageList(Page page, StandardTemplate standardTemplate) {
+        return standardTemplateMapper.selectStandardTemplatePageList(page, QueryWrappers.queryWrappers(standardTemplate));
+    }
+
+    @Override
+    public int addStandardTemplate(StandardTemplate standardTemplate) {
+        if (StringUtils.isBlank(standardTemplate.getNumber())) {
+            String giveCode = numberGenerator.generateNumberWithPrefix(5,
+                    "MB" + DateUtil.format(new Date(), "yyMM"),
+                    StandardTemplate::getNumber);
+            standardTemplate.setNumber(giveCode);
+        }
+        return standardTemplateMapper.insert(standardTemplate);
+    }
+
+    @Override
+    public int upStandardTemplate(StandardTemplate standardTemplate) {
+        if(standardTemplate.getThing().equals("")){
+            standardTemplate.setThing(null);
+        }
+        return standardTemplateMapper.updateById(standardTemplate);
+    }
+
+    @Override
+    public int delStandardTemplate(Integer id) {
+        return standardTemplateMapper.deleteById(id);
+    }
+
+    @Override
+    public List<StandardTemplate> getStandardTemplate() {
+        return standardTemplateMapper.selectList(Wrappers.<StandardTemplate>lambdaQuery().select(StandardTemplate::getId,StandardTemplate::getName));
+    }
+
+    @Override
+    public String getStandTempThingById(Integer templateId) {
+        StandardTemplate standardTemplate = standardTemplateMapper.selectOne(Wrappers.<StandardTemplate>lambdaQuery()
+                .eq(StandardTemplate::getId, templateId)
+                .select(StandardTemplate::getThing));
+        if(standardTemplate==null){
+            return null;
+        }else{
+            return standardTemplate.getThing();
+        }
+        // 鏌ヨ鍘嬬缉鍚庣殑鏁版嵁
+//        String thing = standardTemplateMapper.selectCompressThing(templateId);
+//        if (StringUtils.isNotBlank(thing)) {
+//            try {
+//                return DecompressMySQLData.decompress(java.util.Base64.getDecoder().decode(thing));
+//            } catch (Exception e) {
+//                throw new RuntimeException(e);
+//            }
+//        } else {
+//            return null;
+//        }
+    }
+
+    @Override
+    public String getStandTempNameById(Integer templateId) {
+        StandardTemplate standardTemplate = standardTemplateMapper.selectOne(Wrappers.<StandardTemplate>lambdaQuery()
+                .eq(StandardTemplate::getId, templateId)
+                .select(StandardTemplate::getName));
+        if(standardTemplate==null){
+            return null;
+        }else{
+            return standardTemplate.getName();
+        }
+    }
+
+    @Override
+    public StandardTemplate getStandTempIdByName(String name) {
+        return standardTemplateMapper.getStandTempIdByName(name);
+    }
+
+    /**
+     * 澶嶅埗鍘熷璁板綍妯℃澘
+     * @param newTemplate
+     * @return
+     */
+    @Override
+    public int copyStandardTemplate(StandardTemplate newTemplate) {
+        // 鏌ヨ鏃фā鏉�
+        StandardTemplate standardTemplate = baseMapper.selectById(newTemplate.getId());
+        newTemplate.setThing(standardTemplate.getThing());
+
+        if (StringUtils.isBlank(newTemplate.getNumber())) {
+            String giveCode = numberGenerator.generateNumberWithPrefix(5,
+                    "MB" + DateUtil.format(new Date(), "yyMM"),
+                    StandardTemplate::getNumber);
+            newTemplate.setNumber(giveCode);
+        }
+        newTemplate.setId(null);
+
+        return standardTemplateMapper.insert(newTemplate);
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardTreeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardTreeServiceImpl.java
new file mode 100644
index 0000000..93f803c
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StandardTreeServiceImpl.java
@@ -0,0 +1,535 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.inspect.dto.FactoryDto;
+import com.ruoyi.inspect.dto.LaboratoryDto;
+import com.ruoyi.inspect.dto.SampleTypeDto;
+import com.ruoyi.inspect.mapper.StandardProductListMapper;
+import com.ruoyi.inspect.mapper.StandardTreeMapper;
+import com.ruoyi.inspect.pojo.StandardProductList;
+import com.ruoyi.inspect.pojo.StandardTemplate;
+import com.ruoyi.inspect.pojo.StandardTree;
+import com.ruoyi.inspect.pojo.StructureTestObject;
+import com.ruoyi.inspect.service.*;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恠tandard_tree(鏍囧噯鏍�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2024-03-01 15:06:44
+ */
+@Service
+@AllArgsConstructor
+public class StandardTreeServiceImpl extends ServiceImpl<StandardTreeMapper, StandardTree>
+        implements StandardTreeService {
+
+
+    private StandardTreeMapper standardTreeMapper;
+
+    private StandardMethodListService standardMethodListService;
+
+    private StandardProductListMapper standardProductListMapper;
+
+    private StandardProductListService standardProductListService;
+
+    private StandardTemplateService standardTemplateService;
+
+    private StructureTestObjectService structureTestObjectService;
+
+
+    @Override
+    public List<FactoryDto> selectStandardTreeList() {
+        List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeList();
+        for (FactoryDto factoryDto : factoryDtos) {
+            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
+                laboratoryDto.getChildren().sort((o1, o2) -> (o1.getSort() == null ? 0 : o1.getSort())
+                        - (o2.getSort() == null ? 0 : o2.getSort()));
+                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
+//                    if (sampleTypeDto.getChildren().size() == 0) {
+                        sampleTypeDto.getChildren().addAll(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
+//                    }
+                }
+            }
+        }
+        return factoryDtos;
+    }
+
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addStandardTree(StandardTree standardTree) {
+        LambdaQueryWrapper<StandardTree> wrapper = Wrappers.<StandardTree>lambdaQuery()
+                .eq(StandardTree::getFactory, standardTree.getFactory())
+                .eq(StandardTree::getLaboratory, standardTree.getLaboratory())
+                .eq(StandardTree::getSampleType, standardTree.getSampleType())
+                .eq(StandardTree::getSample, standardTree.getSample())
+                .eq(StandardTree::getModel, standardTree.getModel());
+        if (StringUtils.isNotBlank(standardTree.getSample())) {
+            wrapper.eq(StandardTree::getSample, standardTree.getSample());
+        }
+
+        StandardTree tree = standardTreeMapper.selectOne(wrapper);
+        if (tree != null) {
+            throw new BaseException("璇ュ瀷鍙峰凡瀛樺湪");
+        }
+        return standardTreeMapper.insert(standardTree);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int delStandardTree(String tree) {
+        String[] trees = tree.split(" - ");
+        switch (trees.length) {
+            case 5:
+                if (trees[3].equals("null")) {
+                    standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).isNull(StandardTree::getSample).eq(StandardTree::getModel, trees[4]));
+                } else {
+                    standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]).eq(StandardTree::getModel, trees[4]));
+                }
+                break;
+            /*case 4:
+                standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]));
+                break;
+            case 3:
+                standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]));
+                break;
+            case 2:
+                standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]));
+                break;
+            case 1:
+                standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]));
+                break;*/
+        }
+        return 1;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addStandardProduct(String ids, String tree) {
+        String[] trees = tree.split(" - ");
+        JSONArray jsonArray = JSON.parseArray(ids);
+        for (Object o : jsonArray) {
+            StandardProductList standardProductList = standardTreeMapper.selectStandardProductById(Integer.parseInt("" + o));
+            standardProductList.setFactory(trees[0]);
+            try {
+                standardProductList.setLaboratory(trees[1]);
+            } catch (Exception e) {
+            }
+            try {
+                standardProductList.setSampleType(trees[2]);
+            } catch (Exception e) {
+            }
+            try {
+                standardProductList.setSample(trees[3]);
+            } catch (Exception e) {
+            }
+            try {
+                standardProductList.setModel(trees[4]);
+            } catch (Exception e) {
+            }
+            standardProductListMapper.insert(standardProductList);
+        }
+        return 1;
+    }
+
+    @Override
+    public List<SampleTypeDto> getStandardTree2() {
+        return standardTreeMapper.getStandardTree2();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int upStandardProducts(Map<String, Object> product) {
+        List<Integer> ids = JSON.parseArray(product.get("ids") + "");
+        StandardProductList productList = JSON.parseObject(JSON.toJSONString(product.get("standardProductList")), StandardProductList.class);
+        if (productList.getMethodS() != null) {
+            standardProductListMapper.update(productList, Wrappers.<StandardProductList>lambdaUpdate().in(StandardProductList::getId, ids).like(StandardProductList::getMethod, productList.getMethodS()));
+            return 1;
+        }
+        if (productList.getRadiusList() != null) {
+            standardProductListMapper.update(productList, Wrappers.<StandardProductList>lambdaUpdate().in(StandardProductList::getId, ids).like(StandardProductList::getRadiusList, productList.getRadius()));
+            return 1;
+        }
+        standardProductListMapper.update(productList, Wrappers.<StandardProductList>lambdaUpdate().in(StandardProductList::getId, ids));
+        return 1;
+    }
+
+    @Override
+    public List<StandardTree> getStandTreeBySampleType(String laboratory, String sampleType) {
+        return standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery()
+                .eq(StandardTree::getLaboratory, laboratory)
+                .eq(StandardTree::getSampleType, sampleType)
+                .select(StandardTree::getModel, StandardTree::getSample));
+    }
+
+    /**
+     * 娌冲彛妫�娴嬩腑蹇冨鍏�
+     * @param file
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void inExcelOfTree(MultipartFile file) {
+        InputStream inputStream;
+        try {
+            inputStream = file.getInputStream();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        List<StandardProductList> lists = new ArrayList<>();
+        AtomicReference<String> laboratory = new AtomicReference<>();
+        ExcelUtil.readBySax(inputStream, 0, (i, l, list) -> {
+            StandardProductList str = new StandardProductList();
+            if (i == 0 && l == 1) {
+                laboratory.set(standardTreeMapper.getLaboratory(list.get(1) + ""));
+                if (laboratory.get() == null) {
+                    throw new BaseException("妫�楠屽璞′笉瀛樺湪锛�" + list.get(1));
+                }
+            }
+            if (i == 0 && l >= 1) {
+                Integer standardMethodId = standardMethodListService.getStandardMethodId(list.get(0) + "");
+                if (standardMethodId == null) {
+                    throw new BaseException("鏍囧噯缂栧彿涓嶅瓨鍦細" + list.get(0));
+                }
+                str.setStandardMethodListId(standardMethodId);
+                str.setSampleType(list.get(1) + "");
+                if (list.get(2) != null) {
+                    String sample = baseMapper.selSample(list.get(2) + "");
+                    if (sample == null) {
+                        throw new BaseException("鏍峰搧涓嶅瓨鍦細" + list.get(2));
+                    }
+                    str.setSample(list.get(2) + "");
+                } else {
+                    str.setSample(null);
+                }
+                if (list.get(3) != null) {
+                    str.setModel(list.get(3) + "");
+                    Long aLong = standardTreeMapper.selectCount(Wrappers.<StandardTree>lambdaQuery()
+                            .eq(StandardTree::getModel, str.getModel())
+                            .eq(StandardTree::getSampleType, list.get(1) + ""));
+                    if (aLong == 0) {
+                        StandardTree standardTree = new StandardTree();
+                        standardTree.setFactory("涓ぉ绉戞妧妫�娴嬩腑蹇�");
+                        standardTree.setLaboratory(laboratory.get());
+                        standardTree.setSampleType(str.getSampleType());
+                        standardTree.setSample(str.getSample());
+                        standardTree.setModel(str.getModel());
+                        standardTreeMapper.insert(standardTree);
+                    }
+                } else {
+                    str.setModel(null);
+                }
+                str.setInspectionItem(list.get(4) + "");
+                if (list.get(6) == null) {
+                    str.setInspectionItemSubclass("");
+                } else {
+                    str.setInspectionItemSubclass(list.get(6).toString());
+                }
+                StandardProductList db_str;
+                try {
+                    db_str = standardProductListMapper.getOne(str.getStandardMethodListId(), str.getInspectionItem(), str.getSample(), str.getInspectionItemSubclass(), str.getModel(), str.getInspectionItemClass());
+                } catch (Exception e) {
+                    throw new BaseException("閲嶅鏌ヨ锛�" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
+                }
+                if (ObjectUtils.isNotEmpty(db_str)) {
+                    str.setId(db_str.getId());
+                    str.setStructureItemParameterId(db_str.getStructureItemParameterId());
+                }
+                if (list.get(8) != null) {
+                    str.setMethodS(list.get(8) + "");
+                }
+
+                if (list.get(11) == null) {
+                    str.setTell(null);
+                } else {
+                    str.setTell(list.get(11).toString());
+                }
+
+                if (list.get(12) == null) {
+                    str.setAsk(null);
+                } else {
+                    str.setAsk(list.get(12).toString());
+                }
+
+                if (list.get(13) == null) {
+                    str.setPrice(null);
+                } else {
+                    str.setPrice((list.get(13).toString()));
+                }
+
+                if (list.get(14) == null) {
+                    str.setManHour(null);
+                } else {
+                    str.setManHour(list.get(14).toString());
+                }
+
+                StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list.get(21)));
+                if (standTempIdByName != null) {
+                    str.setTemplateId(standTempIdByName.getId());
+                } else {
+                    throw new BaseException("妯℃澘涓嶅瓨鍦細" + list.get(21));
+                }
+                str.setFactory("涓ぉ绉戞妧妫�娴嬩腑蹇�");
+                str.setLaboratory(laboratory.get());
+                str.setState(1);
+                str.setTree(str.getFactory() + " - " + str.getLaboratory() + " - " + str.getSampleType() + " - " + str.getSample() + " - " + (str.getModel() == null ? "" : str.getModel()));
+                try {
+                    str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
+                } catch (Exception e) {
+                    str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\",\"" + str.getSample() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
+                }
+                if (str.getStructureItemParameterId() == null) {
+                    throw new BaseException("妫�楠岄」鐩笉瀛樺湪锛�" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
+                }
+                lists.add(str);
+            }
+        });
+        lists.forEach(a -> {
+            if (a.getId() != null) {
+                standardProductListMapper.updateById(a);
+            } else {
+                standardProductListMapper.insert(a);
+            }
+        });
+    }
+
+    @Override
+    public void importWorkstationExcel(MultipartFile file) {
+        InputStream inputStream;
+        try {
+            inputStream = file.getInputStream();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        List<StandardProductList> lists = new ArrayList<>();
+        AtomicReference<String> laboratory = new AtomicReference<>();
+        ExcelUtil.readBySax(inputStream, 0, (i, l, list) -> {
+            StandardProductList str = new StandardProductList();
+            if (i == 0 && l == 1) {
+                laboratory.set(standardTreeMapper.getLaboratory(list.get(1) + ""));
+                if (laboratory.get() == null) {
+                    throw new BaseException("妫�楠屽璞′笉瀛樺湪锛�" + list.get(1));
+                }
+            }
+            if (i == 0 && l >= 1) {
+                Integer standardMethodId = standardMethodListService.getStandardMethodId(list.get(0) + "");
+                if (standardMethodId == null) {
+                    throw new BaseException("鏍囧噯缂栧彿涓嶅瓨鍦細" + list.get(0));
+                }
+                str.setStandardMethodListId(standardMethodId);
+                str.setSampleType(list.get(1) + "");
+                if (list.get(2) != null) {
+                    String sample = baseMapper.selSample(list.get(2) + "");
+                    if (sample == null) {
+                        throw new BaseException("鏍峰搧涓嶅瓨鍦細" + list.get(2));
+                    }
+                    str.setSample(list.get(2) + "");
+                } else {
+                    str.setSample(null);
+                }
+                if (list.get(3) != null) {
+                    str.setModel(list.get(3) + "");
+                    Long aLong = standardTreeMapper.selectCount(Wrappers.<StandardTree>lambdaQuery()
+                            .eq(StandardTree::getModel, str.getModel())
+                            .eq(StandardTree::getSampleType, list.get(1) + ""));
+                    if (aLong == 0) {
+                        StandardTree standardTree = new StandardTree();
+                        standardTree.setFactory("涓ぉ绉戞妧妫�娴嬩腑蹇�");
+                        standardTree.setLaboratory(laboratory.get());
+                        standardTree.setSampleType(str.getSampleType());
+                        standardTree.setSample(str.getSample());
+                        standardTree.setModel(str.getModel());
+                        standardTreeMapper.insert(standardTree);
+                    }
+                } else {
+                    str.setModel(null);
+                }
+                str.setInspectionItemClass(list.get(4).toString());
+                str.setInspectionItemClassEn(list.get(5).toString());
+                // 寮�濮嬪姞2
+                str.setInspectionItem(list.get(6) + "");
+                if (list.get(8) == null) {
+                    str.setInspectionItemSubclass("");
+                } else {
+                    str.setInspectionItemSubclass(list.get(8).toString());
+                }
+                StandardProductList db_str;
+                try {
+                    db_str = standardProductListMapper.getOne(str.getStandardMethodListId(), str.getInspectionItem(), str.getSample(), str.getInspectionItemSubclass(), str.getModel(), str.getInspectionItemClass());
+                } catch (Exception e) {
+                    throw new BaseException("閲嶅鏌ヨ锛�" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
+                }
+                if (ObjectUtils.isNotEmpty(db_str)) {
+                    str.setId(db_str.getId());
+                    str.setStructureItemParameterId(db_str.getStructureItemParameterId());
+                }
+                if (list.get(10) != null) {
+                    str.setMethodS(list.get(10) + "");
+                }
+                if (list.get(13) == null) {
+                    str.setTell(null);
+                } else {
+                    str.setTell(list.get(13).toString());
+                }
+
+                if (list.get(14) == null) {
+                    str.setAsk(null);
+                } else {
+                    str.setAsk(list.get(14).toString());
+                }
+
+                if (list.get(15) == null) {
+                    str.setPrice(null);
+                } else {
+                    str.setPrice((list.get(15).toString()));
+                }
+
+                if (list.get(16) == null) {
+                    str.setManHour(null);
+                } else {
+                    str.setManHour(list.get(16).toString());
+                }
+
+                StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list.get(23)));
+                if (standTempIdByName != null) {
+                    str.setTemplateId(standTempIdByName.getId());
+                } else {
+                    throw new BaseException("妯℃澘涓嶅瓨鍦細" + list.get(23));
+                }
+                str.setFactory("涓ぉ绉戞妧妫�娴嬩腑蹇�");
+                str.setLaboratory(laboratory.get());
+                str.setState(1);
+                str.setTree(str.getFactory() + " - " + str.getLaboratory() + " - " + str.getSampleType() + " - " + str.getSample() + " - " + (str.getModel() == null ? "" : str.getModel()));
+                try {
+                    str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
+                } catch (Exception e) {
+                    str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\",\"" + str.getSample() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
+                }
+                if (str.getStructureItemParameterId() == null) {
+                    throw new BaseException("妫�楠岄」鐩笉瀛樺湪锛�" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
+                }
+                lists.add(str);
+            }
+        });
+        lists.forEach(a -> {
+            if (a.getId() != null) {
+                standardProductListMapper.updateById(a);
+            } else {
+                standardProductListMapper.insert(a);
+            }
+        });
+    }
+
+    @Override
+    public boolean updateTreeSort(List<FactoryDto> list) {
+        List<StructureTestObject> testObjects = new ArrayList<>();
+        for (FactoryDto factoryDto : list) {
+            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
+                List<SampleTypeDto> children = laboratoryDto.getChildren();
+                int sort = 0;
+                // 寰幆绗笁灞�
+                for (SampleTypeDto child : children) {
+                    StructureTestObject structureTestObject = new StructureTestObject();
+                    structureTestObject.setSort(sort);
+                    structureTestObject.setId(child.getSampleTypeId());
+                    testObjects.add(structureTestObject);
+                    sort++;
+                }
+            }
+        }
+        structureTestObjectService.updateBatchById(testObjects);
+
+        return true;
+    }
+
+    /**
+     * 淇敼鏍囧噯鏁�
+     * @param standardTree
+     * @return
+     */
+    @Override
+    public int updateStandardTree(StandardTree standardTree) {
+        // 淇敼鍚嶇О鍖归厤鐨勬爣鍑嗘爲涓嬬殑妫�楠岄」鐩�
+        // 鏌ヨ鎵�鏈夊璞�+鍚嶇О鐨勬爲
+
+        List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
+                .eq(StandardProductList::getSample, standardTree.getSample())
+                .eq(StandardProductList::getSampleType, standardTree.getSampleType())
+                .eq(StandardProductList::getModel, standardTree.getOldModel()));
+        if (CollectionUtils.isNotEmpty(standardProductLists)) {
+            for (StandardProductList standardProductList : standardProductLists) {
+                // 淇敼鏍峰搧鍚嶇О
+                standardProductList.setModel(standardTree.getModel());
+                // 淇敼鏍戝悕绉�
+                // 闇�瑕佹埅鍙栫鍥涚骇, 閬垮厤涓夊洓绾у悕绉颁竴鏍蜂慨鏀归敊璇�
+                String[] trees = standardProductList.getTree().split(" - ");
+                trees[4] = standardTree.getModel();
+                List<String> list = CollUtil.newArrayList(trees);
+                String newName = CollUtil.join(list, " - ");
+                standardProductList.setTree(newName);
+            }
+            standardProductListService.updateBatchById(standardProductLists);
+        }
+
+        // 淇敼鏍囧噯鏁版楠岄」鐩�
+        LambdaUpdateWrapper<StandardTree> wrapper = Wrappers.<StandardTree>lambdaUpdate()
+                .eq(StandardTree::getFactory, standardTree.getFactory())
+                .eq(StandardTree::getLaboratory, standardTree.getLaboratory())
+                .eq(StandardTree::getSampleType, standardTree.getSampleType())
+                .eq(StandardTree::getModel, standardTree.getOldModel())
+                .set(StandardTree::getModel, standardTree.getModel());
+        if (StringUtils.isNotBlank(standardTree.getSample())) {
+            wrapper.eq(StandardTree::getSample, standardTree.getSample());
+        }
+        return standardTreeMapper.update(null, wrapper);
+    }
+
+    @Override
+    public void resetTreeOfPrice(String tree, Integer standardId) {
+        standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId).set(StandardProductList::getPrice, null));
+    }
+
+    @Override
+    public void resetTreeOfHour(String tree, Integer standardId) {
+        standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId).set(StandardProductList::getManHour, null));
+    }
+
+    @Override
+    public void resetTreeOfAsk(String tree, Integer standardId) {
+        standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId)
+                .set(StandardProductList::getAsk, null)
+                .set(StandardProductList::getTell, null)
+                .set(StandardProductList::getSection, null)
+                .set(StandardProductList::getCores, null)
+                .set(StandardProductList::getConductorMaterial, null)
+                .set(StandardProductList::getConductorType, null)
+                .set(StandardProductList::getPrice, null)
+                .set(StandardProductList::getManHour, null));
+    }
+
+}
+
+
+
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureItemParameterServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureItemParameterServiceImpl.java
new file mode 100644
index 0000000..5604e9f
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureItemParameterServiceImpl.java
@@ -0,0 +1,24 @@
+package com.ruoyi.inspect.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.StructureItemParameterMapper;
+import com.ruoyi.inspect.pojo.StructureItemParameter;
+import com.ruoyi.inspect.service.StructureItemParameterService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+@AllArgsConstructor
+public class StructureItemParameterServiceImpl extends ServiceImpl<StructureItemParameterMapper, StructureItemParameter> implements StructureItemParameterService {
+
+    @Resource
+    private StructureItemParameterMapper structureItemParameterMapper;
+
+    @Override
+    public void removeNoSample(String sample) {
+        structureItemParameterMapper.removeNoSample("\""+sample+"\"");
+    }
+}
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureTestObjectPartServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureTestObjectPartServiceImpl.java
new file mode 100644
index 0000000..f0cc96d
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureTestObjectPartServiceImpl.java
@@ -0,0 +1,75 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.mapper.ProductPartMapper;
+import com.ruoyi.inspect.mapper.StructureTestObjectPartMapper;
+import com.ruoyi.inspect.pojo.ProductPart;
+import com.ruoyi.inspect.pojo.StructureTestObjectPart;
+import com.ruoyi.inspect.service.StructureTestObjectPartService;
+
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 妫�楠屽璞¢浂浠惰〃
+ *
+ * @author zhuo
+ * @since 2024-08-07
+ */
+@Transactional
+@Service
+@AllArgsConstructor
+public class StructureTestObjectPartServiceImpl extends ServiceImpl<StructureTestObjectPartMapper, StructureTestObjectPart> implements StructureTestObjectPartService {
+
+    private ProductPartMapper productPartMapper;
+
+    @Override
+    public IPage<StructureTestObjectPart> selectByTestObjectId(Page page, StructureTestObjectPart structureTestObjectPart) {
+        return baseMapper.selectListByTestObjectId(page, QueryWrappers.queryWrappers(structureTestObjectPart),structureTestObjectPart.getTestObjectId());
+    }
+
+    @Override
+    public void addTestObjectPart(StructureTestObjectPart structureTestObjectPart) {
+        this.isPartNoExist(structureTestObjectPart.getPartNo(), null);
+        if (structureTestObjectPart.getTestObjectId() == null) {
+            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
+        }
+        baseMapper.insert(structureTestObjectPart);
+    }
+
+    @Override
+    public void updateTestObjectPart(StructureTestObjectPart structureTestObjectPart) {
+        this.isPartNoExist(structureTestObjectPart.getPartNo(),  structureTestObjectPart.getId());
+        if (structureTestObjectPart.getTestObjectId() == null) {
+            throw new BaseException("缂哄皯浜у搧瀵硅薄id");
+        }
+        baseMapper.updateById(structureTestObjectPart);
+    }
+
+    // 鍒ゆ柇闆朵欢鍙锋槸鍚﹀瓨鍦�
+    public void isPartNoExist(String partNo, Integer id) {
+        // 闆朵欢鍙峰敮涓� 浣嗕笉蹇呭~
+        if (StringUtils.isNotBlank(partNo)) {
+            Long count = productPartMapper.selectCount(new LambdaQueryWrapper<ProductPart>()
+                    .eq(ProductPart::getPartNo, partNo));
+            Long selectCount = baseMapper.selectCount(Wrappers.<StructureTestObjectPart>lambdaQuery()
+                    .eq(StructureTestObjectPart::getPartNo, partNo)
+                    .ne(id != null, StructureTestObjectPart::getId, id));
+            if (count > 0 || selectCount > 0) {
+                throw new BaseException("璇ラ浂浠跺彿宸茬粦瀹氳繃妫�楠屽璞�");
+            }
+        } else {
+            throw new BaseException("璇疯緭鍏ラ浂浠跺彿");
+        }
+    }
+}
+
diff --git a/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureTestObjectServiceImpl.java b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureTestObjectServiceImpl.java
new file mode 100644
index 0000000..29d6ec2
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/inspect/service/impl/StructureTestObjectServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.StructureTestObjectMapper;
+import com.ruoyi.inspect.pojo.StructureTestObject;
+import com.ruoyi.inspect.service.StructureTestObjectService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 妫�娴嬪璞�
+ *
+ * @author zhuo
+ * @since 2024-09-13
+ */
+@Service
+public class StructureTestObjectServiceImpl extends ServiceImpl<StructureTestObjectMapper, StructureTestObject> implements StructureTestObjectService {
+
+}
+
diff --git a/basic-server/src/main/resources/mapper/CertificationMapper.xml b/basic-server/src/main/resources/mapper/CertificationMapper.xml
index 4926d05..40304a3 100644
--- a/basic-server/src/main/resources/mapper/CertificationMapper.xml
+++ b/basic-server/src/main/resources/mapper/CertificationMapper.xml
@@ -1,7 +1,7 @@
 <?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.basic.mapper.CertificationMapper">
-    <select id="getCertificationDetail" resultType="com.ruoyi.basic.pojo.Certification">
+    <select id="getCertificationDetail" resultType="com.ruoyi.inspect.pojo.Certification">
         select b.*
         from ( select a.`name`, a.`code`,a.organization,a.explanation,a.first_issuance_date,a.latest_issuance_date,c.expire_time FROM
             (SELECT id,name,MIN(date_of_issuance) AS first_issuance_date,
diff --git a/basic-server/src/main/resources/mapper/IfsInventoryQuantityMapper.xml b/basic-server/src/main/resources/mapper/IfsInventoryQuantityMapper.xml
index 2b615be..83c5e12 100644
--- a/basic-server/src/main/resources/mapper/IfsInventoryQuantityMapper.xml
+++ b/basic-server/src/main/resources/mapper/IfsInventoryQuantityMapper.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.ruoyi.basic.mapper.IfsInventoryQuantityMapper">
 
-    <select id="printLabel" resultType="com.ruoyi.basic.dto.IfsInventoryQuantityDto">
+    <select id="printLabel" resultType="com.ruoyi.inspect.dto.IfsInventoryQuantityDto">
         SELECT io.sample sample_name,
         iiq.supplier_name,
         io.part_detail part_desc,
diff --git a/basic-server/src/main/resources/mapper/LaboratoryMapper.xml b/basic-server/src/main/resources/mapper/LaboratoryMapper.xml
index c3ab2b4..f27f412 100644
--- a/basic-server/src/main/resources/mapper/LaboratoryMapper.xml
+++ b/basic-server/src/main/resources/mapper/LaboratoryMapper.xml
@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.LaboratoryMapper">
 
-    <select id="selectItemParameter" resultType="com.ruoyi.basic.pojo.Laboratory">
+    <select id="selectItemParameter" resultType="com.ruoyi.inspect.pojo.Laboratory">
         select * from
         (
         select l.id,
diff --git a/basic-server/src/main/resources/mapper/ProductMapper.xml b/basic-server/src/main/resources/mapper/ProductMapper.xml
index a13b18d..c1b0953 100644
--- a/basic-server/src/main/resources/mapper/ProductMapper.xml
+++ b/basic-server/src/main/resources/mapper/ProductMapper.xml
@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.ProductMapper">
 
-    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.Product">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.Product">
             <id property="id" column="id" jdbcType="INTEGER"/>
             <result property="name" column="name" jdbcType="VARCHAR"/>
             <result property="nameEn" column="name_en" jdbcType="VARCHAR"/>
@@ -20,7 +20,7 @@
         create_user,update_user,create_time,
         update_time,object_id
     </sql>
-    <select id="selectProductListByObjectId" resultType="com.ruoyi.basic.pojo.Product">
+    <select id="selectProductListByObjectId" resultType="com.ruoyi.inspect.pojo.Product">
         select * from (
         select p.id,
                p.name,
diff --git a/basic-server/src/main/resources/mapper/ProductPartMapper.xml b/basic-server/src/main/resources/mapper/ProductPartMapper.xml
index f883d3c..6a77f9c 100644
--- a/basic-server/src/main/resources/mapper/ProductPartMapper.xml
+++ b/basic-server/src/main/resources/mapper/ProductPartMapper.xml
@@ -3,7 +3,7 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.ProductPartMapper">
-    <select id="selectListByProductId" resultType="com.ruoyi.basic.pojo.ProductPart">
+    <select id="selectListByProductId" resultType="com.ruoyi.inspect.pojo.ProductPart">
         SELECT * from product_part pp
         where  pp.product_id=#{productId}
     </select>
diff --git a/basic-server/src/main/resources/mapper/ProductSupplierDensityMapper.xml b/basic-server/src/main/resources/mapper/ProductSupplierDensityMapper.xml
index 4f47e62..ffe0354 100644
--- a/basic-server/src/main/resources/mapper/ProductSupplierDensityMapper.xml
+++ b/basic-server/src/main/resources/mapper/ProductSupplierDensityMapper.xml
@@ -1,7 +1,7 @@
 <?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.basic.mapper.ProductSupplierDensityMapper">
-    <select id="selectListByProductId" resultType="com.ruoyi.basic.pojo.ProductSupplierDensity">
+    <select id="selectListByProductId" resultType="com.ruoyi.inspect.pojo.ProductSupplierDensity">
         SELECT * from product_supplier_density pp
         where  pp.product_id=#{productId}
     </select>
diff --git a/basic-server/src/main/resources/mapper/SealMapper.xml b/basic-server/src/main/resources/mapper/SealMapper.xml
index 5cb3595..d31b318 100644
--- a/basic-server/src/main/resources/mapper/SealMapper.xml
+++ b/basic-server/src/main/resources/mapper/SealMapper.xml
@@ -3,7 +3,7 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.SealMapper">
-    <select id="selectSeal" resultType="com.ruoyi.basic.pojo.Seal">
+    <select id="selectSeal" resultType="com.ruoyi.inspect.pojo.Seal">
         select l.id,s.lab_id,l.laboratory_name ,s.address, s.type as Type,s.create_time
         from seal s  LEFT JOIN laboratory l  on s.lab_id=l.id
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
@@ -11,7 +11,7 @@
         </if>
 
     </select>
-    <select id="selectLaboratory" resultType="com.ruoyi.basic.pojo.Laboratory">
+    <select id="selectLaboratory" resultType="com.ruoyi.inspect.pojo.Laboratory">
         SELECT *
         from laboratory
         WHERE id = #{labId}
diff --git a/basic-server/src/main/resources/mapper/StandardMethodListMapper.xml b/basic-server/src/main/resources/mapper/StandardMethodListMapper.xml
index 957fd1f..25c6462 100644
--- a/basic-server/src/main/resources/mapper/StandardMethodListMapper.xml
+++ b/basic-server/src/main/resources/mapper/StandardMethodListMapper.xml
@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.StandardMethodListMapper">
 
-    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.StandardMethodList">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.StandardMethodList">
         <id property="id" column="id" jdbcType="INTEGER"/>
         <result property="code" column="code" jdbcType="VARCHAR"/>
         <result property="name" column="name" jdbcType="VARCHAR"/>
@@ -25,14 +25,14 @@
         from user
         where id = #{id}
     </select>
-    <select id="selectStandardMethodLists" resultType="com.ruoyi.basic.pojo.StandardMethodList">
+    <select id="selectStandardMethodLists" resultType="com.ruoyi.inspect.pojo.StandardMethodList">
         select id, code, name, remark
         from standard_method
         where is_use = 1
         and is_product = 1
         and structure_test_object_id LIKE CONCAT('%[', #{tree}, ']%')
     </select>
-    <select id="selectParameterList" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="selectParameterList" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select inspection_item,
                inspection_item_subclass,
                laboratory,
@@ -52,7 +52,7 @@
         from structure_item_parameter
         where method = #{code}
     </select>
-    <select id="selectStandardMethodLists2" resultType="com.ruoyi.basic.pojo.StandardMethodList">
+    <select id="selectStandardMethodLists2" resultType="com.ruoyi.inspect.pojo.StandardMethodList">
         select sml.id, sml.code, sml.name,sml.remark, sml.create_time, u.name create_user_name
         from standard_method_list sml
         left join user u on u.id = sml.create_user
@@ -70,19 +70,19 @@
             and model = #{data5}
         </if>
     </select>
-    <select id="selectStandardMethodLists3" resultType="com.ruoyi.basic.pojo.StandardMethodList">
+    <select id="selectStandardMethodLists3" resultType="com.ruoyi.inspect.pojo.StandardMethodList">
         select id, code, name, remark
         from standard_method
         where is_use = 1
           and is_product = 1
           and structure_test_object_id LIKE CONCAT('%', #{tree}, '%')
     </select>
-    <select id="selectListEnum" resultType="com.ruoyi.basic.pojo.StandardMethodList">
+    <select id="selectListEnum" resultType="com.ruoyi.inspect.pojo.StandardMethodList">
         select id,code,name from standard_method
         where is_product = 1
         and is_use = 1
     </select>
-    <select id="selectStandardMethodListsByNull" resultType="com.ruoyi.basic.pojo.StandardMethodList">
+    <select id="selectStandardMethodListsByNull" resultType="com.ruoyi.inspect.pojo.StandardMethodList">
         select id, code, name, remark
         from standard_method
         where is_use = 1
diff --git a/basic-server/src/main/resources/mapper/StandardMethodMapper.xml b/basic-server/src/main/resources/mapper/StandardMethodMapper.xml
index 739d2d4..3ab8231 100644
--- a/basic-server/src/main/resources/mapper/StandardMethodMapper.xml
+++ b/basic-server/src/main/resources/mapper/StandardMethodMapper.xml
@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.StandardMethodMapper">
 
-    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.StandardMethod">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.StandardMethod">
         <id property="id" column="id" jdbcType="INTEGER"/>
         <result property="code" column="code" jdbcType="VARCHAR"/>
         <result property="name" column="name" jdbcType="VARCHAR"/>
@@ -15,7 +15,7 @@
         <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
     </resultMap>
 
-    <select id="selectStandardMethodList" resultType="com.ruoyi.basic.pojo.StandardMethod">
+    <select id="selectStandardMethodList" resultType="com.ruoyi.inspect.pojo.StandardMethod">
         select * from (
                 select sm.id,
                 sm.code,
@@ -42,7 +42,7 @@
             ${ew.customSqlSegment}
         </if>
     </select>
-    <select id="selectStandMethodById" resultType="com.ruoyi.basic.pojo.StandardMethod">
+    <select id="selectStandMethodById" resultType="com.ruoyi.inspect.pojo.StandardMethod">
         select sm.id,
                sm.code,
                sm.name,
diff --git a/basic-server/src/main/resources/mapper/StandardProductListMapper.xml b/basic-server/src/main/resources/mapper/StandardProductListMapper.xml
index 52d6bfe..112ae89 100644
--- a/basic-server/src/main/resources/mapper/StandardProductListMapper.xml
+++ b/basic-server/src/main/resources/mapper/StandardProductListMapper.xml
@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.StandardProductListMapper">
 
-    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.StandardProductList">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.StandardProductList">
             <id property="id" column="id" jdbcType="INTEGER"/>
             <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
             <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
@@ -55,7 +55,7 @@
           and standard_method_list_id = #{methodId}
           and sort between #{endIndex} and #{beginIndex} - 1
     </update>
-    <select id="standardProductListIPage" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="standardProductListIPage" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select spl.* from standard_product_list spl
         left join product p on spl.sample = p.name
         where standard_method_list_id = #{id}
@@ -72,7 +72,7 @@
         order by p.id
         group by spl.id
     </select>
-    <select id="getOne" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="getOne" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select * from standard_product_list
         where standard_method_list_id = #{standardMethodListId}
         and inspection_item = #{inspectionItem}
@@ -92,7 +92,7 @@
             and inspection_item_class = #{inspectionItemClass}
         </if>
     </select>
-    <select id="selectDetail" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="selectDetail" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select * from standard_product_list
         where standard_method_list_id = #{standardMethodListId}
         and state =#{state}
@@ -111,7 +111,7 @@
                      WHEN man_hour_group REGEXP '[0-9]+' THEN CAST(SUBSTRING(man_hour_group, 2)AS UNSIGNED) END -- 鎻愬彇瀛楁瘝鍚庨潰鐨勬暟瀛楅儴鍒�
                 ,id asc
     </select>
-    <select id="selectDetail2" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="selectDetail2" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select * from standard_product_list
         where standard_method_list_id = #{standardMethodListId}
           and state =#{state}
diff --git a/basic-server/src/main/resources/mapper/StandardTemplateMapper.xml b/basic-server/src/main/resources/mapper/StandardTemplateMapper.xml
index 34a8b0e..d3f5591 100644
--- a/basic-server/src/main/resources/mapper/StandardTemplateMapper.xml
+++ b/basic-server/src/main/resources/mapper/StandardTemplateMapper.xml
@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.StandardTemplateMapper">
 
-    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.StandardTemplate">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.StandardTemplate">
             <id property="id" column="id" jdbcType="INTEGER"/>
             <result property="name" column="name" jdbcType="VARCHAR"/>
             <result property="remark" column="remark" jdbcType="VARCHAR"/>
@@ -15,7 +15,7 @@
             <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
     </resultMap>
 
-    <select id="selectStandardTemplatePageList" resultType="com.ruoyi.basic.pojo.StandardTemplate">
+    <select id="selectStandardTemplatePageList" resultType="com.ruoyi.inspect.pojo.StandardTemplate">
         select * from (
         select st.id, st.name,st.number, st.remark, u2.name create_user_name, u3.name update_user_name, st.create_time, st.update_time
         from standard_template st
@@ -26,7 +26,7 @@
             ${ew.customSqlSegment}
         </if>
     </select>
-    <select id="getStandTempIdByName" resultType="com.ruoyi.basic.pojo.StandardTemplate">
+    <select id="getStandTempIdByName" resultType="com.ruoyi.inspect.pojo.StandardTemplate">
         select id from standard_template where name=#{name}
     </select>
     <!-- 鏌ヨ鍘嬬缉鍚庣殑鏁版嵁 -->
diff --git a/basic-server/src/main/resources/mapper/StandardTreeMapper.xml b/basic-server/src/main/resources/mapper/StandardTreeMapper.xml
index 74ded82..f63405f 100644
--- a/basic-server/src/main/resources/mapper/StandardTreeMapper.xml
+++ b/basic-server/src/main/resources/mapper/StandardTreeMapper.xml
@@ -3,7 +3,7 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.StandardTreeMapper">
-    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.StandardTree">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.StandardTree">
         <id property="id" column="id" jdbcType="INTEGER"/>
         <result property="factory" column="factory" jdbcType="VARCHAR"/>
         <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
@@ -16,19 +16,19 @@
         <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
     </resultMap>
 
-    <resultMap id="FactoryDto" type="com.ruoyi.basic.dto.FactoryDto">
+    <resultMap id="FactoryDto" type="com.ruoyi.inspect.dto.FactoryDto">
         <result property="label" column="factory"/>
         <result property="value" column="factory"/>
         <collection property="children" resultMap="LaboratoryDto"/>
     </resultMap>
 
-    <resultMap id="LaboratoryDto" type="com.ruoyi.basic.dto.LaboratoryDto">
+    <resultMap id="LaboratoryDto" type="com.ruoyi.inspect.dto.LaboratoryDto">
         <result property="label" column="laboratory"/>
         <result property="value" column="laboratory"/>
         <collection property="children" resultMap="SampleTypeDto"/>
     </resultMap>
 
-    <resultMap id="SampleTypeDto" type="com.ruoyi.basic.dto.SampleTypeDto">
+    <resultMap id="SampleTypeDto" type="com.ruoyi.inspect.dto.SampleTypeDto">
         <result property="label" column="sample_type"/>
         <result property="value" column="sample_type"/>
         <result property="sampleTypeId" column="sample_type_id"/>
@@ -38,7 +38,7 @@
         <collection property="children" resultMap="SampleDto"/>
     </resultMap>
 
-    <resultMap id="SampleDto" type="com.ruoyi.basic.dto.SampleDto">
+    <resultMap id="SampleDto" type="com.ruoyi.inspect.dto.SampleDto">
         <result property="label" column="sample"/>
         <result property="value" column="sample"/>
         <result property="partNo" column="sample_part_no"/>
@@ -46,7 +46,7 @@
         <collection property="children" resultMap="ModelDto"/>
     </resultMap>
 
-    <resultMap id="ModelDto" type="com.ruoyi.basic.dto.ModelDto">
+    <resultMap id="ModelDto" type="com.ruoyi.inspect.dto.ModelDto">
         <result property="label" column="model"/>
         <result property="value" column="model"/>
     </resultMap>
@@ -108,7 +108,7 @@
         order by l.id, CAST(sto.code AS DECIMAL), p.id, ISNULL(st.id), st.id
     </select>
 
-    <select id="selectStandardProductById" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="selectStandardProductById" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select inspection_item,
                inspection_item_subclass,
                laboratory,
@@ -128,7 +128,7 @@
         from structure_item_parameter
         where id = #{id}
     </select>
-    <select id="getStandardProductListBySample" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="getStandardProductListBySample" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select inspection_item,
                inspection_item_subclass,
                laboratory,
@@ -154,7 +154,7 @@
            or sp.sample = ''
            or sp.sample = '[]'
     </select>
-    <select id="getStandardMethodListBySample" resultType="com.ruoyi.basic.pojo.StandardMethodList">
+    <select id="getStandardMethodListBySample" resultType="com.ruoyi.inspect.pojo.StandardMethodList">
         select sm.code,sm.name,sm.remark from standard_method sm
         left join structure_test_object sto on sm.structure_test_object_id = sto.id
         where is_use = 1
@@ -163,7 +163,7 @@
             and sto.specimen_name = #{sampleType}
         </if>
     </select>
-    <select id="selectStandardTreeList2" resultType="com.ruoyi.basic.pojo.StandardTree">
+    <select id="selectStandardTreeList2" resultType="com.ruoyi.inspect.pojo.StandardTree">
         select '涓ぉ绉戞妧妫�娴嬩腑蹇�'        factory,
                l.laboratory_name laboratory,
                sto.specimen_name sample_type,
@@ -177,7 +177,7 @@
         where sto.specimen_name = #{sampleType}
         group by sto.specimen_name
     </select>
-    <select id="selectStandardProductListByTree" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="selectStandardProductListByTree" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select <include refid="selectStandardTree"/>
         from structure_item_parameter
         where (
@@ -192,7 +192,7 @@
         order by inspection_item_class, inspection_item, id asc
     </select>
 
-    <select id="selectStandardProductListByTree2" resultType="com.ruoyi.basic.pojo.StandardProductList">
+    <select id="selectStandardProductListByTree2" resultType="com.ruoyi.inspect.pojo.StandardProductList">
         select <include refid="selectStandardTree"/>
         from structure_item_parameter
         where sample LIKE CONCAT('%[', #{tree}, ']%')
@@ -212,7 +212,7 @@
             and st.sample = p.name
     </select>
 
-    <select id="getStandardTree3" resultType="com.ruoyi.basic.dto.SampleDto">
+    <select id="getStandardTree3" resultType="com.ruoyi.inspect.dto.SampleDto">
         select model label,
                model value
         from standard_tree
@@ -240,7 +240,7 @@
             and (inspection_item_subclass is null or inspection_item_subclass = '')
         </if>
     </select>
-    <select id="selectPList" resultType="com.ruoyi.basic.dto.ProductDto">
+    <select id="selectPList" resultType="com.ruoyi.inspect.dto.ProductDto">
         select p.name
         from structure_test_object sto
                  left join product p on p.object_id = sto.id
@@ -325,26 +325,26 @@
               group by ifs.id) a
     </sql>
 
-    <select id="getIfsByStateOne" resultType="com.ruoyi.basic.dto.IfsInventoryQuantityDto">
+    <select id="getIfsByStateOne" resultType="com.ruoyi.inspect.dto.IfsInventoryQuantityDto">
         <include refid="getIfsOrder"/>
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
     </select>
 
-    <select id="selectIfsPage" resultType="com.ruoyi.basic.pojo.IfsInventoryQuantity">
+    <select id="selectIfsPage" resultType="com.ruoyi.inspect.pojo.IfsInventoryQuantity">
         SELECT * from ifs_inventory_quantity ifs
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
     </select>
-    <select id="selectIfsInventoryQuantity" resultType="com.ruoyi.basic.dto.IfsInventoryQuantityCheckDto">
+    <select id="selectIfsInventoryQuantity" resultType="com.ruoyi.inspect.dto.IfsInventoryQuantityCheckDto">
         SELECT * from ifs_inventory_quantity ifs
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
     </select>
-    <select id="getIfsByOver" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
+    <select id="getIfsByOver" resultType="com.ruoyi.inspect.dto.IfsInventoryQuantitySupplierDto">
         select * from (<include refid="getIfsOrder"/>
         <where>
             <if test="beginDeclareDate != null and beginDeclareDate != '' and endDeclareDate != null and endDeclareDate != ''">
@@ -356,7 +356,7 @@
             ${ew.customSqlSegment}
         </if>
     </select>
-    <select id="getIfsByOverList" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
+    <select id="getIfsByOverList" resultType="com.ruoyi.inspect.dto.IfsInventoryQuantitySupplierDto">
         select * from (<include refid="getIfsOrder"/>
             <where>
                 <if test="beginDeclareDate != null and beginDeclareDate != '' and endDeclareDate != null and endDeclareDate != ''">
@@ -368,7 +368,7 @@
             ${ew.customSqlSegment}
         </if>
     </select>
-    <select id="getIfsByQuarter" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
+    <select id="getIfsByQuarter" resultType="com.ruoyi.inspect.dto.IfsInventoryQuantitySupplierDto">
         select * from (<include refid="getIfsOrder"/>
         <where>
             and (quarter_order_id is not null)
diff --git a/basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml b/basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml
index fd67dfc..5a0977b 100644
--- a/basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml
+++ b/basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml
@@ -8,7 +8,7 @@
         from structure_item_parameter
         where sample like concat('%', #{sample}, '%')
     </delete>
-    <select id="selectItemParameterList" resultType="com.ruoyi.basic.pojo.StructureItemParameter">
+    <select id="selectItemParameterList" resultType="com.ruoyi.inspect.pojo.StructureItemParameter">
         select * from (select A.id,
         inspection_item,
         inspection_item_en,
@@ -109,12 +109,12 @@
                  left join product p on p.object_id = sto.id
     </select>
 
-    <resultMap id="itemDto" type="com.ruoyi.basic.dto.TestItemDto">
+    <resultMap id="itemDto" type="com.ruoyi.inspect.dto.TestItemDto">
         <result column="sId" property="id"/>
         <result column="sName" property="name"/>
         <collection property="children" resultMap="productDto"/>
     </resultMap>
-    <resultMap id="productDto" type="com.ruoyi.basic.dto.ProductDto">
+    <resultMap id="productDto" type="com.ruoyi.inspect.dto.ProductDto">
         <result column="pId" property="id"/>
         <result column="pName" property="name"/>
     </resultMap>
diff --git a/basic-server/src/main/resources/mapper/StructureTestMapper.xml b/basic-server/src/main/resources/mapper/StructureTestMapper.xml
index 05c7ae7..06bf1a1 100644
--- a/basic-server/src/main/resources/mapper/StructureTestMapper.xml
+++ b/basic-server/src/main/resources/mapper/StructureTestMapper.xml
@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.basic.mapper.StructureTestObjectMapper">
 
-    <select id="selectTestObjectList" resultType="com.ruoyi.basic.dto.PageTestObjectDto">
+    <select id="selectTestObjectList" resultType="com.ruoyi.inspect.dto.PageTestObjectDto">
         select * from (
         select sto.id,
         sto.specimen_name,
diff --git a/basic-server/src/main/resources/mapper/StructureTestObjectPartMapper.xml b/basic-server/src/main/resources/mapper/StructureTestObjectPartMapper.xml
index ee26497..16a9aa7 100644
--- a/basic-server/src/main/resources/mapper/StructureTestObjectPartMapper.xml
+++ b/basic-server/src/main/resources/mapper/StructureTestObjectPartMapper.xml
@@ -1,7 +1,7 @@
 <?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.basic.mapper.StructureTestObjectPartMapper">
-    <select id="selectListByTestObjectId" resultType="com.ruoyi.basic.pojo.StructureTestObjectPart">
+    <select id="selectListByTestObjectId" resultType="com.ruoyi.inspect.pojo.StructureTestObjectPart">
         SELECT * from structure_test_object_part pp
         where  pp.test_object_id = #{testObjectId}
     </select>
diff --git a/bin/clean.bat b/bin/clean.bat
deleted file mode 100644
index 24c0974..0000000
--- a/bin/clean.bat
+++ /dev/null
@@ -1,12 +0,0 @@
-@echo off
-echo.
-echo [信息] 清理工程target生成路径。
-echo.
-
-%~d0
-cd %~dp0
-
-cd ..
-call mvn clean
-
-pause
\ No newline at end of file
diff --git a/bin/package.bat b/bin/package.bat
deleted file mode 100644
index c693ec0..0000000
--- a/bin/package.bat
+++ /dev/null
@@ -1,12 +0,0 @@
-@echo off
-echo.
-echo [信息] 打包Web工程,生成war/jar包文件。
-echo.
-
-%~d0
-cd %~dp0
-
-cd ..
-call mvn clean package -Dmaven.test.skip=true
-
-pause
\ No newline at end of file
diff --git a/bin/run.bat b/bin/run.bat
deleted file mode 100644
index 41efbd0..0000000
--- a/bin/run.bat
+++ /dev/null
@@ -1,14 +0,0 @@
-@echo off
-echo.
-echo [信息] 使用Jar命令运行Web工程。
-echo.
-
-cd %~dp0
-cd ../ruoyi-admin/target
-
-set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
-
-java -jar %JAVA_OPTS% ruoyi-admin.jar
-
-cd bin
-pause
\ No newline at end of file
diff --git a/cnas-manage/pom.xml b/cnas-manage/pom.xml
new file mode 100644
index 0000000..0ab0a45
--- /dev/null
+++ b/cnas-manage/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.8.9</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>cnas-manage</artifactId>
+
+    <dependencies>
+
+        <!--涓氬姟妯″潡-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>inspect-server</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-system</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-framework</artifactId>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java
new file mode 100644
index 0000000..b2e712b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java
@@ -0,0 +1,134 @@
+package com.ruoyi.manage.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.mapper.ClientSatisfactionAnalyseFileMapper;
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import com.ruoyi.manage.service.ClientSatisfactionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Api(tags = "瀹㈡埛婊℃剰搴﹁皟鏌�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/clientSatisfaction")
+public class ClientSatisfactionController {
+
+    private ClientSatisfactionService clientSatisfactionService;
+    private ClientSatisfactionAnalyseFileMapper clientSatisfactionAnalyseFileMapper;
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�")
+    @GetMapping("/pageClientSatisfaction")
+    public Result<IPage<ClientSatisfaction>> pageClientSatisfaction(Page page,ClientSatisfaction clientSatisfaction) throws Exception {
+        return Result.success(clientSatisfactionService.pageClientSatisfaction(page, clientSatisfaction));
+    }
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹁皟鏌ユ柊澧�
+     * @return
+     */
+    @ApiOperation(value = "瀹㈡埛婊℃剰搴﹁皟鏌ユ柊澧�")
+    @PostMapping("/addClientSatisfaction")
+    public Result addClientSatisfaction(@RequestBody ClientSatisfaction clientSatisfaction){
+        return Result.success(clientSatisfactionService.save(clientSatisfaction));
+    }
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹁皟鏌ヤ慨鏀�
+     * @return
+     */
+    @ApiOperation(value = "瀹㈡埛婊℃剰搴﹁皟鏌ヤ慨鏀�")
+    @PostMapping("/updateClientSatisfaction")
+    public Result updateClientSatisfaction(@RequestBody ClientSatisfaction clientSatisfaction){
+        return Result.success(clientSatisfactionService.updateById(clientSatisfaction));
+    }
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垹闄�
+     * @return
+     */
+    @ApiOperation(value = "瀹㈡埛婊℃剰搴﹁皟鏌ュ垹闄�")
+    @DeleteMapping("/delClientSatisfaction")
+    public Result delClientSatisfaction(Integer clientSatisfactionId){
+        return Result.success(clientSatisfactionService.removeById(clientSatisfactionId));
+    }
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹀鍑�
+     * @param clientSatisfactionId
+     * @param response
+     * @return
+     */
+    @ApiOperation(value = "瀹㈡埛婊℃剰瀵煎嚭")
+    @GetMapping("/exportWordClientSatisfaction")
+    public Result exportWordClientSatisfaction(Integer clientSatisfactionId, HttpServletResponse response){
+        clientSatisfactionService.exportWordClientSatisfaction(clientSatisfactionId, response);
+        return Result.success();
+    }
+
+    /**
+     * 纭瀹㈡埛婊℃剰搴�
+     * @param clientSatisfaction 瑕佷慨鏀瑰鎴锋弧鎰忓害鐨勭姸鎬佸璞�
+     * @param userId 淇敼浜篿d
+     */
+    @ApiOperation(value = "纭瀹㈡埛婊℃剰搴�")
+    @PostMapping("/confirmClientSatisfaction")
+    public void confirmClientSatisfaction(@RequestBody ClientSatisfaction clientSatisfaction, Integer userId){
+        clientSatisfactionService.confirmClientSatisfaction(clientSatisfaction, userId);
+    }
+
+    /**
+     * 鏂板瀹㈡埛鍒嗘瀽闄勪欢
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "鏂板鎴峰垎鏋愰檮浠�")
+    @PostMapping("/uploadAnalyseFile")
+    public Result<?> uploadAnalyseFile(MultipartFile file) {
+        return Result.success(clientSatisfactionService.uploadAnalyseFile(file));
+    }
+
+
+    /**
+     * 鏌ヨ鎴峰垎鏋愰檮浠�
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鎴峰垎鏋愰檮浠�")
+    @GetMapping("/pageAnalyseFile")
+    public Result<IPage<ClientSatisfactionAnalyseFile>> pageAnalyseFile(Page page,ClientSatisfactionAnalyseFile analyseFile) throws Exception {
+        return Result.success(clientSatisfactionService.pageAnalyseFile(page, analyseFile));
+    }
+
+    /**
+     * 鍒犻櫎鎴峰垎鏋愰檮浠�
+     * @return
+     */
+    @ApiOperation(value = "鍒犻櫎鎴峰垎鏋愰檮浠�")
+    @DeleteMapping("/delAnalyseFile")
+    public Result delAnalyseFile(Integer analyseFileId){
+        return Result.success(clientSatisfactionAnalyseFileMapper.deleteById(analyseFileId));
+    }
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCheckController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCheckController.java
new file mode 100644
index 0000000..ba3995e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCheckController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.manage.controller;
+
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.InternalCheckDto;
+import com.ruoyi.manage.pojo.InternalCheck;
+import com.ruoyi.manage.service.InternalCheckService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Api(tags = "鍐呭妫�鏌�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalCheck")
+public class InternalCheckController {
+
+    private InternalCheckService internalCheckService;
+
+    /**
+     * 鍐呭妫�鏌ュ垎椤垫煡璇�
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "鍐呭妫�鏌ュ垎椤垫煡璇�")
+    @GetMapping("/pageInternalCheck")
+    public Result<IPage<InternalCheckDto>> pageInternalCheck(Page page,InternalCheck internalCheck) throws Exception {
+        return Result.success(internalCheckService.pageInternalCheck(page, internalCheck));
+    }
+
+    /**
+     * 鍐呭妫�鏌ユ柊澧�
+     * @return
+     */
+    @ApiOperation(value = "鍐呭妫�鏌ユ柊澧�")
+    @PostMapping("/addInternalCheck")
+    public Result addInternalCheck(@RequestBody InternalCheckDto internalCheck){
+        return Result.success(internalCheckService.addInternalCheck(internalCheck));
+    }
+
+    /**
+     * 鍐呭妫�鏌ヤ慨鏀�
+     * @return
+     */
+    @ApiOperation(value = "鍐呭妫�鏌ヤ慨鏀�")
+    @PostMapping("/updateInternalCheck")
+    public Result updateInternalCheck(@RequestBody InternalCheckDto internalCheck){
+        return Result.success(internalCheckService.updateInternalCheck(internalCheck));
+    }
+
+    /**
+     * 鍐呭妫�鏌ュ垹闄�
+     * @return
+     */
+    @ApiOperation(value = "鍐呭妫�鏌ュ垹闄�")
+    @DeleteMapping("/delInternalCheck")
+    public Result delInternalCheck(Integer checkId){
+        return Result.success(internalCheckService.delInternalCheck(checkId));
+    }
+
+    /**
+     * 鍐呭妫�鏌ユ煡鐪嬭鎯�
+     * @return
+     */
+    @ApiOperation(value = "鍐呭妫�鏌ユ煡鐪嬭鎯�")
+    @GetMapping("/getInternalCheckOne")
+    public Result<InternalCheckDto> getInternalCheckOne(Integer checkId){
+        return Result.success(internalCheckService.getInternalCheckOne(checkId));
+    }
+
+
+    /**
+     * 鍐呭妫�鏌ユ壒鍑�
+     * @return
+     */
+    @ApiOperation(value = "鍐呭妫�鏌ユ壒鍑�")
+    @PostMapping("/ratifyInternalCheck")
+    public Result ratifyInternalCheck(@RequestBody InternalCheckDto internalCheck){
+        return Result.success(internalCheckService.ratifyInternalCheck(internalCheck));
+    }
+
+    /**
+     * 瀵煎嚭鍐呭妫�鏌�
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鍐呭妫�鏌�")
+    @GetMapping("/exportInternalCheck")
+    public void exportInternalCheck(Integer checkId, HttpServletResponse response){
+        internalCheckService.exportInternalCheck(checkId, response);
+    }
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCorrectController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCorrectController.java
new file mode 100644
index 0000000..6a45848
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCorrectController.java
@@ -0,0 +1,110 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.mapper.InternalCorrectFileMapper;
+import com.ruoyi.manage.pojo.InternalCorrect;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import com.ruoyi.manage.service.InternalCorrectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:15
+ */
+@Api(tags = "鍐呭绾犳鎺柦")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalCorrect")
+public class InternalCorrectController {
+
+    private InternalCorrectService internalCorrectService;
+    private InternalCorrectFileMapper internalCorrectFileMapper;
+
+    /**
+     * 鏂板鍐呭绠$悊绾犳澶勭悊淇℃伅
+     * @return
+     */
+    @ApiOperation(value = "鏂板鍐呭绠$悊绾犳澶勭悊")
+    @PostMapping("/addInternalCorrect")
+    public Result addInternalCorrect(@RequestBody InternalCorrect internalCorrect){
+        return Result.success(internalCorrectService.addInternalCorrect(internalCorrect));
+    }
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳澶勭悊
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鍐呭绠$悊绾犳澶勭悊")
+    @GetMapping("/getInternalCorrect")
+    public Result<InternalCorrect> getInternalCorrect(Integer correctId){
+        return Result.success(internalCorrectService.getInternalCorrect(correctId));
+    }
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃")
+    @GetMapping("/pageInternalCorrect")
+    public Result<IPage<InternalCorrect>> pageInternalCorrect(Page page, InternalCorrect detailsCorrect) throws Exception {
+        return Result.success(internalCorrectService.pageInternalCorrect(page, detailsCorrect));
+    }
+
+    /**
+     * 鏂板鍐呭绠$悊绾犳鎺柦闄勪欢
+     * @param correctId
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "鏂板鍐呭绠$悊绾犳鎺柦闄勪欢")
+    @PostMapping("/uploadInternalCorrectFile")
+    public Result<?> uploadInternalCorrectFile(Integer correctId, MultipartFile file) {
+        return Result.success(internalCorrectService.uploadInternalCorrectFile(correctId, file));
+    }
+
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢")
+    @GetMapping("/getInternalCorrectFileList")
+    public Result<List<InternalCorrectFile>> getInternalCorrectFileList(Integer correctId){
+        return Result.success(internalCorrectService.getInternalCorrectFileList(correctId));
+    }
+
+    /**
+     * 鍒犻櫎鍐呭绠$悊绾犳鎺柦闄勪欢
+     * @return
+     */
+    @ApiOperation(value = "鍒犻櫎鍐呭绠$悊绾犳鎺柦闄勪欢")
+    @DeleteMapping("/delInternalCorrectFile")
+    public Result delInternalCorrectFile(Integer correctFileId){
+        return Result.success(internalCorrectFileMapper.deleteById(correctFileId));
+    }
+
+    /**
+     * 瀵煎嚭绾犳鎺柦
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭绾犳鎺柦")
+    @GetMapping("/exportInternalCorrect")
+    public void exportInternalCorrect(Integer correctId, HttpServletResponse response){
+        internalCorrectService.exportInternalCorrect(correctId, response);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalImplementController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalImplementController.java
new file mode 100644
index 0000000..1a0bc25
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalImplementController.java
@@ -0,0 +1,107 @@
+package com.ruoyi.manage.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.InternalImplementDto;
+import com.ruoyi.manage.pojo.InternalImplement;
+import com.ruoyi.manage.service.InternalImplementService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Api(tags = "鍐呭瀹炴柦璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalImplement")
+public class InternalImplementController {
+
+    private InternalImplementService internalImplementService;
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ")
+    @GetMapping("/pageInternalImplement")
+    public Result<IPage<InternalImplementDto>> pageInternalImplement(Page page,InternalImplement internalImplement) throws Exception {
+        return Result.success(internalImplementService.pageInternalImplement(page, internalImplement));
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鏂板
+     * @return
+     */
+    @ApiOperation(value = "鍐呭瀹炴柦璁″垝鏂板")
+    @PostMapping("/addInternalImplement")
+    public Result addInternalImplement(@RequestBody InternalImplementDto internalImplement){
+        return Result.success(internalImplementService.addInternalImplement(internalImplement));
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝淇敼
+     * @return
+     */
+    @ApiOperation(value = "鍐呭瀹炴柦璁″垝淇敼")
+    @PostMapping("/updateInternalImplement")
+    public Result updateInternalImplement(@RequestBody InternalImplementDto internalImplement){
+        return Result.success(internalImplementService.updateInternalImplement(internalImplement));
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "鍐呭瀹炴柦璁″垝鍒犻櫎")
+    @DeleteMapping("/delInternalImplement")
+    public Result delInternalImplement(Integer implementId){
+        return Result.success(internalImplementService.delInternalImplement(implementId));
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鏌ョ湅璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "鍐呭瀹炴柦璁″垝鏌ョ湅璇︽儏")
+    @GetMapping("/getInternalImplementOne")
+    public Result<InternalImplementDto> getInternalImplementOne(Integer implementId){
+        return Result.success(internalImplementService.getInternalImplementOne(implementId));
+    }
+
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鎵瑰噯
+     * @return
+     */
+    @ApiOperation(value = "鍐呭瀹炴柦璁″垝鎵瑰噯")
+    @PostMapping("/ratifyInternalImplement")
+    public Result ratifyInternalImplement(@RequestBody InternalImplementDto internalImplement){
+        return Result.success(internalImplementService.ratifyInternalImplement(internalImplement));
+    }
+
+    /**
+     * 瀵煎嚭鍐呭瀹炴柦璁″垝
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鍐呭瀹炴柦璁″垝")
+    @GetMapping("/exportInternalImplement")
+    public void exportInternalImplement(Integer implementId, HttpServletResponse response){
+        internalImplementService.exportInternalImplement(implementId, response);
+    }
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalMeetingController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalMeetingController.java
new file mode 100644
index 0000000..138178a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalMeetingController.java
@@ -0,0 +1,95 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.InternalMeetingDto;
+import com.ruoyi.manage.pojo.InternalMeeting;
+import com.ruoyi.manage.service.InternalMeetingService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:50:44
+ */
+@Api(tags = "鍐呭浼氳")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalMeeting")
+public class InternalMeetingController {
+
+    private InternalMeetingService internalMeetingService;
+
+    /**
+     * 鍐呭浼氳鍒嗛〉鏌ヨ
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "鍐呭浼氳鍒嗛〉鏌ヨ")
+    @GetMapping("/pageInternalMeeting")
+    public Result<IPage<InternalMeetingDto>> pageInternalMeeting(Page page,InternalMeeting internalMeeting) throws Exception {
+        return Result.success(internalMeetingService.pageInternalMeeting(page, internalMeeting));
+    }
+
+    /**
+     * 鍐呭浼氳鏂板
+     * @return
+     */
+    @ApiOperation(value = "鍐呭浼氳鏂板")
+    @PostMapping("/addInternalMeeting")
+    public Result addInternalMeeting(@RequestBody InternalMeetingDto internalMeeting){
+        return Result.success(internalMeetingService.addInternalMeeting(internalMeeting));
+    }
+
+    /**
+     * 鍐呭浼氳淇敼
+     * @return
+     */
+    @ApiOperation(value = "鍐呭浼氳淇敼")
+    @PostMapping("/updateInternalMeeting")
+    public Result updateInternalMeeting(@RequestBody InternalMeetingDto internalMeeting){
+        return Result.success(internalMeetingService.updateInternalMeeting(internalMeeting));
+    }
+
+    /**
+     * 鍐呭浼氳鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "鍐呭浼氳鍒犻櫎")
+    @DeleteMapping("/delInternalMeeting")
+    public Result delInternalMeeting(Integer meetingId){
+        return Result.success(internalMeetingService.delInternalMeeting(meetingId));
+    }
+
+    /**
+     * 鍐呭浼氳鏌ョ湅璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "鍐呭浼氳鏌ョ湅璇︽儏")
+    @GetMapping("/getInternalMeetingOne")
+    public Result<InternalMeetingDto> getInternalMeetingOne(Integer meetingId){
+        return Result.success(internalMeetingService.getInternalMeetingOne(meetingId));
+    }
+
+    /**
+     * 瀵煎嚭鍐呭浼氳
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鍐呭浼氳")
+    @GetMapping("/exportInternalMeeting")
+    public void exportInternalMeeting(Integer meetingId, HttpServletResponse response){
+        internalMeetingService.exportInternalMeeting(meetingId, response);
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalPlanController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalPlanController.java
new file mode 100644
index 0000000..61caaa4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalPlanController.java
@@ -0,0 +1,116 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.InternalPlanDto;
+import com.ruoyi.manage.pojo.InternalPlan;
+import com.ruoyi.manage.service.InternalPlanService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:27:47
+ */
+@Api(tags = "鍐呭骞村害璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalPlan")
+public class InternalPlanController {
+
+
+    private InternalPlanService internalPlanService;
+
+    /**
+     * 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "鍐呭骞村害璁″垝鍒嗛〉鏌ヨ")
+    @GetMapping("/pageInternalPlan")
+    public Result<IPage<InternalPlanDto>> pageInternalPlan(Page page,InternalPlan internalPlan) throws Exception {
+        return Result.success(internalPlanService.pageInternalPlan(page, internalPlan));
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝鏂板
+     * @return
+     */
+    @ApiOperation(value = "鍐呭骞村害璁″垝鏂板")
+    @PostMapping("/addInternalPlan")
+    public Result addInternalPlan(@RequestBody InternalPlanDto internalPlan){
+        return Result.success(internalPlanService.addInternalPlan(internalPlan));
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝淇敼
+     * @return
+     */
+    @ApiOperation(value = "鍐呭骞村害璁″垝淇敼")
+    @PostMapping("/updateInternalPlan")
+    public Result updateInternalPlan(@RequestBody InternalPlanDto internalPlan){
+        return Result.success(internalPlanService.updateInternalPlan(internalPlan));
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "鍐呭骞村害璁″垝鍒犻櫎")
+    @DeleteMapping("/delInternalPlan")
+    public Result delInternalPlan(Integer planId){
+        return Result.success(internalPlanService.delInternalPlan(planId));
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝鏌ョ湅璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "鍐呭骞村害璁″垝鏌ョ湅璇︽儏")
+    @GetMapping("/getInternalPlanOne")
+    public Result<InternalPlanDto> getInternalPlanOne(Integer planId){
+        return Result.success(internalPlanService.getInternalPlanOne(planId));
+    }
+
+
+    /**
+     * 鍐呭骞村害璁″垝瀹℃牳
+     * @return
+     */
+    @ApiOperation(value = "鍐呭骞村害璁″垝瀹℃牳")
+    @PostMapping("/examineInternalPlan")
+    public Result examineInternalPlan(@RequestBody InternalPlanDto internalPlanDto){
+        return Result.success(internalPlanService.examineInternalPlan(internalPlanDto));
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝鎵瑰噯
+     * @return
+     */
+    @ApiOperation(value = "鍐呭瀹炴柦璁″垝鎵瑰噯")
+    @PostMapping("/ratifyInternalPlan")
+    public Result ratifyInternalPlan(@RequestBody InternalPlanDto internalPlanDto){
+        return Result.success(internalPlanService.ratifyInternalPlan(internalPlanDto));
+    }
+
+    /**
+     * 瀵煎嚭鍐呭骞村害璁″垝
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鍐呭骞村害璁″垝")
+    @GetMapping("/exportInternalPlan")
+    public void exportInternalPlan(Integer planId, HttpServletResponse response){
+        internalPlanService.exportInternalImplement(planId, response);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalReportController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalReportController.java
new file mode 100644
index 0000000..f08fb50
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalReportController.java
@@ -0,0 +1,115 @@
+package com.ruoyi.manage.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.InternalReport;
+import com.ruoyi.manage.service.InternalReportService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author makejava
+ * @since 2024-11-11
+ */
+@Api(tags = "鍐呭鎶ュ憡")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalReport")
+public class InternalReportController {
+
+    private InternalReportService internalReportService;
+
+    /**
+     * 鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "鍐呭鎶ュ憡鍒嗛〉鏌ヨ")
+    @GetMapping("/pageInternalReport")
+    public Result<IPage<InternalReport>> pageInternalReport(Page page,InternalReport internalReport) throws Exception {
+        return Result.success(internalReportService.pageInternalReport(page, internalReport));
+    }
+
+    /**
+     * 鍐呭鎶ュ憡鏂板
+     * @return
+     */
+    @ApiOperation(value = "鍐呭鎶ュ憡鏂板")
+    @PostMapping("/addInternalReport")
+    public Result addInternalReport(@RequestBody InternalReport internalReport){
+        return Result.success(internalReportService.save(internalReport));
+    }
+
+    /**
+     * 鍐呭鎶ュ憡淇敼
+     * @return
+     */
+    @ApiOperation(value = "鍐呭鎶ュ憡淇敼")
+    @PostMapping("/updateInternalReport")
+    public Result updateInternalReport(@RequestBody InternalReport internalReport){
+        return Result.success(internalReportService.updateById(internalReport));
+    }
+
+    /**
+     * 鍐呭鎶ュ憡鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "鍐呭鎶ュ憡鍒犻櫎")
+    @DeleteMapping("/delInternalReport")
+    public Result delInternalReport(Integer reportId){
+        return Result.success(internalReportService.removeById(reportId));
+    }
+
+    /**
+     * 鍐呭鎶ュ憡鏌ョ湅璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "鍐呭鎶ュ憡鏌ョ湅璇︽儏")
+    @GetMapping("/getInternalReportOne")
+    public Result<InternalReport> getInternalReportOne(Integer reportId){
+        return Result.success(internalReportService.getById(reportId));
+    }
+
+    /**
+     * 鍐呭妫�鏌ュ鏍�
+     * @return
+     */
+    @ApiOperation(value = "鍐呭妫�鏌ュ鏍�")
+    @PostMapping("/examineInternalReport")
+    public Result examineInternalReport(@RequestBody InternalReport internalReport){
+        return Result.success(internalReportService.ratifyInternalCheck(internalReport));
+    }
+
+    /**
+     * 鍐呭鎶ュ憡璐ㄩ噺璐熻矗浜哄~鍐�
+     * @return
+     */
+    @ApiOperation(value = "鍐呭鎶ュ憡璐ㄩ噺璐熻矗浜哄~鍐�")
+    @PostMapping("/qualityInternalReport")
+    public Result qualityInternalReport(@RequestBody InternalReport internalReport){
+        return Result.success(internalReportService.qualityInternalReport(internalReport));
+    }
+
+    /**
+     * 瀵煎嚭鍐呭鎶ュ憡
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鍐呭鎶ュ憡")
+    @GetMapping("/exportInternalReport")
+    public void exportInternalReport(Integer reportId, HttpServletResponse response){
+        internalReportService.exportInternalReport(reportId, response);
+    }
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageControlPlanListController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageControlPlanListController.java
new file mode 100644
index 0000000..5d71d10
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageControlPlanListController.java
@@ -0,0 +1,134 @@
+package com.ruoyi.manage.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import com.ruoyi.manage.service.ManageControlPlanListService;
+import com.ruoyi.manage.vo.ManageControlPlanListVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:30
+ */
+@Api(tags = "閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�")
+@RestController
+@RequestMapping("/manageControlPlanList")
+public class ManageControlPlanListController {
+
+
+    @Resource
+    private ManageControlPlanListService manageControlPlanListService;
+
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ")
+    @GetMapping("/getPageList")
+    public Result<IPage<ManageControlPlanListVo>> getPageList(Page page){
+        IPage<ManageControlPlanListVo> ipage = manageControlPlanListService.getPageList(page);
+        return Result.success(ipage);
+    }
+
+    @ApiOperation(value = "鎵瑰噯")
+    @PostMapping("/approvalOfControlPlanChecklist")
+    public Result<?> approvalOfControlPlanChecklist(@RequestBody Map<String, Integer> param){
+        Integer approve = param.get("approve");
+        Integer status= param.get("status");
+        manageControlPlanListService.update(Wrappers.<ManageControlPlanList>lambdaUpdate()
+                .set(ManageControlPlanList::getApprove, approve)
+                .set(ManageControlPlanList::getApproveStatus, status)
+                .set(ManageControlPlanList::getApproveDate, LocalDateTime.now()));
+        return Result.success();
+    }
+
+    @ApiOperation(value = "瀹℃壒")
+    @PostMapping("/riskAnalysisApprovalOfControlPlanChecklist")
+    public Result<?> riskAnalysisApprovalOfControlPlanChecklist(@RequestBody Map<String, Integer> param){
+        Integer approval = param.get("approval");
+        Integer status= param.get("status");
+        manageControlPlanListService.update(Wrappers.<ManageControlPlanList>lambdaUpdate()
+                .set(ManageControlPlanList::getApproval, approval)
+                .set(ManageControlPlanList::getApprovalStatus, status)
+                .set(ManageControlPlanList::getApprovalDate, LocalDateTime.now()));
+        return Result.success();
+    }
+
+    @ApiOperation(value = "瀵煎叆")
+    @PostMapping("/importControlPlanList")
+    public void importControlPlanList(MultipartFile file) throws IOException {
+        boolean excelFile = isExcelFile(file);
+        if (!excelFile) {
+            throw new ErrorException("璇峰鍏xcel鏂囦欢锛�");
+        }
+        EasyExcel.read(file.getInputStream(), ManageControlPlanList.class, new PageReadListener<ManageControlPlanList>(dataList -> {
+            Integer userId = SecurityUtils.getUserId().intValue();
+            dataList.forEach(i -> {
+                i.setEditor(userId);
+                i.setEditorDate(LocalDateTime.now());
+                i.setApproveStatus(0);
+                i.setApprovalStatus(0);
+            });
+            manageControlPlanListService.saveOrUpdateBatch(dataList);
+        })).sheet().doRead();
+    }
+
+    @ApiOperation(value = "鏂板")
+    @PostMapping("/analysisOfMajorRiskFactorsAdded")
+    public void analysisOfMajorRiskFactorsAdded(@RequestBody ManageControlPlanList manageControlPlanList) throws IOException {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        manageControlPlanList.setEditor(userId);
+        manageControlPlanList.setEditorDate(LocalDateTime.now());
+        manageControlPlanListService.saveOrUpdate(manageControlPlanList);
+    }
+
+    @ApiOperation(value = "鍒犻櫎")
+    @DeleteMapping("/deleteSignificantRiskFactorAnalysis")
+    public void deleteSignificantRiskFactorAnalysis(Integer id) throws IOException {
+        manageControlPlanListService.removeById(id);
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅璁″垝
+     * @return
+     */
+    @ApiOperation(value = "閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�")
+    @GetMapping("/exportSignificantRiskFactors")
+    public void exportSignificantRiskFactors(HttpServletResponse response){
+        manageControlPlanListService.exportPersonTraining(response);
+    }
+
+    public static boolean isExcelFile(MultipartFile file) {
+        if (file.isEmpty()) {
+            return false;
+        }
+        String originalFilename = file.getOriginalFilename();
+        if (originalFilename == null) {
+            return false;
+        }
+        String[] parts = originalFilename.split("\\.");
+        if (parts.length == 0) {
+            return false;
+        }
+        String fileExtension = parts[parts.length - 1].toLowerCase();
+        return fileExtension.equals("xls") || fileExtension.equals("xlsx");
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentAlterController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentAlterController.java
new file mode 100644
index 0000000..5134bb3
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentAlterController.java
@@ -0,0 +1,78 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageDocumentAlter;
+import com.ruoyi.manage.service.ManageDocumentAlterService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 11:04:01
+ */
+@RestController
+@RequestMapping("/manageDocumentAlter")
+public class ManageDocumentAlterController {
+
+    @Resource
+    private ManageDocumentAlterService manageDocumentAlterService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鏂囦欢鍙樻洿")
+    @GetMapping("/pageManageDocumentAlter")
+    public Result pageManageDocumentAlter(Page page,ManageDocumentAlter manageDocumentAlter) throws Exception {
+        return Result.success(manageDocumentAlterService.pageManageDocumentAlter(page, manageDocumentAlter));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏂囦欢鍙樻洿")
+    @DeleteMapping("/delManageDocumentAlter")
+    public Result delManageDocumentAlter(Integer id){
+        return Result.success(manageDocumentAlterService.delManageDocumentAlter(id));
+    }
+
+    @ApiOperation(value = "鏌ョ湅鏂囦欢鍙樻洿")
+    @GetMapping("/getManageDocumentAlter")
+    public Result getManageDocumentAlter(Integer id){
+        return Result.success(manageDocumentAlterService.getManageDocumentAlter(id));
+    }
+
+    @ApiOperation(value = "鏂板鏂囦欢鍙樻洿")
+    @PostMapping("/addManageDocumentAlter")
+    public Result addManageDocumentAlter(ManageDocumentAlter manageDocumentAlter){
+        return Result.success(manageDocumentAlterService.addManageDocumentAlter(manageDocumentAlter));
+    }
+
+    @ApiOperation(value = "缂栬緫鏂囦欢鍙樻洿")
+    @PostMapping("/doManageDocumentAlter")
+    public Result doManageDocumentAlter(ManageDocumentAlter manageDocumentAlter){
+        return Result.success(manageDocumentAlterService.doManageDocumentAlter(manageDocumentAlter));
+    }
+
+    @ApiOperation(value = "瀹℃牳鏂囦欢鍙樻洿")
+    @PostMapping("/checkManageDocumentAlter")
+    public Result checkManageDocumentAlter(@RequestBody ManageDocumentAlter manageDocumentAlter){
+        return Result.success(manageDocumentAlterService.checkManageDocumentAlter(manageDocumentAlter));
+    }
+
+    @ApiOperation(value = "瀹℃牳鏌ョ湅闄勪欢")
+    @GetMapping("/checkManageDocumentAlterPdf")
+    public void checkManageDocumentAlterPdf(Long id, HttpServletResponse response)throws Exception {
+        manageDocumentAlterService.checkManageDocumentAlterPdf(id,response);
+    }
+
+    @ApiOperation(value = "瀵煎嚭鏂囦欢鍙樻洿")
+    @GetMapping("/exportManageDocumentAlter")
+    public void exportManageDocumentAlter(ManageDocumentAlter manageDocumentAlter,HttpServletResponse response) throws Exception {
+        manageDocumentAlterService.exportManageDocumentAlter(manageDocumentAlter,response);
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentCancelController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentCancelController.java
new file mode 100644
index 0000000..81e0308
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentCancelController.java
@@ -0,0 +1,74 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageDocumentCancel;
+import com.ruoyi.manage.service.ManageDocumentCancelService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 02:37:35
+ */
+@RestController
+@RequestMapping("/manageDocumentCancel")
+public class ManageDocumentCancelController {
+
+    @Resource
+    private ManageDocumentCancelService manageDocumentCancelService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鏂囦欢浣滃簾")
+    @GetMapping("/pageManageDocumentCancel")
+    public Result pageManageDocumentCancel(Page page,ManageDocumentCancel manageDocumentCancel) throws Exception {
+        return Result.success(manageDocumentCancelService.pageManageDocumentCancel(page, manageDocumentCancel));
+    }
+
+    @ApiOperation(value = "鏂板鏂囦欢浣滃簾")
+    @PostMapping("/addManageDocumentCancel")
+    public Result addManageDocumentCancel(@RequestBody ManageDocumentCancel manageDocumentCancel) {
+        return Result.success(manageDocumentCancelService.addManageDocumentCancel(manageDocumentCancel));
+    }
+
+    @ApiOperation(value = "瀹℃牳鏂囦欢浣滃簾")
+    @PostMapping("/checkManageDocumentCancel")
+    public Result checkManageDocumentCancel(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        String state = (String) param.get("state");
+        return Result.success(manageDocumentCancelService.checkManageDocumentCancel(id, state));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏂囦欢浣滃簾")
+    @DeleteMapping("/delManageDocumentCancel")
+    public Result delManageDocumentCancel(Integer id) {
+        return Result.success(manageDocumentCancelService.delManageDocumentCancel(id));
+    }
+
+    @ApiOperation(value = "鏌ョ湅鏂囦欢浣滃簾")
+    @GetMapping("/getManageDocumentCancel")
+    public Result getManageDocumentCancel(Integer id) {
+        return Result.success(manageDocumentCancelService.getManageDocumentCancel(id));
+    }
+
+    @ApiOperation(value = "缂栬緫鏂囦欢浣滃簾")
+    @PostMapping("/doManageDocumentCancel")
+    public Result doManageDocumentCancel(@RequestBody ManageDocumentCancel manageDocumentCancel) {
+        return Result.success(manageDocumentCancelService.doManageDocumentCancel(manageDocumentCancel));
+    }
+
+    @ApiOperation(value = "瀵煎嚭鏂囦欢浣滃簾")
+    @GetMapping("/exportManageDocumentCancel")
+    public void exportManageDocumentCancel(ManageDocumentCancel manageDocumentCancel,HttpServletResponse response) throws Exception {
+        manageDocumentCancelService.exportManageDocumentCancel(manageDocumentCancel,response);
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentControlledController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentControlledController.java
new file mode 100644
index 0000000..bf4497e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentControlledController.java
@@ -0,0 +1,72 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageDocumentControlled;
+import com.ruoyi.manage.service.ManageDocumentControlledService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 02:54:44
+ */
+@RestController
+@RequestMapping("/manageDocumentControlled")
+public class ManageDocumentControlledController {
+
+    @Resource
+    private ManageDocumentControlledService manageDocumentControlledService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鏂囦欢鍙楁帶")
+    @GetMapping("/pageManageDocumentControlled")
+    public Result pageManageDocumentControlled(Page page,ManageDocumentControlled manageDocumentControlled) throws Exception {
+        return Result.success(manageDocumentControlledService.pageManageDocumentControlled(page, manageDocumentControlled));
+    }
+
+    @ApiOperation(value = "鏂板鏂囦欢鍙楁帶")
+    @PostMapping("/addManageDocumentControlled")
+    public Result addManageDocumentControlled(ManageDocumentControlled manageDocumentControlled){
+        return Result.success(manageDocumentControlledService.addManageDocumentControlled(manageDocumentControlled));
+    }
+
+    @ApiOperation(value = "鏌ョ湅鏂囦欢鍙楁帶")
+    @GetMapping("/getManageDocumentControlled")
+    public Result getManageDocumentControlled(Long id){
+        return Result.success(manageDocumentControlledService.getManageDocumentControlled(id));
+    }
+
+    @ApiOperation(value = "缂栬緫鏂囦欢鍙楁帶")
+    @PostMapping("/doManageDocumentControlled")
+    public Result doManageDocumentControlled(ManageDocumentControlled manageDocumentControlled){
+        return Result.success(manageDocumentControlledService.doManageDocumentControlled(manageDocumentControlled));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏂囦欢鍙楁帶")
+    @DeleteMapping("/delManageDocumentControlled")
+    public Result delManageDocumentControlled(Long id){
+        return Result.success(manageDocumentControlledService.delManageDocumentControlled(id));
+    }
+
+    @ApiOperation(value = "瀹℃牳鏂囦欢鍙楁帶")
+    @PostMapping("/checkManageDocumentControlled")
+    public Result checkManageDocumentControlled(ManageDocumentControlled manageDocumentControlled){
+        return Result.success(manageDocumentControlledService.checkManageDocumentControlled(manageDocumentControlled));
+    }
+
+    @ApiOperation(value = "瀹℃牳鏌ョ湅闄勪欢")
+    @GetMapping("/checkManageDocumentControlledPdf")
+    public void checkManageDocumentControlledPdf(Long id, HttpServletResponse response)throws Exception {
+        manageDocumentControlledService.checkManageDocumentControlledPdf(id,response);
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentIssueRecycleController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentIssueRecycleController.java
new file mode 100644
index 0000000..606a2fa
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentIssueRecycleController.java
@@ -0,0 +1,75 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+import com.ruoyi.manage.service.ManageDocumentIssueRecycleService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 09:18:24
+ */
+@RestController
+@RequestMapping("/manageDocumentIssueRecycle")
+public class ManageDocumentIssueRecycleController {
+
+    @Resource
+    private ManageDocumentIssueRecycleService manageDocumentIssueRecycleService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鏂囦欢鍙戞斁鍥炴敹")
+    @GetMapping("/pageManageDocumentIssueRecycle")
+    public Result pageManageDocumentIssueRecycle(Page page,ManageDocumentIssueRecycleDto  manageDocumentIssueRecycleDto) throws Exception {
+        return Result.success(manageDocumentIssueRecycleService.pageManageDocumentIssueRecycle(page, manageDocumentIssueRecycleDto));
+    }
+
+    @ApiOperation(value = "鏂板鏂囦欢鍙戞斁鍥炴敹")
+    @PostMapping("/addManageDocumentIssueRecycle")
+    public Result addManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle){
+        return Result.success(manageDocumentIssueRecycleService.addManageDocumentIssueRecycle(manageDocumentIssueRecycle));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏂囦欢鍙戞斁鍥炴敹")
+    @DeleteMapping("/delManageDocumentIssueRecycle")
+    public Result delManageDocumentIssueRecycle(Long id){
+        return Result.success(manageDocumentIssueRecycleService.delManageDocumentIssueRecycle(id));
+    }
+
+    @ApiOperation(value = "鏌ョ湅鏂囦欢鍙戞斁鍥炴敹")
+    @GetMapping("/getManageDocumentIssueRecycle")
+    public Result getManageDocumentIssueRecycle(Long id){
+        return Result.success(manageDocumentIssueRecycleService.getManageDocumentIssueRecycle(id));
+    }
+
+    @ApiOperation(value = "缂栬緫鏂囦欢鍙戞斁鍥炴敹")
+    @PostMapping("/doManageDocumentIssueRecycle")
+    public Result doManageDocumentIssueRecycle(@RequestBody  ManageDocumentIssueRecycle manageDocumentIssueRecycle){
+        return Result.success(manageDocumentIssueRecycleService.doManageDocumentIssueRecycle(manageDocumentIssueRecycle));
+    }
+
+    @ApiOperation(value = "瀹℃牳鏂囦欢鍙戞斁鍥炴敹")
+    @PostMapping("/checkManageDocumentIssueRecycle")
+    public Result checkManageDocumentIssueRecycle(@RequestBody ManageDocumentIssueRecycle manageDocumentIssueRecycle){
+        return Result.success(manageDocumentIssueRecycleService.checkManageDocumentIssueRecycle(manageDocumentIssueRecycle.getId(),manageDocumentIssueRecycle.getDocumentState()));
+    }
+
+    @ApiOperation(value = "瀵煎嚭鏂囦欢鍙戞斁鍥炴敹")
+    @GetMapping("/exportManageDocumentIssueRecycle")
+    public void exportManageDocumentIssueRecycle(ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto, HttpServletResponse response) throws Exception {
+        manageDocumentIssueRecycleService.exportManageDocumentIssueRecycle(manageDocumentIssueRecycleDto,response);
+    }
+
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentListController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentListController.java
new file mode 100644
index 0000000..3037aa1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentListController.java
@@ -0,0 +1,69 @@
+package com.ruoyi.manage.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.excel.ManageDocumentListListener;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.service.ManageDocumentListService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+ 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 11:08:11
+ */
+@RestController
+@RequestMapping("/manageDocumentList")
+public class ManageDocumentListController {
+
+    @Resource
+    private ManageDocumentListService manageDocumentListService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鏂囦欢娓呭崟")
+    @GetMapping("/pageManageDocumentList")
+    public Result pageManageDocumentList(Page page,ManageDocumentList manageDocumentList) throws Exception {
+        return Result.success(manageDocumentListService.pageManageDocumentList(page, manageDocumentList));
+    }
+
+    @ApiOperation(value = "缂栬緫鏂囦欢娓呭崟")
+    @PostMapping("/doManageDocumentList")
+    public Result doManageDocumentList(@RequestBody ManageDocumentList manageDocumentList) {
+        return Result.success(manageDocumentListService.updateById(manageDocumentList));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏂囦欢娓呭崟")
+    @DeleteMapping("/delManageDocumentList")
+    public Result delManageDocumentList(Integer id) {
+        return Result.success(manageDocumentListService.removeById(id));
+    }
+
+    @ApiOperation(value = "涓婁紶闄勪欢-鏂囦欢娓呭崟")
+    @PostMapping("/uploadFileManageDocumentList")
+    public Result uploadFileManageDocumentList(Integer id, MultipartFile file) {
+        return Result.success(manageDocumentListService.uploadFile(id,file));
+    }
+
+    @ApiOperation(value = "瀵煎叆鏂囦欢娓呭崟鍒楄〃")
+    @PostMapping("/exportManageDocumentList")
+    public Result exportManageDocumentList(MultipartFile file) {
+        try {
+            EasyExcel.read(file.getInputStream(), ManageDocumentList.class, new ManageDocumentListListener(manageDocumentListService)).sheet().doRead();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return Result.success();
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingController.java
new file mode 100644
index 0000000..680e327
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.dto.ManageMeetingDto;
+import com.ruoyi.manage.service.ManageMeetingService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:33:47
+ */
+@Api(tags = "绠$悊璇勫浼氳")
+@RestController
+@RequestMapping("/manageMeeting")
+public class ManageMeetingController {
+
+    @Resource
+    private ManageMeetingService manageMeetingService;
+
+    @ApiOperation(value = "绠$悊璇勫浼氳璁板綍鏌ヨ")
+    @GetMapping("/getPageMeeting")
+    public Result<IPage<ManageMeetingDto>> getPageMeeting(Page page, String startTime, String endTime, String place) throws Exception {
+        IPage<ManageMeetingDto> ipage = manageMeetingService.page(page,startTime,endTime,place);
+        return Result.success(ipage);
+    }
+
+    @ApiOperation(value = "鏂板浼氳璁板綍")
+    @PostMapping("/addMeeting")
+    public Result addMeeting(@RequestBody ManageMeetingDto dto){
+        manageMeetingService.addMeeting(dto);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "缂栬緫浼氳璁板綍")
+    @PostMapping("/modifyMeeting")
+    public Result modifyMeeting(@RequestBody ManageMeetingDto manageMeetingDto){
+        return Result.success(manageMeetingService.modifyMeeting(manageMeetingDto));
+    }
+
+    @ApiOperation(value = "鍒犻櫎浼氳璁板綍")
+    @DeleteMapping("/deleteMeeting")
+    public Result deleteMeeting(Integer id){
+        return Result.success(manageMeetingService.removeById(id));
+    }
+
+
+    @ApiOperation(value = "涓嬭浇浼氳璁板綍")
+    @GetMapping("/exportMeeting")
+    public void exportMeeting(Integer id, HttpServletResponse response){
+        manageMeetingService.exportMeeting(id,response);
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingParticipantsController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingParticipantsController.java
new file mode 100644
index 0000000..3f58961
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingParticipantsController.java
@@ -0,0 +1,51 @@
+package com.ruoyi.manage.controller;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import com.ruoyi.manage.service.ManageMeetingParticipantsService;
+import com.ruoyi.manage.vo.MeetingParticipantsDetailsVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:34:27
+ */
+@Api(tags = "绠$悊璇勫浼氳")
+@RestController
+@RequestMapping("/manageMeetingParticipants")
+public class ManageMeetingParticipantsController {
+
+    @Resource
+    private ManageMeetingParticipantsService manageMeetingParticipantsService;
+
+
+    @ApiOperation(value = "鏌ヨ浼氳璁板綍鍙備細浜哄憳")
+    @GetMapping("/getParticipants")
+    public Result<MeetingParticipantsDetailsVo> getParticipants(Integer id){
+        return Result.success(manageMeetingParticipantsService.getParticipants(id));
+    }
+
+    @ApiOperation(value = "鏂板浼氳璁板綍鍙備細浜哄憳")
+    @PostMapping("/add")
+    public Result addParticipants(@RequestBody List<ManageMeetingParticipants> list){
+        manageMeetingParticipantsService.saveBatch(list);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎浼氳璁板綍鍙備細浜哄憳")
+    @DeleteMapping("/delete")
+    public Result deleteParticipants(List<Integer> ids){
+        manageMeetingParticipantsService.removeByIds(ids);
+        return Result.success();
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordAuditController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordAuditController.java
new file mode 100644
index 0000000..dc21eef
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordAuditController.java
@@ -0,0 +1,83 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+import com.ruoyi.manage.service.ManageRecordAuditService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 10:29:18
+ */
+@RestController
+@RequestMapping("/manageRecordAudit")
+public class ManageRecordAuditController {
+
+    @Resource
+    private ManageRecordAuditService manageRecordAuditService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鏂囦欢淇鐢宠瀹℃壒璁板綍")
+    @GetMapping("/pageManageRecordAudit")
+    public Result pageManageRecordAudit(Page page,ManageRecordAudit manageRecordAudit) throws Exception {
+        return Result.success(manageRecordAuditService.pageManageRecordAudit(page, manageRecordAudit));
+    }
+
+    @ApiOperation(value = "鏂板鏂囦欢淇鐢宠瀹℃壒璁板綍")
+    @PostMapping("/addManageRecordAudit")
+    public Result addManageRecordAudit( ManageRecordAudit manageRecordAudit){
+        return Result.success(manageRecordAuditService.addManageRecordAudit(manageRecordAudit));
+    }
+
+    @ApiOperation(value = "缂栬緫鏂囦欢淇鐢宠瀹℃壒璁板綍")
+    @PostMapping("/doManageRecordAudit")
+    public Result doManageRecordAudit(ManageRecordAudit manageRecordAudit){
+        return Result.success(manageRecordAuditService.doManageRecordAudit(manageRecordAudit));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏂囦欢淇鐢宠瀹℃壒璁板綍")
+    @DeleteMapping("/delManageRecordAudit")
+    public Result delManageRecordAudit(Integer id){
+        return Result.success(manageRecordAuditService.removeById(id));
+    }
+
+    @ApiOperation(value = "鎵瑰噯鏂囦欢淇鐢宠瀹℃壒璁板綍")
+    @PostMapping("/ratifyManageRecordAudit")
+    public Result ratifyManageRecordAudit(@RequestBody Map<String, Integer> param){
+        Integer id = param.get("id");
+        return Result.success(manageRecordAuditService.ratifyManageRecordAudit(id));
+    }
+
+    @ApiOperation(value = "鐢宠閮ㄩ棬涓荤鎰忚鏂囦欢淇鐢宠瀹℃壒璁板綍")
+    @PostMapping("/manageRecordAudit1")
+    public void manageRecordAudit1(){
+    }
+
+    @ApiOperation(value = "鍘熷埗瀹氶儴闂ㄦ剰瑙佹枃浠朵慨璁㈢敵璇峰鎵硅褰�")
+    @PostMapping("/manageRecordAudit2")
+    public void manageRecordAudit2(){
+    }
+
+    @ApiOperation(value = "鍘熷鏍搁儴闂ㄦ剰瑙佹枃浠朵慨璁㈢敵璇峰鎵硅褰�")
+    @PostMapping("/manageRecordAudit3")
+    public void manageRecordAudit3(){
+    }
+
+    @ApiOperation(value = "瀵煎嚭鏂囦欢淇鐢宠瀹℃壒璁板綍")
+    @GetMapping("/exportOutManageRecordAudit")
+    public Result exportOutManageRecordAudit(ManageRecordAudit manageRecordAudit, HttpServletResponse response) throws Exception {
+        return Result.success(manageRecordAuditService.exportOutManageRecordAudit(manageRecordAudit,response));
+    }
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java
new file mode 100644
index 0000000..cc9d568
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java
@@ -0,0 +1,79 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordCancel;
+import com.ruoyi.manage.service.ManageRecordCancelService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDate;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 01:27:22
+ */
+@RestController
+@RequestMapping("/manageRecordCancel")
+public class ManageRecordCancelController {
+
+    @Resource
+    private ManageRecordCancelService manageRecordCancelService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ浣滃簾鏂囦欢閿�姣佽褰�")
+    @GetMapping("/pageManageRecordCancel")
+    public Result pageManageRecordCancel(Page page,ManageRecordCancel manageRecordCancel) throws Exception {
+        return Result.success(manageRecordCancelService.pageManageRecordCancel(page, manageRecordCancel));
+    }
+
+    @ApiOperation(value = "鏂板浣滃簾鏂囦欢閿�姣佽褰�")
+    @PostMapping("/addManageRecordCancel")
+    public Result addManageRecordCancel(@RequestBody ManageRecordCancel manageRecordCancel){
+        manageRecordCancel.setCreateTime(LocalDate.now());
+        return Result.success(manageRecordCancelService.save(manageRecordCancel));
+    }
+
+    @ApiOperation(value = "缂栬緫浣滃簾鏂囦欢閿�姣佽褰�")
+    @PostMapping("/doManageRecordCancel")
+    public Result doManageRecordCancel(@RequestBody ManageRecordCancel manageRecordCancel){
+        return Result.success(manageRecordCancelService.updateById(manageRecordCancel));
+    }
+
+    @ApiOperation(value = "鍒犻櫎浣滃簾鏂囦欢閿�姣佽褰�")
+    @DeleteMapping("/delManageRecordCancel")
+    public Result delManageRecordCancel(Integer id){
+        return Result.success(manageRecordCancelService.removeById(id));
+    }
+
+    @ApiOperation(value = "鎵瑰噯浣滃簾鏂囦欢閿�姣佽褰�")
+    @PostMapping("/ratifyManageRecordCancel")
+    public Result ratifyManageRecordCancel(@RequestBody Map<String, Object> param){
+        Integer id = (Integer) param.get("id");
+        String ratifyState = (String) param.get("ratifyState");
+        return Result.success(manageRecordCancelService.ratifyManageRecordCancel(id,ratifyState));
+    }
+
+    @ApiOperation(value = "瀵煎嚭浣滃簾鏂囦欢閿�姣佽褰�")
+    @GetMapping("/exportOutManageRecordCancel")
+    public Result exportOutManageRecordCancel(ManageRecordCancel manageRecordCancel, HttpServletResponse response) throws Exception {
+        return Result.success(manageRecordCancelService.exportOutManageRecordCancel(manageRecordCancel,response));
+    }
+
+    @ApiOperation(value = "瀵煎叆浣滃簾鏂囦欢閿�姣佽褰�")
+    @PostMapping("/exportInManageRecordCancel")
+    public Result exportInManageRecordCancel(MultipartFile file){
+        return Result.success(manageRecordCancelService.exportInManageRecordCancel(file));
+    }
+
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCheckController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCheckController.java
new file mode 100644
index 0000000..ed6894c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCheckController.java
@@ -0,0 +1,83 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.service.ManageRecordCheckService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍) 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:31:36
+ */
+@RestController
+@RequestMapping("/manageRecordCheck")
+public class ManageRecordCheckController {
+
+    @Resource
+    private ManageRecordCheckService manageRecordCheckService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鏂囦欢瀹℃壒璁板綍")
+    @GetMapping("/pageManageRecordCheck")
+    public Result pageManageRecordCheck(Page page,ManageRecordCheck manageRecordCheck) throws Exception {
+        return Result.success(manageRecordCheckService.pageManageRecordCheck(page, manageRecordCheck));
+    }
+
+    @ApiOperation(value = "鏂板鏂囦欢瀹℃壒璁板綍")
+    @PostMapping("/addManageRecordCheck")
+    public Result addManageRecordCheck(@RequestBody ManageRecordCheck manageRecordCheck) {
+        return Result.success(manageRecordCheckService.save(manageRecordCheck));
+    }
+
+    @ApiOperation(value = "缂栬緫鏂囦欢瀹℃壒璁板綍")
+    @PostMapping("/doManageRecordCheck")
+    public Result doManageRecordCheck(@RequestBody ManageRecordCheck manageRecordCheck) {
+        return Result.success(manageRecordCheckService.updateById(manageRecordCheck));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏂囦欢瀹℃壒璁板綍")
+    @DeleteMapping("/delManageRecordCheck")
+    public Result delManageRecordCheck(Integer id) {
+        return Result.success(manageRecordCheckService.removeById(id));
+    }
+
+    @ApiOperation(value = "瀹℃牳鏂囦欢瀹℃壒璁板綍")
+    @PostMapping("/checkManageRecordCheck")
+    public Result checkManageRecordCheck(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        String checkState = (String) param.get("checkState");
+        return Result.success(manageRecordCheckService.checkManageRecordCheck(id,checkState));
+    }
+
+    @ApiOperation(value = "鎵瑰噯鏂囦欢瀹℃壒璁板綍")
+    @PostMapping("/ratifyManageRecordCheck")
+    public Result ratifyManageRecordCheck(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        String ratifyState = (String) param.get("ratifyState");
+        return Result.success(manageRecordCheckService.ratifyManageRecordCheck(id,ratifyState));
+    }
+
+    @ApiOperation(value = "瀵煎嚭鏂囦欢瀹℃壒璁板綍")
+    @GetMapping("/exportOutManageRecordCheck")
+    public Result exportOutManageRecordCheck(ManageRecordCheck manageRecordCheck, HttpServletResponse response) throws Exception {
+        return Result.success(manageRecordCheckService.exportOutManageRecordCheck(manageRecordCheck,response));
+    }
+
+    @ApiOperation(value = "瀵煎叆鏂囦欢瀹℃壒璁板綍")
+    @PostMapping("/exportInManageRecordCheck")
+    public Result exportInManageRecordCheck(MultipartFile file){
+        return Result.success(manageRecordCheckService.exportInManageRecordCheck(file));
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsController.java
new file mode 100644
index 0000000..3ffdd87
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsController.java
@@ -0,0 +1,69 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import com.ruoyi.manage.service.ManageRecordIntervalsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 10:54:31
+ */
+@Api(tags = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordIntervals")
+public class ManageRecordIntervalsController {
+
+    @Resource
+    private ManageRecordIntervalsService manageRecordIntervalsService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鏂囦欢瀹氭湡瀹℃煡璁板綍")
+    @GetMapping("/pageManageRecordIntervals")
+    public Result pageManageRecordIntervals(Page page,ManageRecordIntervals manageRecordIntervals) throws Exception {
+        return Result.success(manageRecordIntervalsService.pageManageRecordIntervals(page, manageRecordIntervals));
+    }
+
+    @ApiOperation(value = "鏂板鏂囦欢瀹氭湡瀹℃煡璁板綍")
+    @PostMapping("/addManageRecordIntervals")
+    public Result addManageRecordIntervals(@RequestBody ManageRecordIntervals manageRecordIntervals) {
+        return Result.success(manageRecordIntervalsService.addManageRecordIntervals(manageRecordIntervals));
+    }
+
+    @ApiOperation(value = "缂栬緫鏂囦欢瀹氭湡瀹℃煡璁板綍")
+    @PostMapping("/doManageRecordIntervals")
+    public Result doManageRecordIntervals(@RequestBody ManageRecordIntervals manageRecordIntervals) {
+        return Result.success(manageRecordIntervalsService.updateById(manageRecordIntervals));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏂囦欢瀹氭湡瀹℃煡璁板綍")
+    @DeleteMapping("/delManageRecordIntervals")
+    public Result delManageRecordIntervals(Integer id) {
+        return Result.success(manageRecordIntervalsService.delManageRecordIntervals(id));
+    }
+
+    @ApiOperation(value = "瀵煎嚭鏂囦欢瀹氭湡瀹℃煡璁板綍")
+    @GetMapping("/exportOutManageRecordIntervals")
+    public Result exportOutManageRecordIntervals(ManageRecordIntervals manageRecordIntervals, HttpServletResponse response) throws Exception {
+        return Result.success(manageRecordIntervalsService.exportOutManageRecordIntervals(manageRecordIntervals,response));
+    }
+
+    @ApiOperation(value = "瀵煎叆鏂囦欢瀹氭湡瀹℃煡璁板綍")
+    @PostMapping("/exportInManageRecordIntervals")
+    public Result exportInManageRecordIntervals(MultipartFile file){
+        return Result.success(manageRecordIntervalsService.exportInManageRecordIntervals(file));
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsTotalController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsTotalController.java
new file mode 100644
index 0000000..8058c97
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsTotalController.java
@@ -0,0 +1,50 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import com.ruoyi.manage.service.ManageRecordIntervalsTotalService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 01:12:11
+ */
+@RestController
+@RequestMapping("/manageRecordIntervalsTotal")
+public class ManageRecordIntervalsTotalController {
+
+    @Resource
+    private ManageRecordIntervalsTotalService manageRecordIntervalsTotalService;
+
+    @ApiOperation(value = "鏌ヨ鏂囦欢瀹氭湡瀹℃煡璁板綍鍘嗗彶鍒楄〃")
+    @GetMapping("/pageManageRecordIntervalsTotal")
+    public Result pageManageRecordIntervalsTotal(Page page,ManageRecordIntervalsTotal manageRecordIntervalsTotal) throws Exception {
+        return Result.success(manageRecordIntervalsTotalService.pageManageRecordIntervalsTotal(page, manageRecordIntervalsTotal));
+    }
+
+    @ApiOperation(value = "鎻愪氦鏂囦欢瀹氭湡瀹℃煡璁板綍鍘嗗彶鍒楄〃")
+    @PostMapping("/submitManageRecordIntervalsTotal")
+    public Result submitManageRecordIntervalsTotal(@RequestBody Map<String, Integer> param) {
+        Integer id = param.get("id");
+        return Result.success(manageRecordIntervalsTotalService.submitManageRecordIntervalsTotal(id));
+    }
+
+    @ApiOperation(value = "鎵瑰噯鏂囦欢瀹氭湡瀹℃煡璁板綍鍘嗗彶鍒楄〃")
+    @PostMapping("/ratifyManageRecordIntervalsTotal")
+    public Result ratifyManageRecordIntervalsTotal(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        String ratifyState = (String) param.get("ratifyState");
+        return Result.success(manageRecordIntervalsTotalService.ratifyManageRecordIntervalsTotal(id, ratifyState));
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIssueRecycleController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIssueRecycleController.java
new file mode 100644
index 0000000..eb7f3f5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIssueRecycleController.java
@@ -0,0 +1,67 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import com.ruoyi.manage.service.ManageRecordIssueRecycleService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 09:11:05
+ */
+@RestController
+@RequestMapping("/manageRecordIssueRecycle")
+public class ManageRecordIssueRecycleController {
+
+    @Resource
+    private ManageRecordIssueRecycleService manageRecordIssueRecycleService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+    @GetMapping("/pageManageRecordIssueRecycle")
+    public Result pageManageRecordIssueRecycle(Page page,ManageRecordIssueRecycle manageRecordIssueRecycle) throws Exception {
+        return Result.success(manageRecordIssueRecycleService.pageManageRecordIssueRecycle(page, manageRecordIssueRecycle));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+    @DeleteMapping("/delManageRecordIssueRecycle")
+    public Result delManageRecordIssueRecycle(Integer id){
+        return Result.success(manageRecordIssueRecycleService.removeById(id));
+    }
+
+    @ApiOperation(value = "鏂板鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+    @PostMapping("/addManageRecordIssueRecycle")
+    public Result addManageRecordIssueRecycle(@RequestBody ManageRecordIssueRecycle manageRecordIssueRecycle){
+        return Result.success(manageRecordIssueRecycleService.addManageRecordIssueRecycle(manageRecordIssueRecycle));
+    }
+
+    @ApiOperation(value = "缂栬緫鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+    @PostMapping("/doManageRecordIssueRecycle")
+    public Result doManageRecordIssueRecycle(@RequestBody ManageRecordIssueRecycle manageRecordIssueRecycle){
+        return Result.success(manageRecordIssueRecycleService.doManageRecordIssueRecycle(manageRecordIssueRecycle));
+    }
+
+    @ApiOperation(value = "瀵煎嚭鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+    @GetMapping("/exportOutManageRecordIssueRecycle")
+    public Result exportOutManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle, HttpServletResponse response) throws Exception {
+        return Result.success(manageRecordIssueRecycleService.exportOutManageRecordIssueRecycle(manageRecordIssueRecycle,response));
+    }
+
+    @ApiOperation(value = "瀵煎叆鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+    @PostMapping("/exportInManageRecordIssueRecycle")
+    public Result exportInManageRecordIssueRecycle(MultipartFile file){
+        return Result.success(manageRecordIssueRecycleService.exportInManageRecordIssueRecycle(file));
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordTotalController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordTotalController.java
new file mode 100644
index 0000000..0c845cf
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordTotalController.java
@@ -0,0 +1,50 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import com.ruoyi.manage.service.ManageRecordTotalService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:30:08
+ */
+@RestController
+@RequestMapping("/manageRecordTotal")
+public class ManageRecordTotalController {
+
+    @Resource
+    private ManageRecordTotalService manageRecordTotalService;
+
+    @ApiOperation(value = "鏌ヨ澶栨潵鏂囦欢纭璁板綍鍘嗗彶鍒楄〃")
+    @GetMapping("/pageManageRecordTotal")
+    public Result pageManageRecordTotal(Page page, ManageRecordTotal manageRecordTotal) throws Exception {
+        return Result.success(manageRecordTotalService.pageManageRecordTotal(page, manageRecordTotal));
+    }
+
+    @ApiOperation(value = "鎻愪氦澶栨潵鏂囦欢纭璁板綍鍘嗗彶鍒楄〃")
+    @PostMapping("/submitManageRecordTotal")
+    public Result submitManageRecordTotal(@RequestBody Map<String, Integer> param) {
+        Integer id = param.get("id");
+        return Result.success(manageRecordTotalService.submitManageRecordTotal(id));
+    }
+
+    @ApiOperation(value = "鎵瑰噯澶栨潵鏂囦欢纭璁板綍鍘嗗彶鍒楄〃")
+    @PostMapping("/ratifyManageRecordTotal")
+    public Result ratifyManageRecordTotal(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        String ratifyState = (String) param.get("ratifyState");
+        return Result.success(manageRecordTotalService.ratifyManageRecordTotal(id, ratifyState));
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordVerifyController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordVerifyController.java
new file mode 100644
index 0000000..4a2c4bc
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordVerifyController.java
@@ -0,0 +1,60 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import com.ruoyi.manage.service.ManageRecordVerifyService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:29:44
+ */
+@RestController
+@RequestMapping("/manageRecordVerify")
+public class ManageRecordVerifyController {
+
+    @Resource
+    private ManageRecordVerifyService manageRecordVerifyService;
+
+    @ApiOperation(value = "鏌ヨ澶栨潵鏂囦欢纭璁板綍璇︽儏")
+    @GetMapping("/pageManageRecordVerify")
+    public Result pageManageRecordVerify(Page page,ManageRecordVerify manageRecordVerify) throws Exception {
+        return Result.success(manageRecordVerifyService.pageManageRecordVerify(page, manageRecordVerify));
+    }
+
+    @ApiOperation(value = "鏂板澶栨潵鏂囦欢纭璁板綍")
+    @PostMapping("/addManageRecordVerify")
+    public Result addManageRecordVerify(@RequestBody ManageRecordVerify manageRecordVerify) {
+        return Result.success(manageRecordVerifyService.addManageRecordVerify(manageRecordVerify));
+    }
+
+    @ApiOperation(value = "鍒犻櫎澶栨潵鏂囦欢纭璁板綍")
+    @DeleteMapping("/delManageRecordVerify")
+    public Result delManageRecordVerify(Integer id) {
+        return Result.success(manageRecordVerifyService.delManageRecordVerify(id));
+    }
+
+    @ApiOperation(value = "淇敼澶栨潵鏂囦欢纭璁板綍")
+    @PostMapping("/doManageRecordVerify")
+    public Result doManageRecordVerify(@RequestBody ManageRecordVerify manageRecordVerify) {
+        return Result.success(manageRecordVerifyService.updateById(manageRecordVerify));
+    }
+
+    @ApiOperation(value = "瀵煎叆澶栨潵鏂囦欢纭璁板綍")
+    @PostMapping("/exportManageRecordVerify")
+    public Result exportManageRecordVerify(MultipartFile file) {
+        return Result.success(manageRecordVerifyService.exportManageRecordVerify(file));
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramController.java
new file mode 100644
index 0000000..d893c88
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramController.java
@@ -0,0 +1,66 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import com.ruoyi.manage.service.ManageReviewProgramService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 03:05:42
+ */
+@Api(tags = "绠$悊璇勫璁″垝")
+@RestController
+@RequestMapping("/manageReviewProgram")
+public class ManageReviewProgramController {
+    @Resource
+    private ManageReviewProgramService manageReviewProgramService;
+
+
+    @ApiOperation(value = "鏌ヨ璇勫璁″垝")
+    @GetMapping("/getPageReviewProgram")
+    public Result<IPage<ManageReviewProgram>> getPageReviewProgram(Page page, String startTime, String endTime, String judgingLocation) throws Exception {
+        IPage<ManageReviewProgram> ipage = manageReviewProgramService.page(page,startTime,endTime,judgingLocation);
+        return Result.success(ipage);
+    }
+
+
+    @ApiOperation(value = "鏂板璇勫璁″垝")
+    @PostMapping("/addReviewProgram")
+    public Result addReviewProgram(@RequestBody ManageReviewProgram manageReviewProgram){
+        return Result.success(manageReviewProgramService.addReviewProgram(manageReviewProgram));
+    }
+
+    @ApiOperation(value = "缂栬緫璇勫璁″垝")
+    @PostMapping("/modifyReviewProgram")
+    public Result modifyReviewProgram(@RequestBody ManageReviewProgram manageReviewProgram){
+        return Result.success(manageReviewProgramService.updateById(manageReviewProgram));
+    }
+
+    @ApiOperation(value = "鍒犻櫎璇勫璁″垝")
+    @DeleteMapping("/deleteReviewProgram")
+    public Result deleteReviewProgram( Integer id){
+        return Result.success(manageReviewProgramService.removeById(id));
+    }
+
+
+    @ApiOperation(value = "涓嬭浇璇勫璁″垝")
+    @GetMapping("/exportReviewProgram")
+    public void exportReviewProgram(Integer id, HttpServletResponse response){
+        manageReviewProgramService.exportReviewProgram(id,response);
+    }
+
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramFileController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramFileController.java
new file mode 100644
index 0000000..1662440
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramFileController.java
@@ -0,0 +1,42 @@
+package com.ruoyi.manage.controller;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.service.ManageReviewProgramFileService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 04:15:47
+ */
+@RestController
+@RequestMapping("/manageReviewProgramFile")
+public class ManageReviewProgramFileController {
+
+    @Resource
+    private ManageReviewProgramFileService manageReviewProgramFileService;
+
+    @ApiOperation(value = "鏌ヨ璇勫璁″垝鏂囦欢")
+    @GetMapping("/selectReviewProgramFile")
+    public Result selectReviewProgramFile(Integer id){
+        return Result.success(manageReviewProgramFileService.selectFile(id));
+    }
+
+
+    @ApiOperation(value = "鏂板璇勫璁″垝鏂囦欢")
+    @PostMapping("/addReviewProgramFile")
+    public Result addReviewProgramFile(MultipartFile file,Integer id){
+        manageReviewProgramFileService.addFile(file,id);
+        return Result.success();
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewReportController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewReportController.java
new file mode 100644
index 0000000..31fc9d5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewReportController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.pojo.ManageReviewReport;
+import com.ruoyi.manage.service.ManageReviewReportService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 04:44:39
+ */
+@Api(tags = "绠$悊璇勫鎶ュ憡")
+@RestController
+@RequestMapping("/manageReviewReport")
+public class ManageReviewReportController {
+
+    @Resource
+    private ManageReviewReportService manageReviewReportService;
+
+    @ApiOperation(value = "鏌ヨ绠$悊璇勫鎶ュ憡")
+    @GetMapping("/getPageReviewReport")
+    public Result<IPage<ManageReviewReport>> getPageReviewReport(Page page, String startTime, String endTime, String place) {
+        IPage<ManageReviewReport> ipage = manageReviewReportService.page(page,startTime,endTime,place);
+        return Result.success(ipage);
+    }
+
+    @ApiOperation(value = "鏂板绠$悊璇勫鎶ュ憡")
+    @PostMapping("/addReviewReport")
+    public Result addReviewReport(@RequestBody ManageReviewReport manageReviewReport){
+        return Result.success(manageReviewReportService.save(manageReviewReport));
+    }
+
+    @ApiOperation(value = "缂栬緫绠$悊璇勫鎶ュ憡")
+    @PostMapping("/modifyReviewReport")
+    public Result modifyReviewReport(@RequestBody ManageReviewReport manageReviewReport){
+        return Result.success(manageReviewReportService.updateById(manageReviewReport));
+    }
+
+    @ApiOperation(value = "鍒犻櫎绠$悊璇勫鎶ュ憡")
+    @DeleteMapping("/deleteReviewReport")
+    public Result deleteReviewReport(Integer id){
+        return Result.success(manageReviewReportService.removeById(id));
+    }
+
+    @ApiOperation(value = "涓嬭浇绠$悊璇勫鎶ュ憡")
+    @GetMapping("/exportReviewReport")
+    public void exportReviewReport(Integer id , HttpServletResponse response){
+        manageReviewReportService.exportReviewReport(id,response);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRiskAssessmentResultsController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRiskAssessmentResultsController.java
new file mode 100644
index 0000000..4c9ac50
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRiskAssessmentResultsController.java
@@ -0,0 +1,133 @@
+package com.ruoyi.manage.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.enums.CellExtraTypeEnum;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import com.ruoyi.manage.service.ManageRiskAssessmentResultsService;
+import com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:51
+ */
+@Api(tags = "鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃")
+@RestController
+@RequestMapping("/manageRiskAssessmentResults")
+public class ManageRiskAssessmentResultsController {
+
+    @Resource
+    private ManageRiskAssessmentResultsService manageRiskAssessmentResultsService;
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ")
+    @GetMapping("/getPageResults")
+    public Result<IPage<ManageRiskAssessmentResultsVo>> getPageResults(Page page) {
+        IPage<ManageRiskAssessmentResultsVo> ipage = manageRiskAssessmentResultsService.getPageResults(page);
+        return Result.success(ipage);
+    }
+
+    @ApiOperation(value = "鎵瑰噯")
+    @PostMapping("/hazardIdentificationAndRiskApproval")
+    public Result<?> hazardIdentificationAndRiskApproval(@RequestBody Map<String, Integer> param) {
+        Integer approve = param.get("approve");
+        Integer status = param.get("status");
+        manageRiskAssessmentResultsService.update(Wrappers.<ManageRiskAssessmentResults>lambdaUpdate()
+                .set(ManageRiskAssessmentResults::getApprove, approve)
+                .set(ManageRiskAssessmentResults::getApproveStatus, status)
+                .set(ManageRiskAssessmentResults::getApproveDate, LocalDateTime.now()));
+        return Result.success();
+    }
+
+    @ApiOperation(value = "瀹℃壒")
+    @PostMapping("/dangerousRiskApproval")
+    public Result<?> dangerousRiskApproval(@RequestBody Map<String, Integer> param) {
+        Integer approval = param.get("approval");
+        Integer status = param.get("status");
+        manageRiskAssessmentResultsService.update(Wrappers.<ManageRiskAssessmentResults>lambdaUpdate()
+                .set(ManageRiskAssessmentResults::getApproval, approval)
+                .set(ManageRiskAssessmentResults::getApprovalStatus, status)
+                .set(ManageRiskAssessmentResults::getApprovalDate, LocalDateTime.now()));
+        return Result.success();
+    }
+
+    @ApiOperation(value = "瀵煎叆")
+    @PostMapping("/riskAssessmentImport")
+    public void riskAssessmentImport(MultipartFile file) throws IOException {
+        boolean excelFile = isExcelFile(file);
+        if (!excelFile) {
+            throw new ErrorException("璇峰鍏xcel鏂囦欢锛�");
+        }
+        EasyExcel.read(file.getInputStream(), ManageRiskAssessmentResults.class, new PageReadListener<ManageRiskAssessmentResults>(dataList -> {
+            Integer userId = SecurityUtils.getUserId().intValue();
+            dataList.forEach(i -> {
+                i.setEditor(userId);
+                i.setEditorDate(LocalDateTime.now());
+                i.setApproveStatus(0);
+                i.setApprovalStatus(0);
+            });
+            manageRiskAssessmentResultsService.saveOrUpdateBatch(dataList);
+        })).extraRead(CellExtraTypeEnum.MERGE).sheet().doRead();
+    }
+
+    @ApiOperation(value = "鏂板")
+    @PostMapping("/addNewRiskFactors")
+    public void addNewRiskFactors(@RequestBody ManageRiskAssessmentResults manageRiskAssessmentResults) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        manageRiskAssessmentResults.setEditor(userId);
+        manageRiskAssessmentResults.setEditorDate(LocalDateTime.now());
+        manageRiskAssessmentResultsService.saveOrUpdate(manageRiskAssessmentResults);
+    }
+
+    @ApiOperation(value = "鍒犻櫎")
+    @DeleteMapping("/removeRiskFactors")
+    public void removeRiskFactors(Integer id) {
+        manageRiskAssessmentResultsService.removeById(id);
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅璁″垝
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�")
+    @GetMapping("/exportHazardFactorIdentification")
+    public void exportPersonTraining(HttpServletResponse response){
+        manageRiskAssessmentResultsService.exportPersonTraining(response);
+    }
+
+    public static boolean isExcelFile(MultipartFile file) {
+        if (file.isEmpty()) {
+            return false;
+        }
+        String originalFilename = file.getOriginalFilename();
+        if (originalFilename == null) {
+            return false;
+        }
+        String[] parts = originalFilename.split("\\.");
+        if (parts.length == 0) {
+            return false;
+        }
+        String fileExtension = parts[parts.length - 1].toLowerCase();
+        return fileExtension.equals("xls") || fileExtension.equals("xlsx");
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/ClientSatisfactionDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ClientSatisfactionDto.java
new file mode 100644
index 0000000..e015e5f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ClientSatisfactionDto.java
@@ -0,0 +1,50 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-16 鏄熸湡涓� 10:38:30
+ * Description: 瀹㈡埛婊℃剰搴﹁皟鏌ュ鍑篧ord
+ */
+@Data
+public class ClientSatisfactionDto extends ClientSatisfaction {
+
+    @ApiModelProperty("鏈嶅姟鎬佸害, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String serviceAttitude0;
+
+    @ApiModelProperty("鏈嶅姟鎬佸害, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String serviceAttitude1;
+
+    @ApiModelProperty("鏈嶅姟鎬佸害, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String serviceAttitude2;
+
+    @ApiModelProperty("鎶�鏈兘鍔�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String technicalCompetence0;
+
+    @ApiModelProperty("鎶�鏈兘鍔�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String technicalCompetence1;
+
+    @ApiModelProperty("鎶�鏈兘鍔�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String technicalCompetence2;
+
+    @ApiModelProperty("妫�娴嬪伐浣�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String inspectionWork0;
+
+    @ApiModelProperty("妫�娴嬪伐浣�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String inspectionWork1;
+
+    @ApiModelProperty("妫�娴嬪伐浣�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String inspectionWork2;
+
+    @ApiModelProperty("鏀惰垂鍚堢悊鎬�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String reasonableFees0;
+
+    @ApiModelProperty("鏀惰垂鍚堢悊鎬�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String reasonableFees1;
+
+    @ApiModelProperty("鏀惰垂鍚堢悊鎬�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private String reasonableFees2;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCheckDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCheckDto.java
new file mode 100644
index 0000000..8397147
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCheckDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalCheck;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/11
+ */
+@Data
+public class InternalCheckDto extends InternalCheck {
+
+    @ApiModelProperty("妫�鏌ヨ鎯�")
+    private List<InternalCheckDetail> checkDetailList;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCorrectDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCorrectDto.java
new file mode 100644
index 0000000..5631f77
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCorrectDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalCorrect;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/19
+ */
+@Data
+public class InternalCorrectDto extends InternalCorrect {
+
+    @ApiModelProperty("鎻愬嚭鏃堕棿")
+    private String raiseTimeString;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽鏃堕棿")
+    private String causeTimeString;
+
+    @ApiModelProperty("绾犳鏃堕棿")
+    private String correctTimeString;
+
+    @ApiModelProperty("楠岃瘉鏃堕棿")
+    private String validationTimeString;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalImplementDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalImplementDto.java
new file mode 100644
index 0000000..b64e860
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalImplementDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalImplement;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/11
+ */
+@Data
+public class InternalImplementDto extends InternalImplement {
+
+    @ApiModelProperty("璁″垝璇︽儏")
+    private List<InternalImplementDetail> implementDetailList;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingDto.java
new file mode 100644
index 0000000..acd460c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalMeeting;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/12
+ */
+@Data
+public class InternalMeetingDto extends InternalMeeting {
+
+    @ApiModelProperty("鍙傚姞浜�")
+    private List<InternalMeetingDetail> meetingDetailList;
+
+    @ApiModelProperty("鍙傚姞浜轰俊鎭�")
+    private String participantName;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingParticipantDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingParticipantDto.java
new file mode 100644
index 0000000..e99b66a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingParticipantDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.manage.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍙傚姞浜哄憳瀵硅薄
+ *
+ * @Author zhuo
+ * @Date 2024/11/19
+ */
+@Data
+public class InternalMeetingParticipantDto {
+
+    @ApiModelProperty("鍙傚姞浜哄憳1")
+    private String userName1;
+
+    @ApiModelProperty("閮ㄩ棬1")
+    private String department1;
+
+    @ApiModelProperty("鍙傚姞浜哄憳2")
+    private String userName2;
+
+    @ApiModelProperty("閮ㄩ棬2")
+    private String department2;
+
+    @ApiModelProperty("鍙傚姞浜哄憳3")
+    private String userName3;
+
+    @ApiModelProperty("閮ㄩ棬3")
+    private String department3;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalPlanDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalPlanDto.java
new file mode 100644
index 0000000..76a60da
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalPlanDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalPlan;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/13
+ */
+@Data
+public class InternalPlanDto extends InternalPlan {
+
+    @ApiModelProperty("璁″垝璇︽儏")
+    private List<InternalPlanDetail> planDetailList;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageDocumentIssueRecycleDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageDocumentIssueRecycleDto.java
new file mode 100644
index 0000000..eca61f5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageDocumentIssueRecycleDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.manage.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ExcelIgnoreUnannotated
+public class ManageDocumentIssueRecycleDto extends ManageDocumentIssueRecycle {
+
+    @ApiModelProperty("鍙戞斁浜�")
+    @ExcelProperty(value = "鍙戞斁浜�")
+    private String issueUserName;
+
+    @ApiModelProperty("鍥炴敹浜�")
+    @ExcelProperty(value = "鍥炴敹浜�")
+    private String recycleUserName;
+
+    @ApiModelProperty("鎺ユ敹浜�")
+    @ExcelProperty(value = "鎺ユ敹浜�")
+    private String receiveUserName;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingDto.java
new file mode 100644
index 0000000..a32ec7b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.ManageMeeting;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ManageMeetingDto extends ManageMeeting {
+
+    private List<ManageMeetingParticipants> list;
+
+    private String participant;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingParticipantsDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingParticipantsDto.java
new file mode 100644
index 0000000..ced01d2
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingParticipantsDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ManageMeetingParticipantsDto {
+
+    @ApiModelProperty("鍙傚姞浜哄憳1")
+    private String userName1;
+
+    @ApiModelProperty("閮ㄩ棬1")
+    private String department1;
+
+    @ApiModelProperty("鍙傚姞浜哄憳2")
+    private String userName2;
+
+    @ApiModelProperty("閮ㄩ棬2")
+    private String department2;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/excel/ManageDocumentListListener.java b/cnas-manage/src/main/java/com/ruoyi/manage/excel/ManageDocumentListListener.java
new file mode 100644
index 0000000..389b6b6
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/excel/ManageDocumentListListener.java
@@ -0,0 +1,40 @@
+package com.ruoyi.manage.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.service.ManageDocumentListService;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class ManageDocumentListListener extends AnalysisEventListener<ManageDocumentList> {
+    private static final int BATCH_COUNT = 1000;
+    List<ManageDocumentList> list = new ArrayList<>();
+
+    private ManageDocumentListService manageDocumentListService;
+
+    public ManageDocumentListListener(ManageDocumentListService manageDocumentListService) {
+        this.manageDocumentListService = manageDocumentListService;
+    }
+
+    @Override
+    public void invoke(ManageDocumentList data, AnalysisContext analysisContext) {
+        list.add(data);
+        if (list.size() >= BATCH_COUNT) {
+            save();
+            list.clear();
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        save();
+    }
+
+    private void save() {
+        manageDocumentListService.importExcel(list);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionAnalyseFileMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionAnalyseFileMapper.java
new file mode 100644
index 0000000..cb26a77
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionAnalyseFileMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 瀹㈡埛婊℃剰搴﹀垎鏋愰檮浠�
+ *
+ * @author makejava
+ * @since 2024-11-09
+ */
+@Mapper
+public interface ClientSatisfactionAnalyseFileMapper extends BaseMapper<ClientSatisfactionAnalyseFile> {
+
+    /**
+     * 瀹㈡埛鍒嗘瀽闄勪欢鍒楄〃
+     * @param page
+     * @return
+     */
+    IPage<ClientSatisfactionAnalyseFile> pageAnalyseFile(Page page, @Param("ew") QueryWrapper<ClientSatisfactionAnalyseFile> ew);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionMapper.java
new file mode 100644
index 0000000..182ce3c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionMapper.java
@@ -0,0 +1,36 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.ClientSatisfactionDto;
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Mapper
+public interface ClientSatisfactionMapper extends BaseMapper<ClientSatisfaction> {
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<ClientSatisfaction> pageClientSatisfaction(Page page, @Param("ew") QueryWrapper<ClientSatisfaction> ew);
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹀鍑�
+     * @param clientSatisfactionId
+     * @return
+     */
+    ClientSatisfactionDto exportWordClientSatisfaction(Integer clientSatisfactionId);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckDetailMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckDetailMapper.java
new file mode 100644
index 0000000..65c7b78
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckDetailMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鍐呭妫�鏌ヨ鎯呰〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalCheckDetailMapper extends BaseMapper<InternalCheckDetail> {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckMapper.java
new file mode 100644
index 0000000..97196d4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.InternalCheckDto;
+import com.ruoyi.manage.pojo.InternalCheck;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalCheckMapper extends BaseMapper<InternalCheck> {
+
+    /**
+     * 鍐呭妫�鏌ュ垎椤垫煡璇�
+     * @param page
+     * @return
+     */
+    IPage<InternalCheckDto> pageInternalCheck(Page page, @Param("ew") QueryWrapper<InternalCheck> ew);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectFileMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectFileMapper.java
new file mode 100644
index 0000000..0a6ae4e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectFileMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳鎺柦闄勪欢琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:38
+ */
+@Mapper
+public interface InternalCorrectFileMapper extends BaseMapper<InternalCorrectFile> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectMapper.java
new file mode 100644
index 0000000..727e05c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.InternalCorrect;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:15
+ */
+@Mapper
+public interface InternalCorrectMapper extends BaseMapper<InternalCorrect> {
+
+    IPage<InternalCorrect> pageInternalAccording(Page page, @Param("ew") QueryWrapper<InternalCorrect> ew);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementDetailMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementDetailMapper.java
new file mode 100644
index 0000000..2382df7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementDetailMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鍐呭瀹炴柦璁″垝璇︽儏
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalImplementDetailMapper extends BaseMapper<InternalImplementDetail> {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementMapper.java
new file mode 100644
index 0000000..b337b06
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.InternalImplementDto;
+import com.ruoyi.manage.pojo.InternalImplement;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalImplementMapper extends BaseMapper<InternalImplement> {
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+     * @param page
+     * @return
+     */
+    IPage<InternalImplementDto> pageInternalImplement(Page page, @Param("ew") QueryWrapper<InternalImplement> ew);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingDetailMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingDetailMapper.java
new file mode 100644
index 0000000..e7dc1e4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingDetailMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+
+/**
+ * <p>
+ * 鍐呭浼氳璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:56:13
+ */
+public interface InternalMeetingDetailMapper extends BaseMapper<InternalMeetingDetail> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingMapper.java
new file mode 100644
index 0000000..6980543
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.InternalMeetingDto;
+import com.ruoyi.manage.pojo.InternalMeeting;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:50:44
+ */
+public interface InternalMeetingMapper extends BaseMapper<InternalMeeting> {
+
+    /**
+     * 鍐呭浼氳鍒嗛〉鏌ヨ
+     * @param page
+     * @return
+     */
+    IPage<InternalMeetingDto> pageInternalMeeting(Page page, @Param("ew") QueryWrapper<InternalMeeting> ew);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanDetailMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanDetailMapper.java
new file mode 100644
index 0000000..e91be0f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanDetailMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:28:48
+ */
+@Mapper
+public interface InternalPlanDetailMapper extends BaseMapper<InternalPlanDetail> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanMapper.java
new file mode 100644
index 0000000..7a3b16e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanMapper.java
@@ -0,0 +1,30 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.InternalPlanDto;
+import com.ruoyi.manage.pojo.InternalPlan;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:27:47
+ */
+@Mapper
+public interface InternalPlanMapper extends BaseMapper<InternalPlan> {
+
+    /**
+     * 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<InternalPlanDto> pageInternalPlan(Page page, @Param("ew") QueryWrapper<InternalPlan> ew);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalReportMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalReportMapper.java
new file mode 100644
index 0000000..00cb8eb
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalReportMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.InternalReport;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalReportMapper extends BaseMapper<InternalReport> {
+
+    /**
+     * 鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalReportQueryWrapper
+     * @return
+     */
+    IPage<InternalReport> pageInternalReport(Page page, @Param("ew") QueryWrapper<InternalReport> internalReportQueryWrapper);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageControlPlanListMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageControlPlanListMapper.java
new file mode 100644
index 0000000..4585da0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageControlPlanListMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import com.ruoyi.manage.vo.ManageControlPlanListVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:30
+ */
+public interface ManageControlPlanListMapper extends BaseMapper<ManageControlPlanList> {
+
+    IPage<ManageControlPlanListVo> getPageList(Page page, @Param("itSExporting") Boolean itSExporting);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentAlterMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentAlterMapper.java
new file mode 100644
index 0000000..0af92ae
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentAlterMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageDocumentAlter;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 11:04:01
+ */
+public interface ManageDocumentAlterMapper extends BaseMapper<ManageDocumentAlter> {
+
+    IPage<ManageDocumentAlter> pageManageDocumentAlter(Page page, @Param("ew") QueryWrapper<ManageDocumentAlter> queryWrappers);
+
+    ManageDocumentAlter getManageDocumentAlter(Integer id);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentCancelMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentCancelMapper.java
new file mode 100644
index 0000000..8fade5a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentCancelMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageDocumentCancel;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 02:37:35
+ */
+public interface ManageDocumentCancelMapper extends BaseMapper<ManageDocumentCancel> {
+
+    IPage<ManageDocumentCancel> pageManageDocumentCancel(Page page, @Param("ew") QueryWrapper<ManageDocumentCancel> queryWrappers);
+
+    ManageDocumentCancel getManageDocumentCancel(Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentControlledMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentControlledMapper.java
new file mode 100644
index 0000000..5674813
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentControlledMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageDocumentControlled;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 02:54:44
+ */
+public interface ManageDocumentControlledMapper extends BaseMapper<ManageDocumentControlled> {
+
+    IPage<ManageDocumentControlled> pageManageDocumentControlled(Page page, @Param("ew") QueryWrapper<ManageDocumentControlled> queryWrappers);
+
+    ManageDocumentControlled getManageDocumentControlled(Long id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentIssueRecycleMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentIssueRecycleMapper.java
new file mode 100644
index 0000000..e942c06
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentIssueRecycleMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 09:18:24
+ */
+public interface ManageDocumentIssueRecycleMapper extends BaseMapper<ManageDocumentIssueRecycle> {
+
+    IPage<ManageDocumentIssueRecycleDto> pageManageDocumentIssueRecycle(Page page, @Param("ew") QueryWrapper<ManageDocumentIssueRecycleDto> queryWrappers);
+
+    ManageDocumentIssueRecycleDto getManageDocumentIssueRecycle(Long id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentListMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentListMapper.java
new file mode 100644
index 0000000..0945cd7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentListMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+ Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 11:08:11
+ */
+public interface ManageDocumentListMapper extends BaseMapper<ManageDocumentList> {
+
+    IPage<ManageDocumentList> pageManageDocumentList(Page page, @Param("ew") QueryWrapper<ManageDocumentList> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingMapper.java
new file mode 100644
index 0000000..fc3e29c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.ManageMeetingDto;
+import com.ruoyi.manage.pojo.ManageMeeting;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:33:47
+ */
+public interface ManageMeetingMapper extends BaseMapper<ManageMeeting> {
+
+
+    IPage<ManageMeetingDto> page(Page page, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("place") String place);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingParticipantsMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingParticipantsMapper.java
new file mode 100644
index 0000000..765f5b8
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingParticipantsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:34:27
+ */
+public interface ManageMeetingParticipantsMapper extends BaseMapper<ManageMeetingParticipants> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordAuditMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordAuditMapper.java
new file mode 100644
index 0000000..93cddbd
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordAuditMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 10:29:18
+ */
+public interface ManageRecordAuditMapper extends BaseMapper<ManageRecordAudit> {
+
+    IPage<ManageRecordAudit> pageManageRecordAudit(Page page, @Param("ew") QueryWrapper<ManageRecordAudit> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCancelMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCancelMapper.java
new file mode 100644
index 0000000..f476625
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCancelMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordCancel;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 01:27:22
+ */
+public interface ManageRecordCancelMapper extends BaseMapper<ManageRecordCancel> {
+
+    IPage<ManageRecordCancel> pageManageRecordCancel(Page page, @Param("ew") QueryWrapper<ManageRecordCancel> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCheckMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCheckMapper.java
new file mode 100644
index 0000000..09fd3a7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCheckMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍) Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:31:36
+ */
+public interface ManageRecordCheckMapper extends BaseMapper<ManageRecordCheck> {
+
+    IPage<ManageRecordCheck> pageManageRecordCheck(Page page, @Param("ew") QueryWrapper<ManageRecordCheck> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsMapper.java
new file mode 100644
index 0000000..f1ae6e8
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 10:54:31
+ */
+public interface ManageRecordIntervalsMapper extends BaseMapper<ManageRecordIntervals> {
+
+    IPage<ManageRecordIntervals> pageManageRecordIntervals(Page page, @Param("ew") QueryWrapper<ManageRecordIntervals> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsTotalMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsTotalMapper.java
new file mode 100644
index 0000000..563373d
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsTotalMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 01:12:11
+ */
+public interface ManageRecordIntervalsTotalMapper extends BaseMapper<ManageRecordIntervalsTotal> {
+
+    IPage<ManageRecordIntervalsTotal> pageManageRecordIntervalsTotal(Page page, @Param("ew") QueryWrapper<ManageRecordIntervalsTotal> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIssueRecycleMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIssueRecycleMapper.java
new file mode 100644
index 0000000..693b833
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIssueRecycleMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 09:11:05
+ */
+public interface ManageRecordIssueRecycleMapper extends BaseMapper<ManageRecordIssueRecycle> {
+
+    IPage<ManageRecordIssueRecycle> pageManageRecordIssueRecycle(Page page, @Param("ew") QueryWrapper<ManageRecordIssueRecycle> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordTotalMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordTotalMapper.java
new file mode 100644
index 0000000..47d349c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordTotalMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:30:08
+ */
+public interface ManageRecordTotalMapper extends BaseMapper<ManageRecordTotal> {
+
+    IPage<ManageRecordTotal> pageProcessTotaldeal(Page page, @Param("ew") QueryWrapper<ManageRecordTotal> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordVerifyMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordVerifyMapper.java
new file mode 100644
index 0000000..b34e72b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordVerifyMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:29:44
+ */
+public interface ManageRecordVerifyMapper extends BaseMapper<ManageRecordVerify> {
+
+    IPage<ManageRecordVerify> pageManageRecordVerify(Page page, @Param("ew") QueryWrapper<ManageRecordVerify> queryWrappers);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramFileMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramFileMapper.java
new file mode 100644
index 0000000..d82fcd4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramFileMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.ManageReviewProgramFile;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 04:15:47
+ */
+public interface ManageReviewProgramFileMapper extends BaseMapper<ManageReviewProgramFile> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramMapper.java
new file mode 100644
index 0000000..96c1a29
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 03:05:42
+ */
+public interface ManageReviewProgramMapper extends BaseMapper<ManageReviewProgram> {
+
+
+    IPage<ManageReviewProgram> page(Page page, @Param("startTime") String startTime,@Param("endTime") String endTime,@Param("judgingLocation") String judgingLocation);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewReportMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewReportMapper.java
new file mode 100644
index 0000000..f7a5a99
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewReportMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageReviewReport;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 04:44:39
+ */
+public interface ManageReviewReportMapper extends BaseMapper<ManageReviewReport> {
+
+    IPage<ManageReviewReport> page(Page page, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("place") String place);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRiskAssessmentResultsMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRiskAssessmentResultsMapper.java
new file mode 100644
index 0000000..d512013
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRiskAssessmentResultsMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:51
+ */
+public interface ManageRiskAssessmentResultsMapper extends BaseMapper<ManageRiskAssessmentResults> {
+
+    IPage<ManageRiskAssessmentResultsVo> getPageResults(Page page, @Param("itSExporting") Boolean itSExporting);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfaction.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfaction.java
new file mode 100644
index 0000000..aedcde0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfaction.java
@@ -0,0 +1,95 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Data
+@TableName("cnas_client_satisfaction")
+public class ClientSatisfaction {
+
+    @TableId(type = IdType.AUTO)
+    private Integer clientSatisfactionId;
+
+    @ApiModelProperty("鍗曚綅鍚嶇О")
+    private String unitName;
+
+    @ApiModelProperty("濮撳悕")
+    private String userName;
+
+    @ApiModelProperty("濉啓鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate fillDate;
+
+    @ApiModelProperty("閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty("鑱旂郴鐢佃瘽")
+    private String contactNumber;
+
+    @ApiModelProperty("鏈嶅姟鎬佸害, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private Integer serviceAttitude;
+
+    @ApiModelProperty("鏈嶅姟鎬佸害寤鸿")
+    private String serviceAttitudeSuggestion;
+
+    @ApiModelProperty("鎶�鏈兘鍔�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private Integer technicalCompetence;
+
+    @ApiModelProperty("鎶�鏈兘鍔涘缓璁�")
+    private String technicalCompetenceSuggestion;
+
+    @ApiModelProperty("妫�娴嬪伐浣�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private Integer inspectionWork;
+
+    @ApiModelProperty("妫�娴嬪伐浣滃缓璁�")
+    private String inspectionWorkSuggestion;
+
+    @ApiModelProperty("鏀惰垂鍚堢悊鎬�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+    private Integer reasonableFees;
+
+    @ApiModelProperty("鏀惰垂鍚堢悊鎬у缓璁�")
+    private String reasonableFeesSuggestion;
+
+    @ApiModelProperty("纭浜�")
+    private String confirmPerson;
+
+    @ApiModelProperty("纭浜篒d")
+    private Integer confirmPersonId;
+
+    @ApiModelProperty("纭鐘舵��, 0:鏈‘璁�, 1:纭")
+    private Integer confirmStatus;
+
+    @ApiModelProperty("澶囨敞(瀵规垜浠殑甯屾湜)")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfactionAnalyseFile.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfactionAnalyseFile.java
new file mode 100644
index 0000000..bb7d694
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfactionAnalyseFile.java
@@ -0,0 +1,54 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 瀹㈡埛婊℃剰搴﹀垎鏋愰檮浠�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Data
+@TableName("cnas_client_satisfaction_analyse_file")
+public class ClientSatisfactionAnalyseFile {
+
+    @TableId(type = IdType.AUTO)
+    private Integer analyseFileId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty("鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(select = false,exist = false)
+    private String userName;
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheck.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheck.java
new file mode 100644
index 0000000..95128b0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheck.java
@@ -0,0 +1,80 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_check")
+public class InternalCheck {
+
+    @TableId(type = IdType.AUTO)
+    private Integer checkId;
+
+    @ApiModelProperty("閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty("閮ㄩ棬璐熻矗浜�")
+    private String departmentHead;
+
+    @ApiModelProperty("瀹℃牳鍛�")
+    private String auditor;
+
+    @ApiModelProperty("瀹℃牳鏃ユ湡")
+    private String reviewDate;
+
+    @ApiModelProperty("缂栧埗浜篿d")
+    private Integer writeUserId;
+
+    @ApiModelProperty("缂栧埗浜�")
+    private String writeUserName;
+
+    @ApiModelProperty("缂栧埗鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime writeTime;
+
+    @ApiModelProperty("鎵瑰噯浜篿d")
+    private Integer ratifyUserId;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private String ratifyUserName;
+
+    @ApiModelProperty("鎵瑰噯鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime ratifyTime;
+
+    @ApiModelProperty("鎵瑰噯鐘舵��, 0 涓嶉�氳繃, 1閫氳繃")
+    private Integer ratifyStatus;
+
+    @ApiModelProperty("鎵瑰噯鍐呭")
+    private String ratifyRemark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheckDetail.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheckDetail.java
new file mode 100644
index 0000000..7cc5513
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheckDetail.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭妫�鏌ヨ鎯呰〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_check_detail")
+public class InternalCheckDetail {
+
+    @TableId(type = IdType.AUTO)
+    private Integer checkDetailId;
+
+    @ApiModelProperty("妫�鏌ヤ富琛╥d")
+    private Integer checkId;
+
+    @ApiModelProperty("瑕佺礌鏉℃")
+    private String element;
+
+    @ApiModelProperty("瀹℃牳鍐呭")
+    private String content;
+
+    @ApiModelProperty("瀹℃牳鏂瑰紡")
+    private String method;
+
+    @ApiModelProperty("瀹℃牳缁撴灉璁板綍")
+    private String resultRecords;
+
+    @ApiModelProperty("涓嶇鍚堟�ц川")
+    private String nonNature;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    // 瀵煎嚭浣跨敤
+    @TableField(select = false, exist = false)
+    private Integer index;
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrect.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrect.java
new file mode 100644
index 0000000..2adab8e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrect.java
@@ -0,0 +1,115 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:15
+ */
+@Data
+@TableName("cnas_internal_correct")
+@ApiModel(value = "InternalCorrect瀵硅薄", description = "鍐呭绠$悊绾犳澶勭悊琛�")
+public class InternalCorrect {
+
+    @TableId(value = "correct_id", type = IdType.AUTO)
+    private Integer correctId;
+
+    @ApiModelProperty("涓嶅悎鏍兼弿杩�")
+    private String raiseResult;
+
+    @ApiModelProperty("vde涓撳鍙戠幇")
+    private String vdeRaiseResult;
+
+    @ApiModelProperty("鎻愬嚭閮ㄩ棬")
+    private String raiseDepartment;
+
+    @ApiModelProperty("鎻愬嚭浜篿d")
+    private Integer raiseUserId;
+
+    @ApiModelProperty("鎻愬嚭浜�")
+    private String raiseUserName;
+
+    @ApiModelProperty("鎻愬嚭鏃堕棿")
+    private LocalDate raiseTime;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽")
+    private String causeResult;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽璐d换閮ㄩ棬")
+    private String causeDepartment;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽浜篿d")
+    private Integer causeUserId;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽浜�")
+    private String causeUserName;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽鏃堕棿")
+    private LocalDate causeTime;
+
+    @ApiModelProperty("绾犳鎺柦")
+    private String correctResult;
+
+    @ApiModelProperty("鎻愬嚭閮ㄩ棬纭")
+    private String raiseDepartmentAffirm;
+
+    @ApiModelProperty("绾犳璐d换閮ㄩ棬")
+    private String correctDepartment;
+
+    @ApiModelProperty("绾犳浜篿d")
+    private Integer correctUserId;
+
+    @ApiModelProperty("绾犳")
+    private String correctUserName;
+
+    @ApiModelProperty("绾犳鏃堕棿")
+    private LocalDate correctTime;
+
+    @ApiModelProperty("楠岃瘉缁撴灉")
+    private String validationResult;
+
+    @ApiModelProperty("楠岃瘉閮ㄩ棬")
+    private String validationDepartment;
+
+    @ApiModelProperty("楠岃瘉浜篿d")
+    private Integer validationUserId;
+
+    @ApiModelProperty("楠岃瘉浜�")
+    private String validationUserName;
+
+    @ApiModelProperty("楠岃瘉鏃堕棿")
+    private LocalDate validationTime;
+
+    @ApiModelProperty("鏄惁缁撴潫, 0: 鏈粨鏉�, 1:宸茬粨鏉�")
+    private Integer isFinish;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false,select = false)
+    @ApiModelProperty("娴佺▼, 0:涓嶇鍚堝伐浣滄儏鍐佃褰�, 1澶勭悊鎺柦, 2:绾犳鎺柦, 3:鏄惁閫氱煡瀹㈡埛鍙仮澶嶅伐浣�")
+    private Integer flowType;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrectFile.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrectFile.java
new file mode 100644
index 0000000..37079a0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrectFile.java
@@ -0,0 +1,56 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳鎺柦闄勪欢琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:38
+ */
+@Data
+@TableName("cnas_internal_correct_file")
+@ApiModel(value = "InternalCorrectFile瀵硅薄", description = "鍐呭绠$悊绾犳鎺柦闄勪欢琛�")
+public class InternalCorrectFile {
+
+    @ApiModelProperty("鐩戠潱璇︽儏绾犳鏂囦欢id")
+    @TableId(type = IdType.AUTO)
+    private Integer correctFileId;
+
+    private Integer superviseDetailsCorrectFileId;
+
+    @ApiModelProperty("鍐呭绾犳鎺柦id")
+    private Integer correctId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplement.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplement.java
new file mode 100644
index 0000000..d2d63bb
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplement.java
@@ -0,0 +1,107 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_implement")
+public class InternalImplement {
+
+    @TableId(type = IdType.AUTO)
+    private Integer implementId;
+
+    @ApiModelProperty("瀹℃牳鐩殑")
+    private String purposes;
+
+    @ApiModelProperty("瀹℃牳鎬ц川")
+    private String nature;
+
+    @ApiModelProperty("瀹℃牳鑼冨洿")
+    private String scope;
+
+    @ApiModelProperty("瀹℃牳渚濇嵁")
+    private String basis;
+
+    @ApiModelProperty("瀹℃牳缁勯暱")
+    private String teamLeader;
+
+    @ApiModelProperty("鍐呭鍛�")
+    private String internalAuditor;
+
+    @ApiModelProperty("瀹℃牳鏃堕棿")
+    private String reviewDate;
+
+    @ApiModelProperty("瀹℃牳鏂规硶")
+    private String auditMethod;
+
+    @ApiModelProperty("浼氳寮�濮嬫椂闂�")
+    private String firstMeetingTime;
+
+    @ApiModelProperty("鏈浼氳鏃堕棿")
+    private String lastMeetingTime;
+
+    @ApiModelProperty("瀹℃牳鎶ュ憡鎻愪氦鏃ユ湡")
+    private String submitTime;
+
+    @ApiModelProperty("瀹℃牳鎶ュ憡鍙戞斁鑼冨洿")
+    private String submitScope;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("缂栧埗浜篿d")
+    private Integer writeUserId;
+
+    @ApiModelProperty("缂栧埗浜�")
+    private String writeUserName;
+
+    @ApiModelProperty("缂栧埗鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime writeTime;
+
+    @ApiModelProperty("鎵瑰噯浜篿d")
+    private Integer ratifyUserId;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private String ratifyUserName;
+
+    @ApiModelProperty("鎵瑰噯鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime ratifyTime;
+
+    @ApiModelProperty("鎵瑰噯鐘舵��, 0 涓嶉�氳繃, 1閫氳繃")
+    private Integer ratifyStatus;
+
+    @ApiModelProperty("鎵瑰噯鍐呭")
+    private String ratifyRemark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplementDetail.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplementDetail.java
new file mode 100644
index 0000000..3451815
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplementDetail.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭瀹炴柦璁″垝璇︽儏
+ *
+ * @author makejava
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_implement_detail")
+public class InternalImplementDetail {
+
+    @TableId(type = IdType.AUTO)
+    private Integer implementDetailId;
+
+    @ApiModelProperty("瀹炴柦璁″垝涓昏〃id")
+    private Integer implementId;
+
+    @ApiModelProperty("鏃堕棿")
+    private String implement;
+
+    @ApiModelProperty("閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty("璐d换浜�")
+    private String responsible;
+
+    @ApiModelProperty("瀹℃牳鍛�")
+    private String auditor;
+
+    @ApiModelProperty("瀹℃牳鍐呭")
+    private String reviewContent;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    // 瀵煎嚭浣跨敤
+    @TableField(select = false, exist = false)
+    private Integer index;
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeeting.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeeting.java
new file mode 100644
index 0000000..acc813a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeeting.java
@@ -0,0 +1,56 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:50:44
+ */
+@Data
+@TableName("cnas_internal_meeting")
+@ApiModel(value = "InternalMeeting瀵硅薄", description = "鍐呭浼氳琛�")
+public class InternalMeeting {
+
+    @TableId(value = "meeting_id", type = IdType.AUTO)
+    private Integer meetingId;
+
+    @ApiModelProperty("鏃堕棿")
+    private String meetingDate;
+
+    @ApiModelProperty("涓绘寔浜�")
+    private String compere;
+
+    @ApiModelProperty("鍦扮偣")
+    private String place;
+
+    @ApiModelProperty("浼氳涓婚")
+    private String subject;
+
+    @ApiModelProperty("鍙傚姞浜哄憳")
+    private String participant;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeetingDetail.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeetingDetail.java
new file mode 100644
index 0000000..f6f3cb6
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeetingDetail.java
@@ -0,0 +1,53 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭浼氳璇︽儏琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:56:13
+ */
+@Data
+@TableName("cnas_internal_meeting_detail")
+@ApiModel(value = "InternalMeetingDetail瀵硅薄", description = "鍐呭浼氳璇︽儏琛�")
+public class InternalMeetingDetail {
+
+    @TableId(value = "meeting_detail_id", type = IdType.AUTO)
+    private Integer meetingDetailId;
+
+    @ApiModelProperty("浼氳涓昏〃id")
+    private Integer meetingId;
+
+    @ApiModelProperty("鍙傚姞浜哄憳id")
+    private Integer userId;
+
+    @ApiModelProperty("鍙傚姞浜哄憳")
+    private String userName;
+
+    @ApiModelProperty("閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlan.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlan.java
new file mode 100644
index 0000000..06e2106
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlan.java
@@ -0,0 +1,95 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:27:47
+ */
+@Data
+@TableName("cnas_internal_plan")
+@ApiModel(value = "InternalPlan瀵硅薄", description = "鍐呭骞村害璁″垝")
+public class InternalPlan {
+
+    @TableId(value = "plan_id", type = IdType.AUTO)
+    private Integer planId;
+
+    @ApiModelProperty("鍐呭鐩殑")
+    private String purpose;
+
+    @ApiModelProperty("鍐呯敓鑼冨洿")
+    private String scope;
+
+    @ApiModelProperty("鍐呭渚濇嵁")
+    private String basis;
+
+    @ApiModelProperty("缁勯暱")
+    private String leader;
+
+    @ApiModelProperty("缁勫憳")
+    private String crew;
+
+    @ApiModelProperty("缂栧埗浜篿d")
+    private Integer writeUserId;
+
+    @ApiModelProperty("缂栧埗浜�")
+    private String writeUserName;
+
+    @ApiModelProperty("缂栧埗鏃堕棿")
+    private LocalDateTime writeTime;
+
+    @ApiModelProperty("瀹℃牳浜篿d")
+    private Integer examineUserId;
+
+    @ApiModelProperty("瀹℃牳浜�")
+    private String examineUserName;
+
+    @ApiModelProperty("瀹℃牳鏃堕棿")
+    private LocalDateTime examineTime;
+
+    @ApiModelProperty("瀹℃牳鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+    private Integer examineStatus;
+
+    @ApiModelProperty("瀹℃牳淇℃伅")
+    private String examineRemark;
+
+    @ApiModelProperty("鎵瑰噯浜篿d")
+    private Integer ratifyUserId;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private String ratifyUserName;
+
+    @ApiModelProperty("鎵瑰噯鏃堕棿")
+    private LocalDateTime ratifyTime;
+
+    @ApiModelProperty("鎵瑰噯鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+    private Integer ratifyStatus;
+
+    @ApiModelProperty("鎵瑰噯淇℃伅")
+    private String ratifyRemark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlanDetail.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlanDetail.java
new file mode 100644
index 0000000..8c51e9f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlanDetail.java
@@ -0,0 +1,83 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝璇︽儏琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:28:48
+ */
+@Data
+@TableName("cnas_internal_plan_detail")
+@ApiModel(value = "InternalPlanDetail瀵硅薄", description = "鍐呭骞村害璁″垝璇︽儏琛�")
+public class InternalPlanDetail {
+
+    @TableId(value = "plan_detail_id", type = IdType.AUTO)
+    private Integer planDetailId;
+
+    @ApiModelProperty("鍐呭骞村害璁″垝id")
+    private Integer planId;
+
+    @ApiModelProperty("閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty("涓�鏈�")
+    private String january;
+
+    @ApiModelProperty("浜屾湀")
+    private String february;
+
+    @ApiModelProperty("涓夋湀")
+    private String march;
+
+    @ApiModelProperty("鍥涙湀")
+    private String april;
+
+    @ApiModelProperty("浜旀湀")
+    private String may;
+
+    @ApiModelProperty("鍏湀")
+    private String june;
+
+    @ApiModelProperty("涓冩湀")
+    private String july;
+
+    @ApiModelProperty("鍏湀")
+    private String august;
+
+    @ApiModelProperty("涔濇湀")
+    private String september;
+
+    @ApiModelProperty("鍗佹湀")
+    private String october;
+
+    @ApiModelProperty("鍗佷竴鏈�")
+    private String november;
+
+    @ApiModelProperty("鍗佷簩鏈�")
+    private String december;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalReport.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalReport.java
new file mode 100644
index 0000000..219666c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalReport.java
@@ -0,0 +1,122 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_report")
+public class InternalReport {
+
+    @TableId(type = IdType.AUTO)
+    private Integer reportId;
+
+    @ApiModelProperty("瀹℃牳渚濇嵁")
+    private String purposes;
+
+    @ApiModelProperty("瀹℃牳渚濇嵁")
+    private String basis;
+
+    @ApiModelProperty("瀹℃牳鏃ユ湡")
+    private String reviewDate;
+
+    @ApiModelProperty("瀹℃牳鏂规硶")
+    private String method;
+
+    @ApiModelProperty("瀹℃牳鑼冨洿")
+    private String scope;
+
+    @ApiModelProperty("瀹℃牳璐d换鍒�")
+    private String responsible;
+
+    @ApiModelProperty("瀹℃牳缁勯暱")
+    private String leader;
+
+    @ApiModelProperty("瀹℃牳鍛�")
+    private String auditor;
+
+    @ApiModelProperty("瀹℃牳缁勫垎宸ユ儏鍐�")
+    private String division;
+
+    @ApiModelProperty("瀹℃牳姒傚喌")
+    private String overview;
+
+    @ApiModelProperty("缁撹鎬ц瘎浠�")
+    private String conclusion;
+
+    @ApiModelProperty("鏀硅繘寤鸿")
+    private String suggest;
+
+    @ApiModelProperty("瀹屾垚绾犳鎺柦鎵�闇�鏃堕棿")
+    private String actionDate;
+
+    @ApiModelProperty("鎬讳綋璺熻繘纭浜�")
+    private String followUser;
+
+    @ApiModelProperty("鎬讳綋璺熻繘纭璁板綍")
+    private String followRecord;
+
+    @ApiModelProperty("鏈姤鍛婂彂鏀捐寖鍥�")
+    private String reportScope;
+
+    @ApiModelProperty("瀹℃牳浜篿d")
+    private Integer examineUserId;
+
+    @ApiModelProperty("瀹℃牳浜�")
+    private String examineUserName;
+
+    @ApiModelProperty("瀹℃牳鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime examineTime;
+
+    @ApiModelProperty("瀹℃牳鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+    private Integer examineStatus;
+
+    @ApiModelProperty("瀹℃牳淇℃伅")
+    private String examineRemark;
+
+    @ApiModelProperty("璐ㄩ噺璐熻矗浜篿d")
+    private Integer qualityUserId;
+
+    @ApiModelProperty("璐ㄩ噺璐熻矗浜�")
+    private String qualityUserName;
+
+    @ApiModelProperty("璐ㄩ噺璐熻矗浜哄~鍐欐椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime qualityTime;
+
+    @ApiModelProperty("璐ㄩ噺璐熻矗浜虹姸鎬�, 0 涓嶉�氳繃, 1閫氳繃")
+    private Integer qualityStatus;
+
+    @ApiModelProperty("璐ㄩ噺璐熻矗浜烘剰瑙�")
+    private String qualityRemark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageControlPlanList.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageControlPlanList.java
new file mode 100644
index 0000000..7c08c48
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageControlPlanList.java
@@ -0,0 +1,81 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:30
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_control_plan_list")
+@ApiModel(value = "ManageControlPlanList瀵硅薄", description = "閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�")
+public class ManageControlPlanList implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("浣滀笟娲诲姩")
+    @ExcelProperty("浣滀笟娲诲姩")
+    private String jobActivity;
+
+    @ApiModelProperty("椋庨櫓鍥犵礌绫诲埆")
+    @ExcelProperty("椋庨櫓鍥犵礌绫诲埆")
+    private String category;
+
+    @ApiModelProperty("椋庨櫓鍥犵礌鎻忚堪")
+    @ExcelProperty("椋庨櫓鍥犵礌鎻忚堪")
+    private String description;
+
+    @ApiModelProperty("鍙鑷寸殑浜嬫晠")
+    @ExcelProperty("鍙鑷寸殑浜嬫晠")
+    private String result;
+
+    @ApiModelProperty("鏄惁涓嶅彲鎵垮彈椋庨櫓")
+    @ExcelProperty("鏄惁涓嶅彲鎵垮彈椋庨櫓")
+    private String intolerable;
+
+    @ApiModelProperty("鎺у埗璁″垝")
+    @ExcelProperty("鎺у埗璁″垝")
+    private String plan;
+
+    @ApiModelProperty("缂栧埗id")
+    private Integer editor;
+
+    @ApiModelProperty("鏃ユ湡")
+    private LocalDateTime editorDate;
+
+    @ApiModelProperty("瀹℃壒id")
+    private Integer approval;
+
+    @ApiModelProperty("鏃ユ湡")
+    private LocalDateTime approvalDate;
+
+    @ApiModelProperty("鎵瑰噯id")
+    private Integer approve;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    private LocalDateTime approveDate;
+
+    @ApiModelProperty("鎵瑰噯鐘舵��1锛氶�氳繃锛�2锛氫笉閫氳繃")
+    private Integer approveStatus;
+
+    @ApiModelProperty("瀹℃壒鐘舵��1锛氶�氳繃锛�2锛氫笉閫氳繃")
+    private Integer approvalStatus;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentAlter.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentAlter.java
new file mode 100644
index 0000000..2d9bc62
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentAlter.java
@@ -0,0 +1,115 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 11:04:01
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_alter")
+@ApiModel(value = "ManageDocumentAlter瀵硅薄", description = "鏂囦欢鍙樻洿")
+@ExcelIgnoreUnannotated
+public class ManageDocumentAlter  implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鐢宠缂栧彿")
+    @ExcelProperty("鐢宠缂栧彿")
+    private String code;
+
+    @ApiModelProperty("鐢宠浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(select = false, exist = false)
+    @ExcelProperty("鐢宠浜�")
+    private String createUserName;
+
+    @TableField(select = false, exist = false)
+    @ApiModelProperty("鐢宠閮ㄩ棬")
+    private String createUserDepartLims;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鏈熸湜鍙樻洿鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ExcelProperty("鏈熸湜鍙樻洿鏃堕棿")
+    private LocalDate expectAlterDate;
+
+    @ApiModelProperty("瀹為檯鍙樻洿鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ExcelProperty("瀹為檯鍙樻洿鏃堕棿")
+    private LocalDate actuallyAlterDate;
+
+    @ApiModelProperty("鐘舵��")
+    @ExcelProperty("鐘舵��")
+    private String state;
+
+    @ApiModelProperty("瀹℃壒浜�")
+    private Integer checkUser;
+
+    @TableField(select = false, exist = false)
+    @ExcelProperty("瀹℃壒浜�")
+    private String checkUserName;
+
+    @ApiModelProperty("鍙樻洿璇存槑")
+    @ExcelProperty("鍙樻洿璇存槑")
+    private String alterNote;
+
+    @ApiModelProperty("鍙樻洿鍓嶇紪鍙�")
+    private String alterBeforeCode;
+
+    @ApiModelProperty("鍙樻洿鍓嶅悕绉�")
+    private String alterBeforeName;
+
+    @ApiModelProperty("鍙樻洿鍓嶇増鏈�")
+    private String alterBeforeVersion;
+
+    @ApiModelProperty("鍙樻洿鍚庣紪鍙�")
+    private String alterAfterCode;
+
+    @ApiModelProperty("鍙樻洿鍚庡悕绉�")
+    private String alterAfterName;
+
+    @ApiModelProperty("鍙樻洿鍚庣増鏈�")
+    private String alterAfterVersion;
+
+    @ApiModelProperty("鍙樻洿鍚庨檮浠�")
+    private String alterAfterUrl;
+
+    @ApiModelProperty("鍙樻洿鍚庨檮浠�")
+    @TableField(select = false,exist = false)
+    private MultipartFile file;
+
+    @ApiModelProperty("鍓嶄竴鐗堟湰澶勭悊鏂瑰紡")
+    private String method;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentCancel.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentCancel.java
new file mode 100644
index 0000000..0cc8155
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentCancel.java
@@ -0,0 +1,101 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 02:37:35
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_cancel")
+@ApiModel(value = "ManageDocumentCancel瀵硅薄", description = "鏂囦欢浣滃簾")
+@ExcelIgnoreUnannotated
+public class ManageDocumentCancel  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鐢宠浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鐢宠浜�")
+    @TableField(select = false,exist = false)
+    @ExcelProperty("鐢宠浜�")
+    private String createUserName;
+
+    @ApiModelProperty("鐢宠浜�")
+    @TableField(select = false,exist = false)
+    private String createUserDepartLims;
+
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    @ExcelProperty("鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鏂囦欢鐗堟湰")
+    private String version;
+
+    @ApiModelProperty("鏂囦欢鐘舵��")
+    private String documentState;
+
+    @ApiModelProperty("浣滃簾鏂瑰紡")
+    private String method;
+
+    @ApiModelProperty("浣滃簾璇存槑")
+    @ExcelProperty("浣滃簾璇存槑")
+    private String cancelNote;
+
+    @ApiModelProperty("瀹℃壒浜�")
+    private Integer checkUser;
+
+    @ExcelProperty("瀹℃壒浜�")
+    @TableField(select = false, exist = false)
+    private String checkUserName;
+
+    @ApiModelProperty("鏈熸湜浣滃簾鏃堕棿")
+    @ExcelProperty("鏈熸湜浣滃簾鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate expectCancelDate;
+
+    @ApiModelProperty("瀹為檯浣滃簾鏃ユ湡")
+    @ExcelProperty("瀹為檯浣滃簾鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate actuallyCancelDate;
+
+    @ApiModelProperty("浣滃簾鐘舵��")
+    @ExcelProperty("浣滃簾鐘舵��")
+    private String state;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentControlled.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentControlled.java
new file mode 100644
index 0000000..dbb0eb7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentControlled.java
@@ -0,0 +1,91 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 02:54:44
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_controlled")
+@ApiModel(value = "ManageDocumentControlled瀵硅薄", description = "鏂囦欢鍙楁帶")
+public class ManageDocumentControlled  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鐢宠鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鏂囦欢绫诲埆")
+    private String type;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鏂囦欢鐗堟湰")
+    private String version;
+
+    @ApiModelProperty("浣滆��")
+    private String writer;
+
+    @ApiModelProperty("鎻愪氦鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate submitDate;
+
+    @ApiModelProperty("璇存槑")
+    private String instructions;
+
+    @ApiModelProperty("鐢宠鐘舵��")
+    private String state;
+
+    @ApiModelProperty("闄勪欢鍦板潃")
+    private String url;
+
+    @ApiModelProperty("璐d换浜�")
+    private Integer dutyUser;
+
+    @TableField(select = false,exist = false)
+    private String dutyUserName;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(select = false, exist = false)
+    private String createUserName;
+
+    @ApiModelProperty("鐢宠閮ㄩ棬")
+    @TableField(select = false, exist = false)
+    private String createUserDepartLims;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd  HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @TableField(select = false, exist = false)
+    private MultipartFile file;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentIssueRecycle.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentIssueRecycle.java
new file mode 100644
index 0000000..8dd981a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentIssueRecycle.java
@@ -0,0 +1,107 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 09:18:24
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_issue_recycle")
+@ApiModel(value = "ManageDocumentIssueRecycle瀵硅薄", description = "鏂囦欢鍙戞斁鍥炴敹")
+public class ManageDocumentIssueRecycle  implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    @ExcelProperty(value = "鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    @ExcelProperty(value = "鏂囦欢鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鏂囦欢鐗堟湰")
+    @ExcelProperty(value = "鏂囦欢鐗堟湰")
+    private String version;
+
+    @ApiModelProperty("鐘舵��")
+    @ExcelProperty(value = "鐘舵��")
+    private String state;
+
+    @ApiModelProperty("鏂囦欢鐘舵��")
+    @ExcelProperty(value = "鏂囦欢鐘舵��")
+    private String documentState;
+
+    @ApiModelProperty("鍙戞斁缂栧彿")
+    @ExcelProperty(value = "鍙戞斁缂栧彿")
+    private String issueCode;
+
+    @ApiModelProperty("鍙戞斁浜�")
+    private Integer issueUser;
+
+    @ApiModelProperty("鍙戞斁鏃ユ湡")
+    @ExcelProperty(value = "鍙戞斁鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate issueDate;
+
+    @ApiModelProperty("鍙戞斁璇存槑")
+    private String issueNote;
+
+    @ApiModelProperty("鎺ユ敹浜�")
+    private Integer receiveUser;
+
+    @ApiModelProperty("鎺ユ敹鏃堕棿")
+    private LocalDate receiveDate;
+
+    @ApiModelProperty("鍥炴敹缂栧彿")
+    private String recycleCode;
+
+    @ApiModelProperty("鍥炴敹浜�")
+    private Integer recycleUser;
+
+    @ApiModelProperty("鍥炴敹鏃ユ湡")
+    @ExcelProperty(value = "鍥炴敹鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate recycleDate;
+
+    @ApiModelProperty("鍥炴敹璇存槑")
+    private String recycleNote;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("闄勪欢")
+    private String url;
+
+    @TableField(select = false,exist = false)
+    private MultipartFile file;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentList.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentList.java
new file mode 100644
index 0000000..ecb66a7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentList.java
@@ -0,0 +1,79 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 11:08:11
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_list")
+@ApiModel(value = "ManageDocumentList瀵硅薄", description = "鏂囦欢娓呭崟")
+@ExcelIgnoreUnannotated
+public class ManageDocumentList  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    @ExcelProperty(value = "鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("绫诲埆")
+    @ExcelProperty(value = "绫诲埆")
+    private String type;
+
+    @ApiModelProperty("鍚嶇О")
+    @ExcelProperty(value = "鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鏂囦欢鐗堟湰")
+    @ExcelProperty(value = "鏂囦欢鐗堟湰")
+    private String version;
+
+    @ApiModelProperty("浣滆��")
+    @ExcelProperty(value = "浣滆��")
+    private String writer;
+
+    @ApiModelProperty("鐢熸晥鏃ユ湡")
+    @ExcelProperty(value = "鐢熸晥鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate effectiveDate;
+
+    @ApiModelProperty("鏂囦欢鐘舵��")
+    @ExcelProperty(value = "鏂囦欢鐘舵��")
+    private String state;
+
+    @ApiModelProperty("闄勪欢鍦板潃")
+    private String url;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeeting.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeeting.java
new file mode 100644
index 0000000..250e410
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeeting.java
@@ -0,0 +1,54 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:33:47
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_meeting")
+@ApiModel(value = "ManageMeeting瀵硅薄", description = "")
+public class ManageMeeting implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("浼氳鏃堕棿")
+    private LocalDateTime meetingTime;
+
+    @ApiModelProperty("浼氳鍦扮偣")
+    private String place;
+
+    @ApiModelProperty("涓绘寔浜�")
+    private String compere;
+
+    @ApiModelProperty("浼氳鍐呭鎽樿")
+    private String content;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeetingParticipants.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeetingParticipants.java
new file mode 100644
index 0000000..c86b0da
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeetingParticipants.java
@@ -0,0 +1,54 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:34:27
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_meeting_participants")
+@ApiModel(value = "ManageMeetingParticipants瀵硅薄", description = "")
+public class ManageMeetingParticipants implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鍙備細浜哄憳")
+    private Integer participants;
+
+    @TableField(select = false,exist = false)
+    private String userName;
+
+    @ApiModelProperty("閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty("浼氳id")
+    private Integer meetingId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordAudit.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordAudit.java
new file mode 100644
index 0000000..3261770
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordAudit.java
@@ -0,0 +1,132 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 10:29:18
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_audit")
+@ApiModel(value = "ManageRecordAudit瀵硅薄", description = "鏂囦欢淇鐢宠瀹℃壒璁板綍")
+public class ManageRecordAudit  implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String documentName;
+
+    @ApiModelProperty("绔犺妭鍙�")
+    private String capter;
+
+    @ApiModelProperty("椤电爜")
+    private String pages;
+
+    @ApiModelProperty("淇娆℃暟")
+    private Integer number;
+
+    @ApiModelProperty("淇敼鍓嶇増鏈彿")
+    private String beforeVersion;
+
+    @ApiModelProperty("淇敼鍚庣増鏈彿")
+    private String afterVersion;
+
+    @ApiModelProperty("淇敼鍐呭")
+    private String alterThing;
+
+    @ApiModelProperty("淇浜�")
+    private Integer alterUser;
+
+    @TableField(select = false, exist = false)
+    private String alterUserName;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer ratifyUser;
+
+    @TableField(select = false, exist = false)
+    private String ratifyUserName;
+
+    //鎵瑰噯浜虹鍚�
+    @TableField(select = false, exist = false)
+    private String ratifyUserUrl;
+
+    @ApiModelProperty("鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate date;
+
+    @ApiModelProperty("鐢宠浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    //鐢宠浜�
+    @TableField(select = false, exist = false)
+    private String createUserName;
+
+    //鐢宠閮ㄩ棬
+    @TableField(select = false, exist = false)
+    private String createUserDepart;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("鐢宠鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍙樺寲鍘熷洜")
+    private String reason;
+
+    @ApiModelProperty("鍘熷垎鍙戦儴闂�")
+    private String beforeDepart;
+
+    @ApiModelProperty("淇鍚庡垎鍙戦儴闂�")
+    private String afterDepart;
+
+    @ApiModelProperty("鐢宠閮ㄩ棬涓荤鎰忚")
+    private String applicant;
+
+    @ApiModelProperty("鍘熷埗瀹氶儴闂ㄦ剰瑙�")
+    private String formulation;
+
+    @ApiModelProperty("鍘熷鏍搁儴闂ㄦ剰瑙�")
+    private String audit;
+
+    @ApiModelProperty("淇浣滃簾")
+    private String method;
+
+
+    @ApiModelProperty("鍘熼檮浠�")
+    private String beforeUrl;
+
+    @ApiModelProperty("淇鍚庨檮浠�")
+    private String afterUrl;
+
+    @TableField(select = false, exist = false)
+    private MultipartFile file;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCancel.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCancel.java
new file mode 100644
index 0000000..cbe5379
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCancel.java
@@ -0,0 +1,77 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 01:27:22
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_cancel")
+@ApiModel(value = "ManageRecordCancel瀵硅薄", description = "浣滃簾鏂囦欢閿�榄傝褰�")
+public class ManageRecordCancel  implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String documentName;
+
+    @ApiModelProperty("鏁伴噺")
+    private Integer qty;
+
+    @ApiModelProperty("閿�姣佸師鍥�")
+    private String reason;
+
+    @ApiModelProperty("鐢宠浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(select = false,exist = false)
+    private String createUserName;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("鐢宠鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer ratifyUser;
+
+    @TableField(select = false,exist = false)
+    private String ratifyUserName;
+
+    private String ratifyState;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate ratifyTime;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCheck.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCheck.java
new file mode 100644
index 0000000..30af20e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCheck.java
@@ -0,0 +1,74 @@
+package com.ruoyi.manage.pojo;
+
+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.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍)
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:31:36
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_check")
+@ApiModel(value = "ManageRecordCheck瀵硅薄", description = "鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍)")
+public class ManageRecordCheck  implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String documentName;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鐗�/娆�")
+    private String documentVersion;
+
+    @ApiModelProperty("缂栧埗浜�")
+    private Integer writeUser;
+
+    @TableField(select = false,exist = false)
+    private String writeUserName;
+
+    @ApiModelProperty("瀹℃牳浜�")
+    private Integer checkUser;
+
+    @TableField(select = false,exist = false)
+    private String checkUserName;
+
+    @ApiModelProperty("瀹℃牳鐘舵��")
+    private String checkState;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer ratifyUser;
+
+    @TableField(select = false,exist = false)
+    private String ratifyUserName;
+
+    @ApiModelProperty("鎵瑰噯鐘舵��")
+    private String ratifyState;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate ratifyDate;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervals.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervals.java
new file mode 100644
index 0000000..a2ae33f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervals.java
@@ -0,0 +1,61 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 10:54:31
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_intervals")
+@ApiModel(value = "ManageRecordIntervals瀵硅薄", description = "鏂囦欢瀹氭湡瀹℃煡璁板綍")
+public class ManageRecordIntervals  implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String documentName;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鐗堟湰鍙�")
+    private String documentVersion;
+
+    @ApiModelProperty("淇鍙�")
+    private String revision;
+
+    @ApiModelProperty("閫傚疁鎬�")
+    private String suitability;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("澶栭敭鍏宠仈,澶栨潵鏂囦欢纭鍘嗗彶璁板綍id")
+    private Integer recordIntervalsTotalId;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervalsTotal.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervalsTotal.java
new file mode 100644
index 0000000..317ed57
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervalsTotal.java
@@ -0,0 +1,74 @@
+package com.ruoyi.manage.pojo;
+
+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.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 01:12:11
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_intervals_total")
+@ApiModel(value = "ManageRecordIntervalsTotal瀵硅薄", description = "鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃")
+public class ManageRecordIntervalsTotal  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer ratifyUser;
+
+    @TableField(select = false,exist = false)
+    private String ratifyUserName;
+
+    @ApiModelProperty("鎵瑰噯缁撴灉")
+    private String ratifyState;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate ratifyDate;
+
+    @ApiModelProperty("鎵瑰噯浜虹鍚�")
+    private String ratifyUrl;
+
+    @ApiModelProperty("鎷熷埗浜�")
+    private Integer submitUser;
+
+    @TableField(select = false,exist = false)
+    private String submitUserName;
+
+    @ApiModelProperty("鎷熷埗浜虹鍚�")
+    private String submitUrl;
+
+    @ApiModelProperty("鎷熷埗鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate submitDate;
+
+    @ApiModelProperty("骞翠唤")
+    private String year;
+
+    @ApiModelProperty("鎬绘暟閲�")
+    private Integer totalNum;
+
+    @ApiModelProperty("鐢熸垚鐢宠琛ㄧ殑璺緞")
+    private String url;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIssueRecycle.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIssueRecycle.java
new file mode 100644
index 0000000..54e6493
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIssueRecycle.java
@@ -0,0 +1,76 @@
+package com.ruoyi.manage.pojo;
+
+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.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 09:11:05
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_issue_recycle")
+@ApiModel(value = "ManageRecordIssueRecycle瀵硅薄", description = "鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍")
+public class ManageRecordIssueRecycle  implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String documentName;
+
+    @ApiModelProperty("鐗堝彿")
+    private String documentVersion;
+
+    @ApiModelProperty("浠芥暟")
+    private String pages;
+
+    @ApiModelProperty("鏂囦欢绫诲埆")
+    private String documentType;
+
+    @ApiModelProperty("鍒嗗彂鍙�")
+    private String number;
+
+    @ApiModelProperty("鎺ユ敹閮ㄩ棬")
+    private String departLims;
+
+    @ApiModelProperty("鎺ュ彈浜�")
+    private Integer receiveUser;
+
+    @TableField(select = false,exist = false)
+    private String receiveUserName;
+
+    @ApiModelProperty("鎺ュ彈鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate receiveDate;
+
+    @ApiModelProperty("绛炬敹浜�")
+    private Integer signedUser;
+
+    @TableField(select = false,exist = false)
+    private String signedUserName;
+
+    @ApiModelProperty("绛炬敹鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate signedDate;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordTotal.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordTotal.java
new file mode 100644
index 0000000..37b80d9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordTotal.java
@@ -0,0 +1,74 @@
+package com.ruoyi.manage.pojo;
+
+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.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:30:08
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_total")
+@ApiModel(value = "ManageRecordTotal瀵硅薄", description = "澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃")
+public class ManageRecordTotal  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer ratifyUser;
+
+    @TableField(select = false,exist = false)
+    private String ratifyUserName;
+
+    @ApiModelProperty("鎵瑰噯缁撴灉")
+    private String ratifyState;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate ratifyDate;
+
+    @ApiModelProperty("鎵瑰噯浜虹鍚�")
+    private String ratifyUrl;
+
+    @ApiModelProperty("鎷熷埗浜�")
+    private Integer submitUser;
+
+    @TableField(select = false,exist = false)
+    private String submitUserName;
+
+    @ApiModelProperty("鎷熷埗浜虹鍚�")
+    private String submitUrl;
+
+    @ApiModelProperty("鎷熷埗鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate submitDate;
+
+    @ApiModelProperty("骞翠唤")
+    private String year;
+
+    @ApiModelProperty("鎬绘暟閲�")
+    private Integer totalNum;
+
+    @ApiModelProperty("鐢熸垚鐢宠琛ㄧ殑璺緞")
+    private String url;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordVerify.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordVerify.java
new file mode 100644
index 0000000..355219d
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordVerify.java
@@ -0,0 +1,60 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+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.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:29:44
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_verify")
+@ApiModel(value = "ManageRecordVerify瀵硅薄", description = "澶栨潵鏂囦欢纭璁板綍")
+public class ManageRecordVerify  implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("澶栨潵鏂囦欢鍚嶇О")
+    private String documentName;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String documentCode;
+
+    @ApiModelProperty("鏍囧噯瑙勮寖鍚嶇О")
+    private String standardName;
+
+    @ApiModelProperty("鏍囧噯鍙�")
+    private String standardCode;
+
+    @ApiModelProperty("鐢熸晥鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate effectiveDate;
+
+    @ApiModelProperty("浣滃簾鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate cancelDate;
+
+    @ApiModelProperty("澶囨敞")
+    private String note;
+
+    @ApiModelProperty("澶栭敭鍏宠仈,澶栨潵鏂囦欢纭鍘嗗彶璁板綍id")
+    private Integer manageRecordTotalId;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgram.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgram.java
new file mode 100644
index 0000000..d78f41b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgram.java
@@ -0,0 +1,81 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 03:05:42
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_review_program")
+@ApiModel(value = "ManageReviewProgram瀵硅薄", description = "")
+public class ManageReviewProgram implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("璇勫鏃堕棿")
+    private LocalDateTime reviewTime;
+
+    @ApiModelProperty("璇勫鍦扮偣")
+    private String judgingLocation;
+
+    @ApiModelProperty("璇勫鐩殑")
+    private String judgingPurpose;
+
+    @ApiModelProperty("璇勫鏂瑰紡")
+    private String judgingMethod;
+
+    @ApiModelProperty("鍙傚姞浜哄憳")
+    private String participants;
+
+    @ApiModelProperty("璇勫鑼冨洿")
+    private String judgingScope;
+
+    @ApiModelProperty("璇勫渚濇嵁")
+    private String judgingBasis;
+
+    @ApiModelProperty("璇勫涓昏鍐呭")
+    private String mainContext;
+
+    @ApiModelProperty("鍑嗗宸ヤ綔瑕佹眰")
+    private String preparationRequirements;
+
+    @ApiModelProperty("缂栧埗")
+    private String editor;
+
+    @ApiModelProperty("缂栧埗鏃ユ湡")
+    private LocalDateTime editorDate;
+
+    @ApiModelProperty("鎵瑰噯")
+    private String approve;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    private LocalDateTime approveDate;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgramFile.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgramFile.java
new file mode 100644
index 0000000..cac35ce
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgramFile.java
@@ -0,0 +1,50 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 04:15:47
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_review_program_file")
+@ApiModel(value = "ManageReviewProgramFile瀵硅薄", description = "")
+public class ManageReviewProgramFile implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty("璁″垝琛↖D")
+    private Integer reviewId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    private String url;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewReport.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewReport.java
new file mode 100644
index 0000000..648d7e7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewReport.java
@@ -0,0 +1,102 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 04:44:39
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_review_report")
+@ApiModel(value = "ManageReviewReport瀵硅薄", description = "绠$悊璇勫鎶ュ憡")
+public class ManageReviewReport implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鐩殑")
+    private String objective;
+
+    @ApiModelProperty("鍦扮偣")
+    private String place;
+
+    @ApiModelProperty("涓绘寔浜�")
+    private String compere;
+
+    @ApiModelProperty("璁板綍浜�")
+    private String recordPeople;
+
+    @ApiModelProperty("鏃ユ湡")
+    private LocalDateTime date;
+
+    @ApiModelProperty("椤垫")
+    private Integer page;
+
+    @ApiModelProperty("璇勫鏂瑰紡")
+    private String judgingMethod;
+
+    @ApiModelProperty("璇勫渚濇嵁")
+    private String reviewBasis;
+
+    @ApiModelProperty("鍑哄腑浜哄憳")
+    private String attendess;
+
+    @ApiModelProperty("璇勫杈撳叆鎯呭喌")
+    private String reviewInputs;
+
+    @ApiModelProperty("璇勫杩囩▼姒傚喌")
+    private String reviewProcess;
+
+    @ApiModelProperty("涓昏璁姒傝堪")
+    private String mainTopic;
+
+    @ApiModelProperty("浜嬮」")
+    private String matters;
+
+    @ApiModelProperty("璐熻矗浜�")
+    private String head;
+
+    @ApiModelProperty("瀹屾垚鏃ユ湡")
+    private LocalDateTime completionDate;
+
+    @ApiModelProperty("璺熻釜纭浜�")
+    private String trackingConfirmed;
+
+    @ApiModelProperty("璺熻釜鎯呭喌纭璁板綍")
+    private String follerUp;
+
+    @ApiModelProperty("浣撶郴璇勪环")
+    private String overallEvaluation;
+
+    @ApiModelProperty("瀹℃牳")
+    private String audit;
+
+    @ApiModelProperty("鎵瑰噯")
+    private String approval;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRiskAssessmentResults.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRiskAssessmentResults.java
new file mode 100644
index 0000000..24b2f31
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRiskAssessmentResults.java
@@ -0,0 +1,103 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:51
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_risk_assessment_results")
+@ApiModel(value = "ManageRiskAssessmentResults瀵硅薄", description = "鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃")
+public class ManageRiskAssessmentResults implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ExcelIgnore
+    private Integer id;
+
+    @ApiModelProperty("鍦扮偣/娲诲姩")
+    @ExcelProperty(value = "鍦扮偣/娲诲姩", index = 0)
+    private String venue;
+
+    @ApiModelProperty("鍗遍櫓鍥犵礌")
+    @ExcelProperty(value = "鍗遍櫓鍥犵礌", index = 1)
+    private String hazard;
+
+    @ApiModelProperty("鍙兘瀵艰嚧鐨勪簨鏁�")
+    @ExcelProperty(value = "鍙兘瀵艰嚧鐨勪簨鏁�", index = 2)
+    private String accidents;
+
+    @ApiModelProperty("瀵逛汉鍙兘閫犳垚鐨勫嵄瀹�")
+    @ExcelProperty(value = "瀵逛汉鍙兘閫犳垚鐨勫嵄瀹�", index = 3)
+    private String injury;
+
+    @ApiModelProperty("椋庨櫓璇勪环")
+    @ExcelProperty(value = {"椋庨櫓璇勪环", "L"})
+    private String riskL;
+
+    @ApiModelProperty("椋庨櫓璇勪环")
+    @ExcelProperty(value = {"椋庨櫓璇勪环", "E"})
+    private String riskE;
+
+    @ApiModelProperty("椋庨櫓璇勪环")
+    @ExcelProperty(value = {"椋庨櫓璇勪环", "C"})
+    private String riskC;
+
+    @ApiModelProperty("椋庨櫓璇勪环")
+    @ExcelProperty(value = {"椋庨櫓璇勪环", "D"})
+    private String riskD;
+
+    @ApiModelProperty("椋庨櫓绛夌骇")
+    @ExcelProperty(value = "椋庨櫓绛夌骇", index = 8)
+    private String level;
+
+    @ApiModelProperty("璇勪环缁撹")
+    @ExcelProperty(value = "璇勪环缁撹", index = 9)
+    private String conclusion;
+
+    @ApiModelProperty("鎺у埗鎺柦")
+    @ExcelProperty(value = "鎺у埗鎺柦", index = 10)
+    private String measures;
+
+    @ApiModelProperty("缂栧埗id")
+    private Integer editor;
+
+    @ApiModelProperty("缂栧埗鏃ユ湡")
+    private LocalDateTime editorDate;
+
+    @ApiModelProperty("瀹℃壒浜篿d")
+    private Integer approval;
+
+    @ApiModelProperty("瀹℃壒鏃ユ湡")
+    private LocalDateTime approvalDate;
+
+    @ApiModelProperty("鎵瑰噯浜篿d")
+    private Integer approve;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    private LocalDateTime approveDate;
+
+    @ApiModelProperty("鎵瑰噯鐘舵��1锛氶�氳繃锛�2锛氫笉閫氳繃")
+    private Integer approveStatus;
+
+    @ApiModelProperty("瀹℃壒鐘舵��1锛氶�氳繃锛�2锛氫笉閫氳繃")
+    private Integer approvalStatus;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/schedule/ManageRecordTotalSchedule.java b/cnas-manage/src/main/java/com/ruoyi/manage/schedule/ManageRecordTotalSchedule.java
new file mode 100644
index 0000000..6cd870e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/schedule/ManageRecordTotalSchedule.java
@@ -0,0 +1,36 @@
+package com.ruoyi.manage.schedule;
+
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import com.ruoyi.manage.service.ManageRecordIntervalsTotalService;
+import com.ruoyi.manage.service.ManageRecordTotalService;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+@Component
+public class ManageRecordTotalSchedule {
+
+    @Resource
+    private ManageRecordTotalService manageRecordTotalService;
+
+    @Resource
+    private ManageRecordIntervalsTotalService manageRecordIntervalsTotalService;
+
+    @Scheduled(cron = "0 0 2 1 1 ?") //姣忓勾1鏈�1鍙�2鐐�
+    public void manageRecordTotal() {
+        ManageRecordTotal manageRecordTotal = new ManageRecordTotal();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
+        Calendar calendar = Calendar.getInstance();
+        String formattedDate = sdf.format(calendar.getTime());
+        manageRecordTotal.setYear(formattedDate);
+        manageRecordTotalService.save(manageRecordTotal);
+
+        ManageRecordIntervalsTotal manageRecordIntervalsTotal = new ManageRecordIntervalsTotal();
+        manageRecordIntervalsTotal.setYear(formattedDate);
+        manageRecordIntervalsTotalService.save(manageRecordIntervalsTotal);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ClientSatisfactionService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ClientSatisfactionService.java
new file mode 100644
index 0000000..1620d88
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ClientSatisfactionService.java
@@ -0,0 +1,59 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+public interface ClientSatisfactionService extends IService<ClientSatisfaction> {
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+     * @param page
+     * @param clientSatisfaction
+     * @return
+     */
+    IPage<ClientSatisfaction> pageClientSatisfaction(Page page, ClientSatisfaction clientSatisfaction);
+
+    /**
+     * 鏂板瀹㈡埛鍒嗘瀽闄勪欢
+     * @param file
+     * @return
+     */
+    boolean uploadAnalyseFile(MultipartFile file);
+
+    /**
+     * 鏌ヨ瀹㈡埛鍒嗘瀽闄勪欢
+     * @param page
+     * @param analyseFile
+     * @return
+     */
+    IPage<ClientSatisfactionAnalyseFile> pageAnalyseFile(Page page, ClientSatisfactionAnalyseFile analyseFile);
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹀鍑�
+     *
+     * @param clientSatisfactionId
+     * @param response
+     */
+    void exportWordClientSatisfaction(Integer clientSatisfactionId, HttpServletResponse response);
+
+    /**
+     * 纭瀹㈡埛婊℃剰搴�
+     *
+     * @param clientSatisfaction 瑕佷慨鏀瑰鎴锋弧鎰忓害鐨勭姸鎬佸璞�
+     * @param userId             淇敼浜篿d
+     */
+    void confirmClientSatisfaction(ClientSatisfaction clientSatisfaction, Integer userId);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckDetailService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckDetailService.java
new file mode 100644
index 0000000..acac9da
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckDetailService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+
+/**
+ * 鍐呭妫�鏌ヨ鎯呰〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+public interface InternalCheckDetailService extends IService<InternalCheckDetail> {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckService.java
new file mode 100644
index 0000000..1d27f2e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckService.java
@@ -0,0 +1,69 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.InternalCheckDto;
+import com.ruoyi.manage.pojo.InternalCheck;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+public interface InternalCheckService extends IService<InternalCheck> {
+
+    /**
+     * 鍐呭妫�鏌ュ垎椤垫煡璇�
+     * @param page
+     * @param internalCheck
+     * @return
+     */
+    IPage<InternalCheckDto> pageInternalCheck(Page page, InternalCheck internalCheck);
+
+    /**
+     * 鍐呭妫�鏌ユ柊澧�
+     * @param internalCheck
+     * @return
+     */
+    boolean addInternalCheck(InternalCheckDto internalCheck);
+
+    /**
+     * 鍐呭妫�鏌ヤ慨鏀�
+     * @param internalCheck
+     * @return
+     */
+    boolean updateInternalCheck(InternalCheckDto internalCheck);
+
+    /**
+     * 鍐呭妫�鏌ュ垹闄�
+     * @param checkId
+     * @return
+     */
+    boolean delInternalCheck(Integer checkId);
+
+    /**
+     * 鍐呭妫�鏌ユ煡鐪嬭鎯�
+     * @param checkId
+     * @return
+     */
+    InternalCheckDto getInternalCheckOne(Integer checkId);
+
+    /**
+     * 鍐呭妫�鏌ユ壒鍑�
+     * @param internalCheck
+     * @return
+     */
+    boolean ratifyInternalCheck(InternalCheckDto internalCheck);
+
+    /**
+     * 瀵煎嚭鍐呭妫�鏌�
+     * @param checkId
+     * @param response
+     */
+    void exportInternalCheck(Integer checkId, HttpServletResponse response);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectFileService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectFileService.java
new file mode 100644
index 0000000..630c7c5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectFileService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳鎺柦闄勪欢琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:38
+ */
+public interface InternalCorrectFileService extends IService<InternalCorrectFile> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectService.java
new file mode 100644
index 0000000..de59e8c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectService.java
@@ -0,0 +1,66 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalCorrect;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:15
+ */
+public interface InternalCorrectService extends IService<InternalCorrect> {
+
+    /**
+     * 鏂板鍐呭绠$悊绾犳澶勭悊淇℃伅
+     * @param InternalAccording
+     * @return
+     */
+    boolean addInternalCorrect(InternalCorrect InternalAccording);
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳澶勭悊
+     * @param correctId
+     * @return
+     */
+    InternalCorrect getInternalCorrect(Integer correctId);
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃
+     * @param page
+     * @param detailsCorrect
+     * @return
+     */
+    IPage<InternalCorrect> pageInternalCorrect(Page page, InternalCorrect detailsCorrect);
+
+    /**
+     * 鏂板鍐呭绠$悊绾犳鎺柦闄勪欢
+     * @param correctId
+     * @param file
+     * @return
+     */
+    boolean uploadInternalCorrectFile(Integer correctId, MultipartFile file);
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢
+     * @param correctId
+     * @return
+     */
+    List<InternalCorrectFile> getInternalCorrectFileList(Integer correctId);
+
+    /**
+     * 瀵煎嚭绾犳鎺柦
+     * @param correctId
+     * @param response
+     */
+    void exportInternalCorrect(Integer correctId, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementDetailService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementDetailService.java
new file mode 100644
index 0000000..fe6b57f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementDetailService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+
+/**
+ * 鍐呭瀹炴柦璁″垝璇︽儏
+ *
+ * @author makejava
+ * @since 2024-11-11
+ */
+public interface InternalImplementDetailService extends IService<InternalImplementDetail> {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementService.java
new file mode 100644
index 0000000..7a59577
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementService.java
@@ -0,0 +1,69 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.InternalImplementDto;
+import com.ruoyi.manage.pojo.InternalImplement;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+public interface InternalImplementService extends IService<InternalImplement> {
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalImplement
+     * @return
+     */
+    IPage<InternalImplementDto> pageInternalImplement(Page page, InternalImplement internalImplement);
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鏂板
+     * @param internalImplement
+     * @return
+     */
+    boolean addInternalImplement(InternalImplementDto internalImplement);
+
+    /**
+     * 鍐呭瀹炴柦璁″垝淇敼
+     * @param internalImplement
+     * @return
+     */
+    boolean updateInternalImplement(InternalImplementDto internalImplement);
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鍒犻櫎
+     * @param implementId
+     * @return
+     */
+    boolean delInternalImplement(Integer implementId);
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鏌ョ湅璇︽儏
+     * @param implementId
+     * @return
+     */
+    InternalImplementDto getInternalImplementOne(Integer implementId);
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鎵瑰噯
+     * @param internalImplement
+     * @return
+     */
+    boolean ratifyInternalImplement(InternalImplementDto internalImplement);
+
+    /**
+     * 瀵煎嚭鍐呭瀹炴柦璁″垝
+     * @param implementId
+     * @param response
+     */
+    void exportInternalImplement(Integer implementId, HttpServletResponse response);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingDetailService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingDetailService.java
new file mode 100644
index 0000000..9878594
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+
+/**
+ * <p>
+ * 鍐呭浼氳璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:56:13
+ */
+public interface InternalMeetingDetailService extends IService<InternalMeetingDetail> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingService.java
new file mode 100644
index 0000000..39f476f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingService.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.InternalMeetingDto;
+import com.ruoyi.manage.pojo.InternalMeeting;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:50:44
+ */
+public interface InternalMeetingService extends IService<InternalMeeting> {
+
+    /**
+     * 鍐呭浼氳鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalMeeting
+     * @return
+     */
+    IPage<InternalMeetingDto> pageInternalMeeting(Page page, InternalMeeting internalMeeting);
+
+    /**
+     * 鍐呭浼氳鏂板
+     * @param internalMeeting
+     * @return
+     */
+    boolean addInternalMeeting(InternalMeetingDto internalMeeting);
+
+    /**
+     * 鍐呭浼氳淇敼
+     * @param internalMeeting
+     * @return
+     */
+    boolean updateInternalMeeting(InternalMeetingDto internalMeeting);
+
+    /**
+     * 鍐呭浼氳鍒犻櫎
+     * @param meetingId
+     * @return
+     */
+    boolean delInternalMeeting(Integer meetingId);
+
+    /**
+     * 鍐呭浼氳鏌ョ湅璇︽儏
+     * @param meetingId
+     * @return
+     */
+    InternalMeetingDto getInternalMeetingOne(Integer meetingId);
+
+    /**
+     * 瀵煎嚭鍐呭浼氳
+     * @param meetingId
+     * @param response
+     */
+    void exportInternalMeeting(Integer meetingId, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanDetailService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanDetailService.java
new file mode 100644
index 0000000..4cb521f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:28:48
+ */
+public interface InternalPlanDetailService extends IService<InternalPlanDetail> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanService.java
new file mode 100644
index 0000000..f3ceb41
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanService.java
@@ -0,0 +1,77 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.InternalPlanDto;
+import com.ruoyi.manage.pojo.InternalPlan;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:27:47
+ */
+public interface InternalPlanService extends IService<InternalPlan> {
+
+    /**
+     * 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalPlan
+     * @return
+     */
+    IPage<InternalPlanDto> pageInternalPlan(Page page, InternalPlan internalPlan);
+
+    /**
+     * 鍐呭骞村害璁″垝鏂板
+     * @param internalPlan
+     * @return
+     */
+    boolean addInternalPlan(InternalPlanDto internalPlan);
+
+    /**
+     * 鍐呭骞村害璁″垝淇敼
+     * @param internalPlan
+     * @return
+     */
+    boolean updateInternalPlan(InternalPlanDto internalPlan);
+
+    /**
+     * 鍐呭骞村害璁″垝鍒犻櫎
+     * @param planId
+     * @return
+     */
+    boolean delInternalPlan(Integer planId);
+
+    /**
+     * 鍐呭骞村害璁″垝鏌ョ湅璇︽儏
+     * @param planId
+     * @return
+     */
+    InternalPlanDto getInternalPlanOne(Integer planId);
+
+    /**
+     * 鍐呭骞村害璁″垝瀹℃牳
+     * @param internalPlanDto
+     * @return
+     */
+    boolean examineInternalPlan(InternalPlanDto internalPlanDto);
+
+    /**
+     * 鍐呭骞村害璁″垝鎵瑰噯
+     * @param internalPlanDto
+     * @return
+     */
+    boolean ratifyInternalPlan(InternalPlanDto internalPlanDto);
+
+    /**
+     * 瀵煎嚭鍐呭骞村害璁″垝
+     * @param planId
+     * @param response
+     */
+    void exportInternalImplement(Integer planId, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalReportService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalReportService.java
new file mode 100644
index 0000000..9216392
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalReportService.java
@@ -0,0 +1,47 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalReport;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+public interface InternalReportService extends IService<InternalReport> {
+
+    /**
+     * 鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalReport
+     * @return
+     */
+    IPage<InternalReport> pageInternalReport(Page page, InternalReport internalReport);
+
+    /**
+     * 鍐呭鎶ュ憡瀹℃牳
+     * @param internalReport
+     * @return
+     */
+    boolean ratifyInternalCheck(InternalReport internalReport);
+
+    /**
+     * 璐ㄩ噺閮ㄧ粡鐞嗗~鍐�
+     * @param internalReport
+     * @return
+     */
+    boolean qualityInternalReport(InternalReport internalReport);
+
+    /**
+     * 瀵煎嚭鍐呭鎶ュ憡
+     * @param reportId
+     * @param response
+     */
+    void exportInternalReport(Integer reportId, HttpServletResponse response);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageControlPlanListService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageControlPlanListService.java
new file mode 100644
index 0000000..4f92344
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageControlPlanListService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import com.ruoyi.manage.vo.ManageControlPlanListVo;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:30
+ */
+public interface ManageControlPlanListService extends IService<ManageControlPlanList> {
+
+    IPage<ManageControlPlanListVo> getPageList(Page page);
+
+    void exportPersonTraining(HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentAlterService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentAlterService.java
new file mode 100644
index 0000000..6fc706a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentAlterService.java
@@ -0,0 +1,36 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageDocumentAlter;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 11:04:01
+ */
+public interface ManageDocumentAlterService extends IService<ManageDocumentAlter> {
+
+    IPage<ManageDocumentAlter> pageManageDocumentAlter(Page page, ManageDocumentAlter manageDocumentAlter);
+
+    ManageDocumentAlter getManageDocumentAlter(Integer id);
+
+    int addManageDocumentAlter(ManageDocumentAlter manageDocumentAlter);
+
+    int doManageDocumentAlter(ManageDocumentAlter manageDocumentAlter);
+
+    int checkManageDocumentAlter(ManageDocumentAlter manageDocumentAlter);
+
+    void checkManageDocumentAlterPdf(Long id, HttpServletResponse response) throws Exception;
+
+    void exportManageDocumentAlter(ManageDocumentAlter manageDocumentAlter, HttpServletResponse response) throws Exception;
+
+    int delManageDocumentAlter(Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentCancelService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentCancelService.java
new file mode 100644
index 0000000..541beb6
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentCancelService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageDocumentCancel;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 02:37:35
+ */
+public interface ManageDocumentCancelService extends IService<ManageDocumentCancel> {
+
+    IPage<ManageDocumentCancel> pageManageDocumentCancel(Page page, ManageDocumentCancel manageDocumentCancel);
+
+    int addManageDocumentCancel(ManageDocumentCancel manageDocumentCancel);
+
+    int checkManageDocumentCancel(Integer id, String state);
+
+    ManageDocumentCancel getManageDocumentCancel(Integer id);
+
+    void exportManageDocumentCancel(ManageDocumentCancel manageDocumentCancel, HttpServletResponse response) throws Exception;
+
+    int delManageDocumentCancel(Integer id);
+
+    int doManageDocumentCancel(ManageDocumentCancel manageDocumentCancel);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentControlledService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentControlledService.java
new file mode 100644
index 0000000..b252cfa
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentControlledService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageDocumentControlled;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 02:54:44
+ */
+public interface ManageDocumentControlledService extends IService<ManageDocumentControlled> {
+
+    IPage<ManageDocumentControlled> pageManageDocumentControlled(Page page, ManageDocumentControlled manageDocumentControlled);
+
+    int addManageDocumentControlled(ManageDocumentControlled manageDocumentControlled);
+
+    int delManageDocumentControlled(Long id);
+
+    ManageDocumentControlled getManageDocumentControlled(Long id);
+
+    int doManageDocumentControlled(ManageDocumentControlled manageDocumentControlled);
+
+    int checkManageDocumentControlled(ManageDocumentControlled manageDocumentControlled);
+
+    void checkManageDocumentControlledPdf(Long id, HttpServletResponse response) throws Exception ;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentIssueRecycleService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentIssueRecycleService.java
new file mode 100644
index 0000000..de41b15
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentIssueRecycleService.java
@@ -0,0 +1,35 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 09:18:24
+ */
+public interface ManageDocumentIssueRecycleService extends IService<ManageDocumentIssueRecycle> {
+
+    IPage<ManageDocumentIssueRecycleDto> pageManageDocumentIssueRecycle(Page page, ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto);
+
+    ManageDocumentIssueRecycleDto getManageDocumentIssueRecycle(Long id);
+
+    void exportManageDocumentIssueRecycle(ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto, HttpServletResponse response) throws Exception;
+
+    int checkManageDocumentIssueRecycle(Integer id, String documentState);
+
+    int addManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle);
+
+    int doManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle);
+
+    int delManageDocumentIssueRecycle(Long id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentListService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentListService.java
new file mode 100644
index 0000000..f946228
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentListService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+ 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 11:08:11
+ */
+public interface ManageDocumentListService extends IService<ManageDocumentList> {
+
+    IPage<ManageDocumentList> pageManageDocumentList(Page page, ManageDocumentList manageDocumentList);
+
+    int uploadFile(Integer id, MultipartFile file);
+
+    void importExcel(List<ManageDocumentList> list);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingParticipantsService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingParticipantsService.java
new file mode 100644
index 0000000..d1800bf
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingParticipantsService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import com.ruoyi.manage.vo.MeetingParticipantsDetailsVo;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:34:27
+ */
+public interface ManageMeetingParticipantsService extends IService<ManageMeetingParticipants> {
+
+
+
+    MeetingParticipantsDetailsVo getParticipants(Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingService.java
new file mode 100644
index 0000000..19b277f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.ManageMeetingDto;
+import com.ruoyi.manage.pojo.ManageMeeting;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:33:47
+ */
+public interface ManageMeetingService extends IService<ManageMeeting> {
+
+    IPage<ManageMeetingDto> page(Page page, String startTime, String endTime, String place);
+
+    void addMeeting(ManageMeetingDto dto);
+
+    int modifyMeeting(ManageMeetingDto manageMeetingDto);
+
+    void exportMeeting(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordAuditService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordAuditService.java
new file mode 100644
index 0000000..1154b05
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordAuditService.java
@@ -0,0 +1,30 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 10:29:18
+ */
+public interface ManageRecordAuditService extends IService<ManageRecordAudit> {
+
+    IPage<ManageRecordAudit> pageManageRecordAudit(Page page, ManageRecordAudit manageRecordAudit);
+
+    int addManageRecordAudit(ManageRecordAudit manageRecordAudit);
+
+    int doManageRecordAudit(ManageRecordAudit manageRecordAudit);
+
+    int ratifyManageRecordAudit(Integer id);
+
+    String exportOutManageRecordAudit(ManageRecordAudit manageRecordAudit, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCancelService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCancelService.java
new file mode 100644
index 0000000..3d5b4ff
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCancelService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordCancel;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 01:27:22
+ */
+public interface ManageRecordCancelService extends IService<ManageRecordCancel> {
+
+    IPage<ManageRecordCancel> pageManageRecordCancel(Page page, ManageRecordCancel manageRecordCancel);
+
+    int ratifyManageRecordCancel(Integer id, String ratifyState);
+
+    String exportOutManageRecordCancel(ManageRecordCancel manageRecordCancel, HttpServletResponse response);
+
+    int exportInManageRecordCancel(MultipartFile file);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCheckService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCheckService.java
new file mode 100644
index 0000000..78a0bc1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCheckService.java
@@ -0,0 +1,32 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍) 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:31:36
+ */
+public interface ManageRecordCheckService extends IService<ManageRecordCheck> {
+
+    IPage<ManageRecordCheck> pageManageRecordCheck(Page page, ManageRecordCheck manageRecordCheck);
+
+    int checkManageRecordCheck(Integer id, String checkState);
+
+    int ratifyManageRecordCheck(Integer id, String ratifyState);
+
+    String exportOutManageRecordCheck(ManageRecordCheck manageRecordCheck, HttpServletResponse response);
+
+    int exportInManageRecordCheck(MultipartFile file);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsService.java
new file mode 100644
index 0000000..a09519a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 10:54:31
+ */
+public interface ManageRecordIntervalsService extends IService<ManageRecordIntervals> {
+
+    IPage<ManageRecordIntervals> pageManageRecordIntervals(Page page, ManageRecordIntervals manageRecordIntervals);
+
+    String exportOutManageRecordIntervals(ManageRecordIntervals manageRecordIntervals, HttpServletResponse response);
+
+    int exportInManageRecordIntervals(MultipartFile file);
+
+    int addManageRecordIntervals(ManageRecordIntervals manageRecordIntervals);
+
+    int delManageRecordIntervals(Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsTotalService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsTotalService.java
new file mode 100644
index 0000000..bfa40ee
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsTotalService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 01:12:11
+ */
+public interface ManageRecordIntervalsTotalService extends IService<ManageRecordIntervalsTotal> {
+
+    IPage<ManageRecordIntervalsTotal> pageManageRecordIntervalsTotal(Page page, ManageRecordIntervalsTotal manageRecordIntervalsTotal);
+
+    int submitManageRecordIntervalsTotal(Integer id);
+
+    int ratifyManageRecordIntervalsTotal(Integer id, String ratifyState);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIssueRecycleService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIssueRecycleService.java
new file mode 100644
index 0000000..66cd965
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIssueRecycleService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 09:11:05
+ */
+public interface ManageRecordIssueRecycleService extends IService<ManageRecordIssueRecycle> {
+
+    IPage<ManageRecordIssueRecycle> pageManageRecordIssueRecycle(Page page, ManageRecordIssueRecycle manageRecordIssueRecycle);
+
+    String exportOutManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle, HttpServletResponse response);
+
+    int exportInManageRecordIssueRecycle(MultipartFile file);
+
+    int addManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle);
+
+    int doManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordTotalService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordTotalService.java
new file mode 100644
index 0000000..c757186
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordTotalService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:30:08
+ */
+public interface ManageRecordTotalService extends IService<ManageRecordTotal> {
+
+    IPage<ManageRecordTotal> pageManageRecordTotal(Page page, ManageRecordTotal manageRecordTotal);
+
+    int submitManageRecordTotal(Integer id);
+
+    int ratifyManageRecordTotal(Integer id, String ratifyState);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordVerifyService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordVerifyService.java
new file mode 100644
index 0000000..eb195f1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordVerifyService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:29:44
+ */
+public interface ManageRecordVerifyService extends IService<ManageRecordVerify> {
+
+    IPage<ManageRecordVerify> pageManageRecordVerify(Page page, ManageRecordVerify manageRecordVerify);
+
+    int addManageRecordVerify(ManageRecordVerify manageRecordVerify);
+
+    int delManageRecordVerify(Integer id);
+
+    int exportManageRecordVerify(MultipartFile file);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramFileService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramFileService.java
new file mode 100644
index 0000000..63c1c27
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramFileService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageReviewProgramFile;
+import com.ruoyi.manage.vo.ReviewProgramDetailsVo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 04:15:47
+ */
+public interface ManageReviewProgramFileService extends IService<ManageReviewProgramFile> {
+
+    ReviewProgramDetailsVo selectFile(Integer id);
+
+
+    void addFile(MultipartFile file,Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramService.java
new file mode 100644
index 0000000..2c51c76
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 03:05:42
+ */
+public interface ManageReviewProgramService extends IService<ManageReviewProgram> {
+
+    IPage<ManageReviewProgram> page(Page page,String startTime,String endTime, String judgingLocation);
+
+    void exportReviewProgram(Integer id, HttpServletResponse response);
+
+    int addReviewProgram(ManageReviewProgram manageReviewProgram);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewReportService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewReportService.java
new file mode 100644
index 0000000..43152a4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewReportService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageReviewReport;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 04:44:39
+ */
+public interface ManageReviewReportService extends IService<ManageReviewReport> {
+
+
+    IPage<ManageReviewReport> page(Page page, String startTime, String endTime, String place);
+
+    void exportReviewReport(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRiskAssessmentResultsService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRiskAssessmentResultsService.java
new file mode 100644
index 0000000..e8961e9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRiskAssessmentResultsService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:51
+ */
+public interface ManageRiskAssessmentResultsService extends IService<ManageRiskAssessmentResults> {
+
+    IPage<ManageRiskAssessmentResultsVo> getPageResults(Page page);
+
+    void exportPersonTraining(HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java
new file mode 100644
index 0000000..dbcaeca
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java
@@ -0,0 +1,188 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.dto.ClientSatisfactionDto;
+import com.ruoyi.manage.mapper.ClientSatisfactionAnalyseFileMapper;
+import com.ruoyi.manage.mapper.ClientSatisfactionMapper;
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import com.ruoyi.manage.service.ClientSatisfactionService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Service
+public class ClientSatisfactionServiceImpl extends ServiceImpl<ClientSatisfactionMapper, ClientSatisfaction> implements ClientSatisfactionService {
+
+    @Resource
+    private ClientSatisfactionAnalyseFileMapper clientSatisfactionAnalyseFileMapper;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+     *
+     * @param page
+     * @param clientSatisfaction
+     * @return
+     */
+    @Override
+    public IPage<ClientSatisfaction> pageClientSatisfaction(Page page, ClientSatisfaction clientSatisfaction) {
+        return baseMapper.pageClientSatisfaction(page, QueryWrappers.queryWrappers(clientSatisfaction));
+    }
+
+    /**
+     * 鏂板瀹㈡埛鍒嗘瀽闄勪欢
+     *
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean uploadAnalyseFile(MultipartFile file) {
+
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        ClientSatisfactionAnalyseFile analyseFile = new ClientSatisfactionAnalyseFile();
+        analyseFile.setFileName(filename);
+        if (contentType != null && contentType.startsWith("image/")) {
+            // 鏄浘鐗�
+            path = imgUrl;
+            analyseFile.setType(1);
+        } else {
+            // 鏄枃浠�
+            path = wordUrl;
+            analyseFile.setType(2);
+        }
+        try {
+            File realpath = new File(path);
+            if (!realpath.exists()) {
+                realpath.mkdirs();
+            }
+            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
+            urlString = realpath + "/" + pathName;
+            file.transferTo(new File(urlString));
+            analyseFile.setFileUrl(pathName);
+            clientSatisfactionAnalyseFileMapper.insert(analyseFile);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ErrorException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ瀹㈡埛鍒嗘瀽闄勪欢
+     *
+     * @param page
+     * @param analyseFile
+     * @return
+     */
+    @Override
+    public IPage<ClientSatisfactionAnalyseFile> pageAnalyseFile(Page page, ClientSatisfactionAnalyseFile analyseFile) {
+        return clientSatisfactionAnalyseFileMapper.pageAnalyseFile(page, QueryWrappers.queryWrappers(analyseFile));
+    }
+
+    /**
+     * 瀹㈡埛婊℃剰搴﹀鍑�
+     *
+     * @param clientSatisfactionId
+     * @param response
+     */
+    @Override
+    public void exportWordClientSatisfaction(Integer clientSatisfactionId, HttpServletResponse response) {
+        // 鏌ヨ瀹㈡埛婊℃剰搴﹁皟鏌�
+        ClientSatisfactionDto clientSatisfaction = baseMapper.exportWordClientSatisfaction(clientSatisfactionId);
+        if (clientSatisfaction == null) {
+            throw new RuntimeException("瀹㈡埛婊℃剰搴﹁皟鏌ヤ笉瀛樺湪");
+        }
+
+        // 鏌ヨ纭浜虹殑绛惧悕
+        String confirmPersonUrl = null;
+        // 鐘舵�佷负纭涓旂‘璁や汉涓嶄负绌�
+        if (clientSatisfaction.getConfirmStatus() != null && clientSatisfaction.getConfirmStatus() != 0 && clientSatisfaction.getConfirmPersonId() != null) {
+            confirmPersonUrl = userMapper.selectById(clientSatisfaction.getConfirmPersonId()).getSignatureUrl();
+            if (StringUtils.isBlank(confirmPersonUrl)) {
+                throw new ErrorException("鎵句笉鍒伴獙璇佷汉鐨勭鍚�");
+            }
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/customer-satisfaction-questionnaire.docx");
+        ConfigureBuilder builder = Configure.builder();
+        String finalConfirmPersonUrl = confirmPersonUrl;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("clientSatisfaction", clientSatisfaction);
+                    put("finalConfirmPersonUrl", StringUtils.isNotBlank(finalConfirmPersonUrl) ? Pictures.ofLocal(imgUrl + "/" + finalConfirmPersonUrl).create() : null);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "瀹㈡埛婊℃剰搴�", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    /**
+     * 纭瀹㈡埛婊℃剰搴�
+     *
+     * @param clientSatisfaction 瑕佷慨鏀瑰鎴锋弧鎰忓害鐨勭姸鎬佸璞�
+     * @param userId             淇敼浜篿d
+     */
+    @Override
+    public void confirmClientSatisfaction(ClientSatisfaction clientSatisfaction, Integer userId) {
+        User user = userMapper.selectById(userId);
+        if (user != null) {
+            clientSatisfaction.setConfirmPerson(user.getName());
+            clientSatisfaction.setConfirmPersonId(user.getId().intValue());
+        }
+        clientSatisfaction.setConfirmStatus(1);
+        baseMapper.updateById(clientSatisfaction);
+    }
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckDetailServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckDetailServiceImpl.java
new file mode 100644
index 0000000..0ede72f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckDetailServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalCheckDetailMapper;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+import com.ruoyi.manage.service.InternalCheckDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍐呭妫�鏌ヨ鎯呰〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+public class InternalCheckDetailServiceImpl extends ServiceImpl<InternalCheckDetailMapper, InternalCheckDetail> implements InternalCheckDetailService {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckServiceImpl.java
new file mode 100644
index 0000000..a076745
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckServiceImpl.java
@@ -0,0 +1,232 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.InternalCheckDto;
+import com.ruoyi.manage.mapper.InternalCheckMapper;
+import com.ruoyi.manage.pojo.InternalCheck;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+import com.ruoyi.manage.service.InternalCheckDetailService;
+import com.ruoyi.manage.service.InternalCheckService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalCheckServiceImpl extends ServiceImpl<InternalCheckMapper, InternalCheck> implements InternalCheckService {
+
+    @Resource
+    private InternalCheckDetailService internalCheckDetailService;
+    @Resource
+    private UserMapper userMapper;
+    @Value("${file.path}")
+    private String imgUrl;
+
+    /**
+     * 鍐呭妫�鏌ュ垎椤垫煡璇�
+     * @param page
+     * @param internalCheck
+     * @return
+     */
+    @Override
+    public IPage<InternalCheckDto> pageInternalCheck(Page page, InternalCheck internalCheck) {
+        return baseMapper.pageInternalCheck(page, QueryWrappers.queryWrappers(internalCheck));
+    }
+
+    /**
+     * 鍐呭妫�鏌ユ柊澧�
+     * @param internalCheck
+     * @return
+     */
+    @Override
+    public boolean addInternalCheck(InternalCheckDto internalCheck) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        // 娣诲姞缂栧埗浜�
+        User user = userMapper.selectById(userId);
+        internalCheck.setWriteTime(LocalDateTime.now());
+        internalCheck.setWriteUserId(user.getId());
+        internalCheck.setWriteUserName(user.getName());
+
+        baseMapper.insert(internalCheck);
+        // 鏂板璇︽儏
+        for (InternalCheckDetail internalCheckDetail : internalCheck.getCheckDetailList()) {
+            internalCheckDetail.setCheckId(internalCheck.getCheckId());
+        }
+        internalCheckDetailService.saveBatch(internalCheck.getCheckDetailList());
+        return true;
+    }
+
+    /**
+     * 鍐呭妫�鏌ヤ慨鏀�
+     * @param internalCheck
+     * @return
+     */
+    @Override
+    public boolean updateInternalCheck(InternalCheckDto internalCheck) {
+        baseMapper.updateById(internalCheck);
+
+        // 鍒犻櫎涔嬪墠鐨勮鎯�
+        internalCheckDetailService.remove(Wrappers.<InternalCheckDetail>lambdaQuery()
+                .eq(InternalCheckDetail::getCheckId, internalCheck.getCheckId()));
+
+        // 鏂板璇︽儏
+        for (InternalCheckDetail internalCheckDetail : internalCheck.getCheckDetailList()) {
+            internalCheckDetail.setCheckId(internalCheck.getCheckId());
+        }
+        internalCheckDetailService.saveBatch(internalCheck.getCheckDetailList());
+
+        return true;
+    }
+
+    /**
+     * 鍐呭妫�鏌ュ垹闄�
+     * @param CheckId
+     * @return
+     */
+    @Override
+    public boolean delInternalCheck(Integer CheckId) {
+        internalCheckDetailService.remove(Wrappers.<InternalCheckDetail>lambdaQuery()
+                .eq(InternalCheckDetail::getCheckId, CheckId));
+        baseMapper.deleteById(CheckId);
+        return true;
+    }
+
+    /**
+     * 鍐呭妫�鏌ユ煡鐪嬭鎯�
+     * @param CheckId
+     * @return
+     */
+    @Override
+    public InternalCheckDto getInternalCheckOne(Integer CheckId) {
+        InternalCheck internalCheck = baseMapper.selectById(CheckId);
+        InternalCheckDto internalCheckDto = new InternalCheckDto();
+        BeanUtils.copyProperties(internalCheck, internalCheckDto);
+
+        // 鏌ヨ璇︾粏淇℃伅
+        internalCheckDto.setCheckDetailList(internalCheckDetailService.list(Wrappers.<InternalCheckDetail>lambdaQuery()
+                .eq(InternalCheckDetail::getCheckId, CheckId)));
+        return internalCheckDto;
+    }
+
+    /**
+     * 鍐呭妫�鏌ユ壒鍑�
+     * @param internalCheck
+     * @return
+     */
+    @Override
+    public boolean ratifyInternalCheck(InternalCheckDto internalCheck) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        baseMapper.update(null, Wrappers.<InternalCheck>lambdaUpdate()
+                .eq(InternalCheck::getCheckId, internalCheck.getCheckId())
+                .set(InternalCheck::getRatifyUserId, userId)
+                .set(InternalCheck::getRatifyUserName, user.getName())
+                .set(InternalCheck::getRatifyRemark, internalCheck.getRatifyRemark())
+                .set(InternalCheck::getRatifyStatus, internalCheck.getRatifyStatus())
+                .set(InternalCheck::getRatifyTime, LocalDateTime.now())
+        );
+        return true;
+    }
+
+    /**
+     * 瀵煎嚭鍐呭妫�鏌�
+     * @param checkId
+     * @param response
+     */
+    @Override
+    public void exportInternalCheck(Integer checkId, HttpServletResponse response) {
+        InternalCheck internalCheck = baseMapper.selectById(checkId);
+
+        //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+        String writeUrl = userMapper.selectById(internalCheck.getWriteUserId()).getSignatureUrl();
+        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+
+        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+        String ratifyUrl = null;
+        if (internalCheck.getRatifyUserId() != null) {
+            ratifyUrl = userMapper.selectById(internalCheck.getRatifyUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        // 鏌ヨ璇︽儏
+        List<InternalCheckDetail> internalCheckDetails = internalCheckDetailService.list(Wrappers.<InternalCheckDetail>lambdaQuery()
+                .eq(InternalCheckDetail::getCheckId, checkId));
+
+        int index = 1;
+        for (InternalCheckDetail detail : internalCheckDetails) {
+            detail.setIndex(index);
+            index++;
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-check.docx");
+        String finalRatifyUrl = ratifyUrl;
+        Configure configure = Configure.builder()
+                .bind("checkDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("check", internalCheck);
+                    put("checkDetailList", internalCheckDetails);
+                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+                    put("writeDateUrl", internalCheck.getWriteTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(internalCheck.getWriteTime())).create() : null);
+                    put("ratifyDateUrl", internalCheck.getRatifyTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(internalCheck.getRatifyTime())).create() : null);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "鍐呭妫�鏌�", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+
+    }
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectFileServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectFileServiceImpl.java
new file mode 100644
index 0000000..79adf61
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectFileServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalCorrectFileMapper;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import com.ruoyi.manage.service.InternalCorrectFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳鎺柦闄勪欢琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:38
+ */
+@Service
+public class InternalCorrectFileServiceImpl extends ServiceImpl<InternalCorrectFileMapper, InternalCorrectFile> implements InternalCorrectFileService {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectServiceImpl.java
new file mode 100644
index 0000000..7c8c7e1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectServiceImpl.java
@@ -0,0 +1,319 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.dto.InternalCorrectDto;
+import com.ruoyi.manage.mapper.InternalCorrectFileMapper;
+import com.ruoyi.manage.mapper.InternalCorrectMapper;
+import com.ruoyi.manage.pojo.InternalCorrect;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import com.ruoyi.manage.service.InternalCorrectService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 04:00:15
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalCorrectServiceImpl extends ServiceImpl<InternalCorrectMapper, InternalCorrect> implements InternalCorrectService {
+
+    @Resource
+    private InternalCorrectFileMapper internalCorrectFileMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+
+    @Override
+    public boolean addInternalCorrect(InternalCorrect detailsCorrect) {
+        InternalCorrect correct = new InternalCorrect();
+        // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+
+        switch (detailsCorrect.getFlowType()) {
+            // 涓嶅悎鏍兼彁鍑�
+            case 0:
+                correct.setRaiseResult(detailsCorrect.getRaiseResult());//涓嶅悎鏍艰〃杩�
+                correct.setVdeRaiseResult(detailsCorrect.getVdeRaiseResult());//vde涓撳鍙戠幇
+                correct.setRaiseDepartment(departmentLimsName);//鎻愬嚭閮ㄩ棬
+                correct.setRaiseUserId(user.getId());//鎻愬嚭浜篿d
+                correct.setRaiseUserName(user.getName());// 鎻愬嚭浜�
+                correct.setRaiseTime(LocalDate.now());// 鎻愬嚭鏃堕棿
+
+                // 鍘熷洜鍒嗘瀽浜轰俊鎭�
+                User causeUser = userMapper.selectById(detailsCorrect.getCauseUserId());
+                String causeDepartmentLims = userMapper.selectUserDepartmentLimsName(causeUser.getId());
+
+                correct.setCauseDepartment(causeDepartmentLims);//鍘熷洜鍒嗘瀽璐d换閮ㄩ棬
+                correct.setCauseUserId(causeUser.getId());//1鍘熷洜鍒嗘瀽浜篿d
+                correct.setCauseUserName(causeUser.getName());// 1鍘熷洜鍒嗘瀽浜�
+                baseMapper.insert(correct);
+                break;
+
+            // 鍘熷洜鍒嗘瀽
+            case 1:
+                correct.setCorrectId(detailsCorrect.getCorrectId());
+                correct.setCauseResult(detailsCorrect.getCauseResult());//鍘熷洜鍒嗘瀽
+                correct.setCauseTime(LocalDate.now());// 1鍘熷洜鍒嗘瀽鏃堕棿
+
+                // 绾犳浜轰俊鎭�
+                User correctUser = userMapper.selectById(detailsCorrect.getCorrectUserId());
+                String correctUserDepartmentLims = userMapper.selectUserDepartmentLimsName(correctUser.getId());
+
+                correct.setCorrectDepartment(correctUserDepartmentLims);//2绾犳璐d换閮ㄩ棬
+                correct.setCorrectUserId(correctUser.getId());//2绾犳浜篿d
+                correct.setCorrectUserName(correctUser.getName());// 2绾犳浜�
+                baseMapper.updateById(correct);
+                break;
+
+            // 绾犳鎺柦
+            case 2:
+                correct.setCorrectId(detailsCorrect.getCorrectId());
+                correct.setCorrectResult(detailsCorrect.getCorrectResult());//2绾犳鎺柦
+                correct.setRaiseDepartmentAffirm(detailsCorrect.getRaiseDepartmentAffirm());//2鎻愬嚭閮ㄩ棬纭
+                correct.setCorrectTime(LocalDate.now());// 2绾犳鏃堕棿
+
+                // 楠岃瘉浜轰俊鎭�
+                User validationUser = userMapper.selectById(detailsCorrect.getValidationUserId());
+                String validationUserDepartmentLims = userMapper.selectUserDepartmentLimsName(validationUser.getId());
+
+                correct.setValidationDepartment(validationUserDepartmentLims);//3楠岃瘉閮ㄩ棬
+                correct.setValidationUserId(validationUser.getId());//3楠岃瘉浜篿d
+                correct.setValidationUserName(validationUser.getName());// 3楠岃瘉浜�
+                baseMapper.updateById(correct);
+                break;
+
+            // 楠岃瘉缁撴灉
+            case 3:
+                correct.setCorrectId(detailsCorrect.getCorrectId());
+                correct.setValidationResult(detailsCorrect.getValidationResult());//3楠岃瘉缁撴灉
+                correct.setValidationTime(LocalDate.now());// 3楠岃瘉鏃堕棿
+                correct.setIsFinish(1);
+                baseMapper.updateById(correct);
+                break;
+        }
+
+        return true;
+    }
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳澶勭悊
+     * @param correctId
+     * @return
+     */
+    @Override
+    public InternalCorrect getInternalCorrect(Integer correctId) {
+        InternalCorrect detailsCorrect;
+
+        detailsCorrect = baseMapper.selectOne(Wrappers.<InternalCorrect>lambdaQuery()
+                .eq(InternalCorrect::getCorrectId, correctId));
+
+        if (detailsCorrect == null) {
+            detailsCorrect = new InternalCorrect();
+        }
+        return detailsCorrect;
+    }
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃
+     * @param page
+     * @param detailsCorrect
+     * @return
+     */
+    @Override
+    public IPage<InternalCorrect> pageInternalCorrect(Page page, InternalCorrect detailsCorrect) {
+        return baseMapper.pageInternalAccording(page, QueryWrappers.queryWrappers(detailsCorrect));
+    }
+
+    /**
+     * 鏂板鍐呭绠$悊绾犳鎺柦闄勪欢
+     * @param InternalCorrectId
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean uploadInternalCorrectFile(Integer InternalCorrectId, MultipartFile file) {
+        if (InternalCorrectId == null) {
+            throw new ErrorException("缂哄皯绾犳鎺柦id");
+        }
+
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        InternalCorrectFile InternalCorrectFile = new InternalCorrectFile();
+        InternalCorrectFile.setCorrectId(InternalCorrectId);
+        InternalCorrectFile.setFileName(filename);
+        if (contentType != null && contentType.startsWith("image/")) {
+            // 鏄浘鐗�
+            path = imgUrl;
+            InternalCorrectFile.setType(1);
+        } else {
+            // 鏄枃浠�
+            path = wordUrl;
+            InternalCorrectFile.setType(2);
+        }
+        try {
+            File realpath = new File(path);
+            if (!realpath.exists()) {
+                realpath.mkdirs();
+            }
+            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
+            urlString = realpath + "/" + pathName;
+            file.transferTo(new File(urlString));
+            InternalCorrectFile.setFileUrl(pathName);
+            internalCorrectFileMapper.insert(InternalCorrectFile);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ErrorException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢
+     * @param correctId
+     * @return
+     */
+    @Override
+    public List<InternalCorrectFile> getInternalCorrectFileList(Integer correctId) {
+        return internalCorrectFileMapper.selectList(Wrappers.<InternalCorrectFile>lambdaQuery()
+                .eq(InternalCorrectFile::getCorrectId, correctId));
+    }
+
+    /**
+     * 瀵煎嚭绾犳鎺柦
+     * @param correctId
+     * @param response
+     */
+    @Override
+    public void exportInternalCorrect(Integer correctId, HttpServletResponse response) {
+        InternalCorrect internalCorrect = baseMapper.selectById(correctId);
+        InternalCorrectDto internalCorrectDto = new InternalCorrectDto();
+        BeanUtils.copyProperties(internalCorrect, internalCorrectDto);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        // 鎻愬嚭鏃堕棿
+        internalCorrectDto.setRaiseTimeString(internalCorrect.getRaiseTime() != null
+                ? internalCorrect.getRaiseTime().format(formatter) : null);
+        // 鍘熷洜鍒嗘瀽鏃堕棿
+        internalCorrectDto.setCauseTimeString(internalCorrect.getCauseTime() != null
+                ? internalCorrect.getCauseTime().format(formatter) : null);
+
+        // 绾犳鏃堕棿
+        internalCorrectDto.setCorrectTimeString(internalCorrect.getCorrectTime() != null
+                ? internalCorrect.getCorrectTime().format(formatter) : null);
+
+        // 楠岃瘉鏃堕棿
+        internalCorrectDto.setValidationTimeString(internalCorrect.getValidationTime() != null
+                ? internalCorrect.getValidationTime().format(formatter) : null);
+
+
+        // 鎻愬嚭浜虹鍚�
+        String raiseUrl = null;
+        if (internalCorrect.getRaiseUserId() != null) {
+            raiseUrl = userMapper.selectById(internalCorrect.getRaiseUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(raiseUrl)) {
+                throw new ErrorException("鎵句笉鍒版彁鍑轰汉鐨勭鍚�");
+            }
+        }
+
+        // 鍘熷洜鍒嗘瀽浜�
+        String causeUrl = null;
+        if (internalCorrect.getCauseUserId() != null) {
+            causeUrl = userMapper.selectById(internalCorrect.getCauseUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(causeUrl)) {
+                throw new ErrorException("鎵句笉鍒板師鍥犲垎鏋愪汉鐨勭鍚�");
+            }
+        }
+
+        // 绾犳浜�
+        String correctUrl = null;
+        if (internalCorrect.getCorrectUserId() != null) {
+            correctUrl = userMapper.selectById(internalCorrect.getCorrectUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(correctUrl)) {
+                throw new ErrorException("鎵句笉鍒扮籂姝d汉鐨勭鍚�");
+            }
+        }
+
+        // 楠岃瘉浜�
+        String validationUrl = null;
+        if (internalCorrect.getValidationUserId() != null) {
+            validationUrl = userMapper.selectById(internalCorrect.getValidationUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(validationUrl)) {
+                throw new ErrorException("鎵句笉鍒伴獙璇佷汉鐨勭鍚�");
+            }
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-correct.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String finalRaiseUrl = raiseUrl;
+        String finalCauseUrl = causeUrl;
+        String finalCorrectUrl = correctUrl;
+        String finalValidationUrl = validationUrl;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("correct", internalCorrectDto);
+                    put("raiseUrl", StringUtils.isNotBlank(finalRaiseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRaiseUrl).create() : null);
+                    put("causeUrl", StringUtils.isNotBlank(finalCauseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCauseUrl).create() : null);
+                    put("correctUrl", StringUtils.isNotBlank(finalCorrectUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectUrl).create() : null);
+                    put("validationUrl", StringUtils.isNotBlank(finalValidationUrl) ? Pictures.ofLocal(imgUrl + "/" + finalValidationUrl).create() : null);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "鍐呭绾犳鎺柦", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementDetailServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementDetailServiceImpl.java
new file mode 100644
index 0000000..c1b6cb5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementDetailServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalImplementDetailMapper;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+import com.ruoyi.manage.service.InternalImplementDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍐呭瀹炴柦璁″垝璇︽儏
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+public class InternalImplementDetailServiceImpl extends ServiceImpl<InternalImplementDetailMapper, InternalImplementDetail> implements InternalImplementDetailService {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementServiceImpl.java
new file mode 100644
index 0000000..bfff502
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementServiceImpl.java
@@ -0,0 +1,231 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.InternalImplementDto;
+import com.ruoyi.manage.mapper.InternalImplementMapper;
+import com.ruoyi.manage.pojo.InternalImplement;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+import com.ruoyi.manage.service.InternalImplementDetailService;
+import com.ruoyi.manage.service.InternalImplementService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalImplementServiceImpl extends ServiceImpl<InternalImplementMapper, InternalImplement> implements InternalImplementService {
+
+    @Resource
+    private InternalImplementDetailService internalImplementDetailService;
+
+    @Resource
+    private UserMapper userMapper;
+    @Value("${file.path}")
+    private String imgUrl;
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalImplement
+     * @return
+     */
+    @Override
+    public IPage<InternalImplementDto> pageInternalImplement(Page page, InternalImplement internalImplement) {
+        return baseMapper.pageInternalImplement(page, QueryWrappers.queryWrappers(internalImplement));
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鏂板
+     * @param internalImplement
+     * @return
+     */
+    @Override
+    public boolean addInternalImplement(InternalImplementDto internalImplement) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        // 娣诲姞缂栧埗浜�
+        User user = userMapper.selectById(userId);
+        internalImplement.setWriteTime(LocalDateTime.now());
+        internalImplement.setWriteUserId(user.getId());
+        internalImplement.setWriteUserName(user.getName());
+
+        baseMapper.insert(internalImplement);
+        // 鏂板璇︽儏
+        for (InternalImplementDetail internalImplementDetail : internalImplement.getImplementDetailList()) {
+            internalImplementDetail.setImplementId(internalImplement.getImplementId());
+        }
+        internalImplementDetailService.saveBatch(internalImplement.getImplementDetailList());
+        return true;
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝淇敼
+     * @param internalImplement
+     * @return
+     */
+    @Override
+    public boolean updateInternalImplement(InternalImplementDto internalImplement) {
+        baseMapper.updateById(internalImplement);
+
+        // 鍒犻櫎涔嬪墠鐨勮鎯�
+        internalImplementDetailService.remove(Wrappers.<InternalImplementDetail>lambdaQuery()
+                .eq(InternalImplementDetail::getImplementId, internalImplement.getImplementId()));
+
+        // 鏂板璇︽儏
+        for (InternalImplementDetail internalImplementDetail : internalImplement.getImplementDetailList()) {
+            internalImplementDetail.setImplementId(internalImplement.getImplementId());
+        }
+        internalImplementDetailService.saveBatch(internalImplement.getImplementDetailList());
+
+        return true;
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鍒犻櫎
+     * @param implementId
+     * @return
+     */
+    @Override
+    public boolean delInternalImplement(Integer implementId) {
+        internalImplementDetailService.remove(Wrappers.<InternalImplementDetail>lambdaQuery()
+                .eq(InternalImplementDetail::getImplementId, implementId));
+        baseMapper.deleteById(implementId);
+        return true;
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鏌ョ湅璇︽儏
+     * @param implementId
+     * @return
+     */
+    @Override
+    public InternalImplementDto getInternalImplementOne(Integer implementId) {
+        InternalImplement internalImplement = baseMapper.selectById(implementId);
+        InternalImplementDto internalImplementDto = new InternalImplementDto();
+        BeanUtils.copyProperties(internalImplement, internalImplementDto);
+
+        // 鏌ヨ璇︾粏淇℃伅
+        internalImplementDto.setImplementDetailList(internalImplementDetailService.list(Wrappers.<InternalImplementDetail>lambdaQuery()
+                .eq(InternalImplementDetail::getImplementId, implementId)));
+        return internalImplementDto;
+    }
+
+    /**
+     * 鍐呭瀹炴柦璁″垝鎵瑰噯
+     * @param internalImplement
+     * @return
+     */
+    @Override
+    public boolean ratifyInternalImplement(InternalImplementDto internalImplement) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        baseMapper.update(null, Wrappers.<InternalImplement>lambdaUpdate()
+                .eq(InternalImplement::getImplementId, internalImplement.getImplementId())
+                .set(InternalImplement::getRatifyUserId, userId)
+                .set(InternalImplement::getRatifyUserName, user.getName())
+                .set(InternalImplement::getRatifyRemark, internalImplement.getRatifyRemark())
+                .set(InternalImplement::getRatifyStatus, internalImplement.getRatifyStatus())
+                .set(InternalImplement::getRatifyTime, LocalDateTime.now())
+        );
+        return true;
+    }
+
+    /**
+     * 瀵煎嚭鍐呭瀹炴柦璁″垝
+     * @param implementId
+     * @param response
+     */
+    @Override
+    public void exportInternalImplement(Integer implementId, HttpServletResponse response) {
+        InternalImplement internalImplement = baseMapper.selectById(implementId);
+
+        //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+        String writeUrl = userMapper.selectById(internalImplement.getWriteUserId()).getSignatureUrl();
+        if (StringUtils.isBlank(writeUrl)) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+
+        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+        String ratifyUrl = null;
+        if (internalImplement.getRatifyUserId() != null) {
+            ratifyUrl = userMapper.selectById(internalImplement.getRatifyUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
+            }
+        }
+
+        // 鏌ヨ璇︽儏
+        List<InternalImplementDetail> detailList = internalImplementDetailService.list(Wrappers.<InternalImplementDetail>lambdaQuery()
+                .eq(InternalImplementDetail::getImplementId, implementId));
+
+        int index = 1;
+        for (InternalImplementDetail detail : detailList) {
+            detail.setIndex(index);
+            index++;
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-implement.docx");
+        String finalRatifyUrl = ratifyUrl;
+        Configure configure = Configure.builder()
+                .bind("implementDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("implement", internalImplement);
+                    put("implementDetailList", detailList);
+                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+                    put("writeDateUrl", internalImplement.getWriteTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(internalImplement.getWriteTime())).create() : null);
+                    put("ratifyDateUrl", internalImplement.getRatifyTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(internalImplement.getRatifyTime())).create() : null);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    internalImplement.getPurposes(), "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+
+    }
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingDetailServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingDetailServiceImpl.java
new file mode 100644
index 0000000..0138b51
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalMeetingDetailMapper;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+import com.ruoyi.manage.service.InternalMeetingDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鍐呭浼氳璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:56:13
+ */
+@Service
+public class InternalMeetingDetailServiceImpl extends ServiceImpl<InternalMeetingDetailMapper, InternalMeetingDetail> implements InternalMeetingDetailService {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingServiceImpl.java
new file mode 100644
index 0000000..cf1cb81
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingServiceImpl.java
@@ -0,0 +1,173 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.InternalMeetingDto;
+import com.ruoyi.manage.dto.InternalMeetingParticipantDto;
+import com.ruoyi.manage.mapper.InternalMeetingMapper;
+import com.ruoyi.manage.pojo.InternalMeeting;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+import com.ruoyi.manage.service.InternalMeetingDetailService;
+import com.ruoyi.manage.service.InternalMeetingService;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:50:44
+ */
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class InternalMeetingServiceImpl extends ServiceImpl<InternalMeetingMapper, InternalMeeting> implements InternalMeetingService {
+
+    private InternalMeetingDetailService internalMeetingDetailService;
+    private UserMapper userMapper;
+
+    /**
+     * 鍐呭浼氳鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalMeeting
+     * @return
+     */
+    @Override
+    public IPage<InternalMeetingDto> pageInternalMeeting(Page page, InternalMeeting internalMeeting) {
+        return baseMapper.pageInternalMeeting(page, QueryWrappers.queryWrappers(internalMeeting));
+    }
+
+    /**
+     * 鍐呭浼氳鏂板
+     * @param internalMeeting
+     * @return
+     */
+    @Override
+    public boolean addInternalMeeting(InternalMeetingDto internalMeeting) {
+        baseMapper.insert(internalMeeting);
+        return true;
+    }
+
+    /**
+     * 鍐呭浼氳淇敼
+     * @param internalMeeting
+     * @return
+     */
+    @Override
+    public boolean updateInternalMeeting(InternalMeetingDto internalMeeting) {
+        baseMapper.updateById(internalMeeting);
+        internalMeetingDetailService.saveBatch(internalMeeting.getMeetingDetailList());
+        return true;
+    }
+
+    /**
+     * 鍐呭浼氳鍒犻櫎
+     * @param MeetingId
+     * @return
+     */
+    @Override
+    public boolean delInternalMeeting(Integer MeetingId) {
+        internalMeetingDetailService.remove(Wrappers.<InternalMeetingDetail>lambdaQuery()
+                .eq(InternalMeetingDetail::getMeetingId, MeetingId));
+        baseMapper.deleteById(MeetingId);
+        return true;
+    }
+
+    /**
+     * 鍐呭浼氳鏌ョ湅璇︽儏
+     * @param MeetingId
+     * @return
+     */
+    @Override
+    public InternalMeetingDto getInternalMeetingOne(Integer MeetingId) {
+        InternalMeeting internalMeeting = baseMapper.selectById(MeetingId);
+        InternalMeetingDto internalMeetingDto = new InternalMeetingDto();
+        BeanUtils.copyProperties(internalMeeting, internalMeetingDto);
+        // 鏌ヨ璇︾粏淇℃伅
+        internalMeetingDto.setMeetingDetailList(internalMeetingDetailService.list(Wrappers.<InternalMeetingDetail>lambdaQuery()
+                .eq(InternalMeetingDetail::getMeetingId, MeetingId)));
+        return internalMeetingDto;
+    }
+
+    /**
+     * 瀵煎嚭鍐呭浼氳
+     * @param meetingId
+     * @param response
+     */
+    @Override
+    public void exportInternalMeeting(Integer meetingId, HttpServletResponse response) {
+        InternalMeeting internalMeeting = baseMapper.selectById(meetingId);
+        // 鏌ヨ鍙傚姞浜哄憳
+        List<Map<String, String>> mapList = userMapper.selectNameAnddepartment(internalMeeting.getParticipant());
+        // 鍒涘缓绌哄璞�
+        List<InternalMeetingParticipantDto> participants = new ArrayList<>();
+        for (int i = 0; i < mapList.size();) {
+            InternalMeetingParticipantDto internalMeetingParticipantDto = new InternalMeetingParticipantDto();
+            if (i < mapList.size()) {
+                internalMeetingParticipantDto.setUserName1(mapList.get(i).get("userName"));
+                internalMeetingParticipantDto.setDepartment1(mapList.get(i).get("department"));
+                i++;
+            }
+            if (i < mapList.size()) {
+                internalMeetingParticipantDto.setUserName2(mapList.get(i).get("userName"));
+                internalMeetingParticipantDto.setDepartment2(mapList.get(i).get("department"));
+                i++;
+            }
+            if (i < mapList.size()) {
+                internalMeetingParticipantDto.setUserName3(mapList.get(i).get("userName"));
+                internalMeetingParticipantDto.setDepartment3(mapList.get(i).get("department"));
+                i++;
+            }
+            participants.add(internalMeetingParticipantDto);
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-meeting.docx");
+        Configure configure = Configure.builder()
+                .bind("meetingDetails", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("meeting", internalMeeting);
+                    put("meetingDetails", participants);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    internalMeeting.getMeetingDate() + "鍐呭浼氳绛惧埌", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+
+    }
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanDetailServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanDetailServiceImpl.java
new file mode 100644
index 0000000..3712663
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalPlanDetailMapper;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+import com.ruoyi.manage.service.InternalPlanDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:28:48
+ */
+@Service
+public class InternalPlanDetailServiceImpl extends ServiceImpl<InternalPlanDetailMapper, InternalPlanDetail> implements InternalPlanDetailService {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanServiceImpl.java
new file mode 100644
index 0000000..d53aa2b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanServiceImpl.java
@@ -0,0 +1,252 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.InternalPlanDto;
+import com.ruoyi.manage.mapper.InternalPlanMapper;
+import com.ruoyi.manage.pojo.InternalPlan;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+import com.ruoyi.manage.service.InternalPlanDetailService;
+import com.ruoyi.manage.service.InternalPlanService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:27:47
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalPlanServiceImpl extends ServiceImpl<InternalPlanMapper, InternalPlan> implements InternalPlanService {
+
+    @Resource
+    private InternalPlanDetailService internalPlanDetailService;
+    @Resource
+    private UserMapper userMapper;
+    @Value("${file.path}")
+    private String imgUrl;
+
+
+    /**
+     * 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalPlan
+     * @return
+     */
+    @Override
+    public IPage<InternalPlanDto> pageInternalPlan(Page page, InternalPlan internalPlan) {
+        return baseMapper.pageInternalPlan(page, QueryWrappers.queryWrappers(internalPlan));
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝鏂板
+     * @param internalPlan
+     * @return
+     */
+    @Override
+    public boolean addInternalPlan(InternalPlanDto internalPlan) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        // 娣诲姞缂栧埗浜�
+        User user = userMapper.selectById(userId);
+        internalPlan.setWriteTime(LocalDateTime.now());
+        internalPlan.setWriteUserId(user.getId());
+        internalPlan.setWriteUserName(user.getName());
+
+        baseMapper.insert(internalPlan);
+        // 鏂板璇︽儏
+        for (InternalPlanDetail internalPlanDetail : internalPlan.getPlanDetailList()) {
+            internalPlanDetail.setPlanId(internalPlan.getPlanId());
+        }
+        internalPlanDetailService.saveBatch(internalPlan.getPlanDetailList());
+        return true;
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝淇敼
+     * @param internalPlan
+     * @return
+     */
+    @Override
+    public boolean updateInternalPlan(InternalPlanDto internalPlan) {
+        baseMapper.updateById(internalPlan);
+
+        // 鍒犻櫎涔嬪墠鐨勮鎯�
+        internalPlanDetailService.remove(Wrappers.<InternalPlanDetail>lambdaQuery()
+                .eq(InternalPlanDetail::getPlanId, internalPlan.getPlanId()));
+
+        // 鏂板璇︽儏
+        for (InternalPlanDetail internalPlanDetail : internalPlan.getPlanDetailList()) {
+            internalPlanDetail.setPlanId(internalPlan.getPlanId());
+        }
+        internalPlanDetailService.saveBatch(internalPlan.getPlanDetailList());
+
+        return true;
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝鍒犻櫎
+     * @param planId
+     * @return
+     */
+    @Override
+    public boolean delInternalPlan(Integer planId) {
+        internalPlanDetailService.remove(Wrappers.<InternalPlanDetail>lambdaQuery()
+                .eq(InternalPlanDetail::getPlanId, planId));
+        baseMapper.deleteById(planId);
+        return true;
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝鏌ョ湅璇︽儏
+     * @param planId
+     * @return
+     */
+    @Override
+    public InternalPlanDto getInternalPlanOne(Integer planId) {
+        InternalPlan internalPlan = baseMapper.selectById(planId);
+        InternalPlanDto internalPlanDto = new InternalPlanDto();
+        BeanUtils.copyProperties(internalPlan, internalPlanDto);
+
+        // 鏌ヨ璇︾粏淇℃伅
+        internalPlanDto.setPlanDetailList(internalPlanDetailService.list(Wrappers.<InternalPlanDetail>lambdaQuery()
+                .eq(InternalPlanDetail::getPlanId, planId)));
+        return internalPlanDto;
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝瀹℃牳
+     * @param internalPlanDto
+     * @return
+     */
+    @Override
+    public boolean examineInternalPlan(InternalPlanDto internalPlanDto) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        baseMapper.update(null, Wrappers.<InternalPlan>lambdaUpdate()
+                .eq(InternalPlan::getPlanId, internalPlanDto.getPlanId())
+                .set(InternalPlan::getExamineUserId, userId)
+                .set(InternalPlan::getExamineUserName, user.getName())
+                .set(InternalPlan::getExamineRemark, internalPlanDto.getExamineRemark())
+                .set(InternalPlan::getExamineStatus, internalPlanDto.getExamineStatus())
+                .set(InternalPlan::getExamineTime, LocalDateTime.now())
+        );
+        return true;
+    }
+
+    /**
+     * 鍐呭骞村害璁″垝鎵瑰噯
+     * @param internalPlanDto
+     * @return
+     */
+    @Override
+    public boolean ratifyInternalPlan(InternalPlanDto internalPlanDto) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        baseMapper.update(null, Wrappers.<InternalPlan>lambdaUpdate()
+                .eq(InternalPlan::getPlanId, internalPlanDto.getPlanId())
+                .set(InternalPlan::getRatifyUserId, userId)
+                .set(InternalPlan::getRatifyUserName, user.getName())
+                .set(InternalPlan::getRatifyRemark, internalPlanDto.getRatifyRemark())
+                .set(InternalPlan::getRatifyStatus, internalPlanDto.getRatifyStatus())
+                .set(InternalPlan::getRatifyTime, LocalDateTime.now())
+        );
+        return true;
+    }
+
+    /**
+     * 瀵煎嚭鍐呭骞村害璁″垝
+     * @param planId
+     * @param response
+     */
+    @Override
+    public void exportInternalImplement(Integer planId, HttpServletResponse response) {
+        InternalPlan internalPlan = baseMapper.selectById(planId);
+        //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+        String writeUrl = userMapper.selectById(internalPlan.getWriteUserId()).getSignatureUrl();
+        if (StringUtils.isBlank(writeUrl)) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+
+        //鑾峰彇瀹℃牳浜虹殑绛惧悕鍦板潃
+        String examineUrl = null;
+        if (internalPlan.getExamineUserId() != null) {
+            examineUrl = userMapper.selectById(internalPlan.getExamineUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(examineUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+        String ratifyUrl = null;
+        if (internalPlan.getRatifyUserId() != null) {
+            ratifyUrl = userMapper.selectById(internalPlan.getRatifyUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
+            }
+        }
+
+        // 鏌ヨ璇︽儏
+        List<InternalPlanDetail> planDetails = internalPlanDetailService.list(Wrappers.<InternalPlanDetail>lambdaQuery()
+                .eq(InternalPlanDetail::getPlanId, planId));
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-plan.docx");
+        String finalExamineUrl = examineUrl;
+        String finalRatifyUrl = ratifyUrl;
+        Configure configure = Configure.builder()
+                .bind("planDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("plan", internalPlan);
+                    put("planDetailList", planDetails);
+                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+                    put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
+                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "鍐呭骞村害璁″垝", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalReportServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalReportServiceImpl.java
new file mode 100644
index 0000000..4857a8d
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalReportServiceImpl.java
@@ -0,0 +1,157 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.InternalReportMapper;
+import com.ruoyi.manage.pojo.InternalReport;
+import com.ruoyi.manage.service.InternalReportService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalReportServiceImpl extends ServiceImpl<InternalReportMapper, InternalReport> implements InternalReportService {
+    @Resource
+    private UserMapper userMapper;
+    @Value("${file.path}")
+    private String imgUrl;
+
+    /**
+     * 鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+     * @param page
+     * @param internalReport
+     * @return
+     */
+    @Override
+    public IPage<InternalReport> pageInternalReport(Page page, InternalReport internalReport) {
+        return baseMapper.pageInternalReport(page, QueryWrappers.queryWrappers(internalReport));
+    }
+
+    /**
+     * 鍐呭鎶ュ憡瀹℃牳
+     * @param internalReport
+     * @return
+     */
+    @Override
+    public boolean ratifyInternalCheck(InternalReport internalReport) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        baseMapper.update(null, Wrappers.<InternalReport>lambdaUpdate()
+                .eq(InternalReport::getReportId, internalReport.getReportId())
+                .set(InternalReport::getExamineUserId, userId)
+                .set(InternalReport::getExamineUserName, user.getName())
+                .set(InternalReport::getExamineRemark, internalReport.getExamineRemark())
+                .set(InternalReport::getExamineStatus, internalReport.getExamineStatus())
+                .set(InternalReport::getExamineTime, LocalDateTime.now())
+        );
+        return true;
+    }
+
+    /**
+     * 鍐呭鎶ュ憡璐ㄩ噺璐熻矗浜哄~鍐�
+     * @param internalReport
+     * @return
+     */
+    @Override
+    public boolean qualityInternalReport(InternalReport internalReport) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        baseMapper.update(null, Wrappers.<InternalReport>lambdaUpdate()
+                .eq(InternalReport::getReportId, internalReport.getReportId())
+                .set(InternalReport::getQualityUserId, userId)
+                .set(InternalReport::getQualityUserName, user.getName())
+                .set(InternalReport::getQualityRemark, internalReport.getQualityRemark())
+                .set(InternalReport::getQualityStatus, internalReport.getQualityStatus())
+                .set(InternalReport::getQualityTime, LocalDateTime.now())
+        );
+        return true;
+    }
+
+    /**
+     * 瀵煎嚭鍐呭鎶ュ憡
+     * @param reportId
+     * @param response
+     */
+    @Override
+    public void exportInternalReport(Integer reportId, HttpServletResponse response) {
+        InternalReport internalReport = baseMapper.selectById(reportId);
+
+        //鑾峰彇瀹℃牳浜虹殑绛惧悕鍦板潃
+        String examineUrl = null;
+        if (internalReport.getExamineUserId() != null) {
+            examineUrl = userMapper.selectById(internalReport.getExamineUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(examineUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        //鑾峰彇璐ㄩ噺璐熻矗浜虹殑绛惧悕鍦板潃
+        String qualityUrl = null;
+        if (internalReport.getQualityUserId() != null) {
+            qualityUrl = userMapper.selectById(internalReport.getQualityUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(qualityUrl)) {
+                throw new ErrorException("鎵句笉鍒拌川閲忚礋璐d汉鐨勭鍚�");
+            }
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-report.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String finalExamineUrl = examineUrl;
+        String finalQualityUrl = qualityUrl;
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("report", internalReport);
+                    put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).create() : null);
+                    put("qualityUrl", StringUtils.isNotBlank(finalQualityUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).create() : null);
+                    put("examineTime", internalReport.getExamineTime() != null ? internalReport.getExamineTime().format(formatter) : null);
+                    put("qualityTime", internalReport.getQualityTime() != null ? internalReport.getQualityTime().format(formatter) : null);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "鍐呭鎶ュ憡", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageControlPlanListServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageControlPlanListServiceImpl.java
new file mode 100644
index 0000000..ecad4e0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageControlPlanListServiceImpl.java
@@ -0,0 +1,124 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.mapper.ManageControlPlanListMapper;
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import com.ruoyi.manage.service.ManageControlPlanListService;
+import com.ruoyi.manage.vo.ManageControlPlanListVo;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:30
+ */
+@Service
+public class ManageControlPlanListServiceImpl extends ServiceImpl<ManageControlPlanListMapper, ManageControlPlanList> implements ManageControlPlanListService {
+
+    @Autowired
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Override
+    public IPage<ManageControlPlanListVo> getPageList(Page page) {
+        return baseMapper.getPageList(page, false);
+    }
+
+    @Override
+    public void exportPersonTraining(HttpServletResponse response) {
+        // 鏌ヨ璇︽儏
+        IPage<ManageControlPlanListVo> detailedDtos = baseMapper.getPageList(new Page(1, -1), true);
+        if (detailedDtos.getRecords().isEmpty()) {
+            throw new ErrorException("瀹℃牳閫氳繃鐨勬暟鎹负绌猴紒璇峰鏍搁�氳繃鍚庡湪瀵煎嚭");
+        }
+        ManageControlPlanListVo manageRiskAssessmentResultsVo = detailedDtos.getRecords().get(0);
+
+        //鑾峰彇缂栧埗浜虹殑绛惧悕鍦板潃
+        String writeUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getEditor()).getSignatureUrl();
+        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+
+        //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃
+        String examineUrl = null;
+        if (manageRiskAssessmentResultsVo.getApproval() != null) {
+            examineUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getApproval()).getSignatureUrl();
+            if (StringUtils.isBlank(examineUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+        String ratifyUrl = null;
+        if (manageRiskAssessmentResultsVo.getApproval() != null) {
+            ratifyUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getApproval()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        int index = 1;
+        for (ManageControlPlanListVo detailedDto : detailedDtos.getRecords()) {
+            detailedDto.setIndex(index);
+            index++;
+        }
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/analysis-risk-factors.docx");
+        String finalExamineUrl = examineUrl;
+        String finalRatifyUrl = ratifyUrl;
+        Configure configure = Configure.builder()
+                .bind("trainingDetailedList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("trainingDetailedList", detailedDtos.getRecords());
+                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+                    put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
+                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+                    put("writeDateUrl", manageRiskAssessmentResultsVo.getEditorDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getEditorDate())).create() : null);
+                    put("examineDateUrl", manageRiskAssessmentResultsVo.getApproveDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getApproveDate())).create() : null);
+                    put("ratifyDateUrl", manageRiskAssessmentResultsVo.getApproveDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getApproveDate())).create() : null);
+                }});
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentAlterServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentAlterServiceImpl.java
new file mode 100644
index 0000000..b2f8120
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentAlterServiceImpl.java
@@ -0,0 +1,283 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.manage.mapper.*;
+import com.ruoyi.manage.pojo.*;
+import com.ruoyi.manage.service.ManageDocumentAlterService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 11:04:01
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageDocumentAlterServiceImpl extends ServiceImpl<ManageDocumentAlterMapper, ManageDocumentAlter> implements ManageDocumentAlterService {
+
+    @Resource
+    private ManageDocumentAlterMapper manageDocumentAlterMapper;
+
+    @Resource
+    private ManageRecordCheckMapper manageRecordCheckMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Resource
+    private ManageDocumentListMapper manageDocumentListMapper;
+
+    @Resource
+    private ManageDocumentCancelMapper manageDocumentCancelMapper;
+
+    @Resource
+    private ManageRecordAuditMapper manageRecordAuditMapper;
+
+
+    @Override
+    public IPage<ManageDocumentAlter> pageManageDocumentAlter(Page page, ManageDocumentAlter manageDocumentAlter) {
+        return manageDocumentAlterMapper.pageManageDocumentAlter(page, QueryWrappers.queryWrappers(manageDocumentAlter));
+    }
+
+    @Override
+    public ManageDocumentAlter getManageDocumentAlter(Integer id) {
+        ManageDocumentAlter manageDocumentAlter = manageDocumentAlterMapper.getManageDocumentAlter(id);
+        String limsName = userMapper.selectUserDepartmentLimsName(manageDocumentAlter.getCreateUser());
+        manageDocumentAlter.setCreateUserDepartLims(limsName);
+        return manageDocumentAlter;
+    }
+
+    @Override
+    public int addManageDocumentAlter(ManageDocumentAlter manageDocumentAlter) {
+        /*鏂板8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+        ManageRecordAudit manageRecordAudit = new ManageRecordAudit();
+        manageRecordAudit.setDocumentCode(manageDocumentAlter.getAlterBeforeCode());
+        manageRecordAudit.setDocumentName(manageDocumentAlter.getAlterBeforeName());
+        manageRecordAudit.setBeforeVersion(manageDocumentAlter.getAlterBeforeVersion());
+        manageRecordAudit.setAfterVersion(manageDocumentAlter.getAlterAfterVersion());
+        manageRecordAudit.setReason(manageDocumentAlter.getAlterNote());
+        manageRecordAudit.setAlterUser(SecurityUtils.getUserId().intValue());
+        manageRecordAudit.setMethod("淇");
+        if (ObjectUtils.isNotEmpty(manageDocumentAlter.getFile())) {
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageDocumentAlter.getFile();
+            //涓婁紶鏂版枃浠�
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+            manageDocumentAlter.setAlterAfterUrl(pathName);
+            manageRecordAudit.setAfterUrl(pathName);
+        }
+        manageRecordAuditMapper.insert(manageRecordAudit);
+        return manageDocumentAlterMapper.insert(manageDocumentAlter);
+    }
+
+    @Override
+    public int doManageDocumentAlter(ManageDocumentAlter manageDocumentAlter) {
+        ManageDocumentAlter manageDocumentAlter1= manageDocumentAlterMapper.selectById(manageDocumentAlter.getId());
+        if (ObjectUtils.isNotEmpty(manageDocumentAlter.getFile())) {
+            if (ObjectUtils.isNotEmpty(manageDocumentAlter1.getAlterAfterUrl())) {
+                // 鍒犻櫎鏃ф枃浠�
+                File oldFile = new File(wordUrl + "/" + manageDocumentAlter1.getAlterAfterUrl());
+                oldFile.delete();
+            }
+            //涓婁紶鏂版枃浠�
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageDocumentAlter.getFile();
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+                manageDocumentAlter.setAlterAfterUrl(pathName);
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+        }
+        return manageDocumentAlterMapper.updateById(manageDocumentAlter);
+    }
+
+    @Override
+    public int checkManageDocumentAlter(ManageDocumentAlter manageDocumentAlter) {
+        ManageDocumentAlter oldManageDocumentAlter = manageDocumentAlterMapper.selectById(manageDocumentAlter.getId());
+        if (manageDocumentAlter.getState().equals("閫氳繃")) {
+            /*灏嗘枃浠剁洊绔�*/
+            // 鍒犻櫎鏃ф枃浠�
+            File oldFile = new File(wordUrl + "/" + oldManageDocumentAlter.getAlterAfterUrl());
+            oldFile.delete();
+            //涓婁紶鏂版枃浠�
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageDocumentAlter.getFile();
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+                manageDocumentAlter.setAlterAfterUrl(pathName);
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+            /*鍏朵綑鐩稿叧澶勭悊*/
+            if (oldManageDocumentAlter.getMethod().equals("浣滃簾")){
+                //鏂板鍒颁綔搴熺敵璇烽噷闈�
+                ManageDocumentCancel manageDocumentCancel = new ManageDocumentCancel();
+                manageDocumentCancel.setDocumentCode(oldManageDocumentAlter.getAlterBeforeCode());
+                manageDocumentCancel.setName(oldManageDocumentAlter.getAlterBeforeName());
+                manageDocumentCancel.setVersion(oldManageDocumentAlter.getAlterBeforeVersion());
+                manageDocumentCancel.setCancelNote("鏂囦欢鍙樻洿,鍙樻洿鐨勬枃浠剁紪鍙锋槸"+oldManageDocumentAlter.getAlterAfterCode());
+                manageDocumentCancelMapper.insert(manageDocumentCancel);
+                //鍒犻櫎鏂囦欢娓呭崟
+                manageDocumentListMapper.delete(Wrappers.<ManageDocumentList>lambdaQuery()
+                        .eq(ManageDocumentList::getDocumentCode,oldManageDocumentAlter.getAlterBeforeCode()));
+                //鏂板鏂囦欢娓呭崟
+                ManageDocumentList manageDocumentList = new ManageDocumentList();
+                manageDocumentList.setDocumentCode(oldManageDocumentAlter.getAlterAfterCode());
+                manageDocumentList.setName(oldManageDocumentAlter.getAlterAfterName());
+                manageDocumentList.setVersion(oldManageDocumentAlter.getAlterAfterVersion());
+                manageDocumentList.setState("鏈夋晥");
+                manageDocumentList.setEffectiveDate(LocalDate.now());
+                manageDocumentList.setUrl(pathName);
+                manageDocumentListMapper.insert(manageDocumentList);
+                /*鏂板8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+                ManageRecordAudit manageRecordAudit = new ManageRecordAudit();
+                manageRecordAudit.setDocumentCode(manageDocumentCancel.getDocumentCode());
+                manageRecordAudit.setDocumentName(manageDocumentCancel.getName());
+                manageRecordAudit.setAlterThing("浣滃簾");
+                manageRecordAudit.setMethod("浣滃簾");
+                manageRecordAuditMapper.insert(manageRecordAudit);
+            }else {
+                //濡傛灉鏄瓨妗d笉鍙敤,閭e氨灏嗘枃浠舵竻鍗曠殑鐘舵�佹敼涓烘棤鏁�
+                manageDocumentListMapper.update(null,Wrappers.<ManageDocumentList>lambdaUpdate()
+                        .eq(ManageDocumentList::getDocumentCode,oldManageDocumentAlter.getAlterBeforeCode())
+                        .set(ManageDocumentList::getState,"鏃犳晥"));
+            }
+        }
+        /*鏂板8.4鐨勬枃浠跺鎵硅褰�*/
+        ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+        manageRecordCheck.setDocumentCode(oldManageDocumentAlter.getAlterAfterCode());
+        manageRecordCheck.setDocumentName(oldManageDocumentAlter.getAlterAfterName());
+        manageRecordCheck.setDocumentVersion(oldManageDocumentAlter.getAlterAfterVersion());
+        manageRecordCheck.setWriteUser(oldManageDocumentAlter.getCreateUser());
+        manageRecordCheck.setCheckUser(oldManageDocumentAlter.getCheckUser());
+        manageRecordCheck.setCheckState(manageDocumentAlter.getState());
+        manageRecordCheck.setRemark(manageDocumentAlter.getAlterNote());
+        manageRecordCheckMapper.insert(manageRecordCheck);
+        return manageDocumentAlterMapper.updateById(manageDocumentAlter);
+    }
+
+    @Override
+    public void checkManageDocumentAlterPdf(Long id, HttpServletResponse response) throws Exception {
+        ManageDocumentAlter manageDocumentAlter = manageDocumentAlterMapper.selectById(id);
+        File file = new File(wordUrl + "/" + manageDocumentAlter.getAlterAfterUrl());
+        FileInputStream fileInputStream = new FileInputStream(file);
+        response.setContentType("application/pdf");
+        response.setCharacterEncoding("UTF-8");
+        response.setHeader("Content-disposition", "inline;filename=" + file.getName());
+        response.setContentLength((int)file.length());
+        OutputStream os = response.getOutputStream();
+        // 灏嗘枃浠跺唴瀹瑰啓鍏ヨ緭鍑烘祦
+        byte[] buffer = new byte[4096];
+        int bytesRead;
+        while ((bytesRead = fileInputStream.read(buffer)) != -1) {
+            os.write(buffer, 0, bytesRead);
+        }
+        os.flush();
+        os.close();
+    }
+
+    @Override
+    public void exportManageDocumentAlter(ManageDocumentAlter manageDocumentAlter, HttpServletResponse response) throws Exception {
+        List<ManageDocumentAlter> data = manageDocumentAlterMapper.pageManageDocumentAlter(new Page(-1, -1), QueryWrappers.queryWrappers(manageDocumentAlter)).getRecords();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("UTF-8");
+        String fileName = URLEncoder.encode("鏂囦欢鍙樻洿鍒楄〃瀵煎嚭", "UTF-8");
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+        try {
+            // 鏂板缓ExcelWriter
+            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            WriteSheet mainSheet = EasyExcel.writerSheet(0, "鏂囦欢鍙樻洿鍒楄〃瀵煎嚭").head(ManageDocumentAlter.class).build();
+            excelWriter.write(data, mainSheet);
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    @Override
+    public int delManageDocumentAlter(Integer id) {
+        ManageDocumentAlter manageDocumentAlter = manageDocumentAlterMapper.selectById(id);
+        /*鍒犻櫎8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+        manageRecordAuditMapper.delete(Wrappers.<ManageRecordAudit>lambdaQuery()
+        .eq(ManageRecordAudit::getDocumentCode,manageDocumentAlter.getAlterBeforeCode())
+        .eq(ManageRecordAudit::getDocumentName,manageDocumentAlter.getAlterBeforeName())
+        .eq(ManageRecordAudit::getBeforeVersion,manageDocumentAlter.getAlterBeforeVersion())
+        .eq(ManageRecordAudit::getAfterVersion,manageDocumentAlter.getAlterAfterVersion())
+        .eq(ManageRecordAudit::getReason,manageDocumentAlter.getAlterNote())
+        .eq(ManageRecordAudit::getAlterUser,manageDocumentAlter.getCreateUser())
+        .eq(ManageRecordAudit::getMethod,"淇"));
+        return manageDocumentAlterMapper.deleteById(id);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentCancelServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentCancelServiceImpl.java
new file mode 100644
index 0000000..79090ae
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentCancelServiceImpl.java
@@ -0,0 +1,141 @@
+package com.ruoyi.manage.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.manage.mapper.ManageDocumentCancelMapper;
+import com.ruoyi.manage.mapper.ManageDocumentListMapper;
+import com.ruoyi.manage.mapper.ManageRecordAuditMapper;
+import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
+import com.ruoyi.manage.pojo.ManageDocumentCancel;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.service.ManageDocumentCancelService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 02:37:35
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageDocumentCancelServiceImpl extends ServiceImpl<ManageDocumentCancelMapper, ManageDocumentCancel> implements ManageDocumentCancelService {
+
+    @Resource
+    private ManageDocumentCancelMapper manageDocumentCancelMapper;
+
+    @Resource
+    private ManageRecordCheckMapper manageRecordCheckMapper;
+
+    @Resource
+    private ManageRecordAuditMapper manageRecordAuditMapper;
+
+    @Resource
+    private ManageDocumentListMapper manageDocumentListMapper;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<ManageDocumentCancel> pageManageDocumentCancel(Page page, ManageDocumentCancel manageDocumentCancel) {
+        return manageDocumentCancelMapper.pageManageDocumentCancel(page, QueryWrappers.queryWrappers(manageDocumentCancel));
+    }
+
+    @Override
+    public int addManageDocumentCancel(ManageDocumentCancel manageDocumentCancel) {
+        manageDocumentCancel.setState("寰呭鏍�");
+        /*鏂板8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+        ManageRecordAudit manageRecordAudit = new ManageRecordAudit();
+        manageRecordAudit.setDocumentCode(manageDocumentCancel.getDocumentCode());
+        manageRecordAudit.setDocumentName(manageDocumentCancel.getName());
+        manageRecordAudit.setAlterThing("浣滃簾");
+        manageRecordAudit.setMethod("浣滃簾");
+        manageRecordAuditMapper.insert(manageRecordAudit);
+        return manageDocumentCancelMapper.insert(manageDocumentCancel);
+    }
+
+    @Override
+    public int checkManageDocumentCancel(Integer id, String state) {
+        ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.selectById(id);
+        if (state.equals("閫氳繃")){
+            //鍒犻櫎鏂囦欢娓呭崟瀵瑰簲鏁版嵁
+            manageDocumentListMapper.delete(Wrappers.<ManageDocumentList>lambdaQuery().eq(ManageDocumentList::getDocumentCode,manageDocumentCancel.getDocumentCode()));
+        }
+        manageDocumentCancel.setState(state);
+        /*鏂板8.4鐨勬枃浠跺鎵硅褰�*/
+        ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+        manageRecordCheck.setDocumentCode(manageDocumentCancel.getDocumentCode());
+        manageRecordCheck.setDocumentName(manageDocumentCancel.getName());
+        manageRecordCheck.setDocumentVersion(manageDocumentCancel.getVersion());
+        manageRecordCheck.setWriteUser(manageDocumentCancel.getCreateUser());
+        manageRecordCheck.setCheckUser(manageDocumentCancel.getCheckUser());
+        manageRecordCheck.setCheckState(manageDocumentCancel.getState());
+        manageRecordCheck.setRemark(manageDocumentCancel.getCancelNote());
+        manageRecordCheckMapper.insert(manageRecordCheck);
+        return manageDocumentCancelMapper.updateById(manageDocumentCancel);
+    }
+
+    @Override
+    public ManageDocumentCancel getManageDocumentCancel(Integer id) {
+        ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.getManageDocumentCancel(id);
+        String limsName = userMapper.selectUserDepartmentLimsName(manageDocumentCancel.getCreateUser());
+        manageDocumentCancel.setCreateUserDepartLims(limsName);
+        return manageDocumentCancel;
+    }
+
+    @Override
+    public void exportManageDocumentCancel(ManageDocumentCancel manageDocumentCancel, HttpServletResponse response) throws Exception{
+        List<ManageDocumentCancel> data = manageDocumentCancelMapper.pageManageDocumentCancel(new Page(-1, -1), QueryWrappers.queryWrappers(manageDocumentCancel)).getRecords();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("UTF-8");
+        String fileName = URLEncoder.encode("鏂囦欢浣滃簾鍒楄〃瀵煎嚭", "UTF-8");
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+        try {
+            // 鏂板缓ExcelWriter
+            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            WriteSheet mainSheet = EasyExcel.writerSheet(0, "鏂囦欢浣滃簾鍒楄〃瀵煎嚭").head(ManageDocumentCancel.class).build();
+            excelWriter.write(data, mainSheet);
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    @Override
+    public int delManageDocumentCancel(Integer id) {
+        ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.selectById(id);
+        /*鍒犻櫎8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+        manageRecordAuditMapper.delete(Wrappers.<ManageRecordAudit>lambdaQuery()
+        .eq(ManageRecordAudit::getDocumentCode,manageDocumentCancel.getDocumentCode())
+        .eq(ManageRecordAudit::getDocumentName,manageDocumentCancel.getName())
+        .eq(ManageRecordAudit::getMethod,"浣滃簾"));
+        return manageDocumentCancelMapper.deleteById(id);
+    }
+
+    @Override
+    public int doManageDocumentCancel(ManageDocumentCancel manageDocumentCancel) {
+        return manageDocumentCancelMapper.updateById(manageDocumentCancel);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentControlledServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentControlledServiceImpl.java
new file mode 100644
index 0000000..2528f4a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentControlledServiceImpl.java
@@ -0,0 +1,218 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.manage.mapper.ManageDocumentControlledMapper;
+import com.ruoyi.manage.mapper.ManageDocumentListMapper;
+import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
+import com.ruoyi.manage.pojo.ManageDocumentControlled;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.service.ManageDocumentControlledService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.OutputStream;
+import java.time.LocalDate;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 02:54:44
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageDocumentControlledServiceImpl extends ServiceImpl<ManageDocumentControlledMapper, ManageDocumentControlled> implements ManageDocumentControlledService {
+
+    @Resource
+    private ManageDocumentControlledMapper manageDocumentControlledMapper;
+
+    @Resource
+    private ManageDocumentListMapper manageDocumentListMapper;
+
+    @Resource
+    private ManageRecordCheckMapper manageRecordCheckMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<ManageDocumentControlled> pageManageDocumentControlled(Page page, ManageDocumentControlled manageDocumentControlled) {
+        return manageDocumentControlledMapper.pageManageDocumentControlled(page, QueryWrappers.queryWrappers(manageDocumentControlled));
+    }
+
+    @Override
+    public int addManageDocumentControlled(ManageDocumentControlled manageDocumentControlled) {
+        manageDocumentControlled.setState("寰呭鏍�");
+        String urlString;
+        String pathName;
+        String path;
+        if (ObjectUtils.isNotEmpty(manageDocumentControlled.getFile())) {
+            MultipartFile file = manageDocumentControlled.getFile();
+            //涓婁紶鏂版枃浠�
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+            manageDocumentControlled.setUrl(pathName);
+        }
+        return manageDocumentControlledMapper.insert(manageDocumentControlled);
+    }
+
+    @Override
+    public int delManageDocumentControlled(Long id) {
+        ManageDocumentControlled manageDocumentControlled = manageDocumentControlledMapper.selectById(id);
+        if (ObjectUtils.isNotEmpty(manageDocumentControlled.getUrl())) {
+            // 鍒犻櫎鏃ф枃浠�
+            File oldFile = new File(wordUrl + "/" + manageDocumentControlled.getUrl());
+            oldFile.delete();
+        }
+        return manageDocumentControlledMapper.deleteById(id);
+    }
+
+    @Override
+    public ManageDocumentControlled getManageDocumentControlled(Long id) {
+        ManageDocumentControlled manageDocumentControlled = manageDocumentControlledMapper.getManageDocumentControlled(id);
+        //鑾峰彇閮ㄩ棬淇℃伅
+        String departmentLimsName = userMapper.selectUserDepartmentLimsName(manageDocumentControlled.getCreateUser());
+        manageDocumentControlled.setCreateUserDepartLims(departmentLimsName);
+        return manageDocumentControlled;
+    }
+
+    @Override
+    public int doManageDocumentControlled(ManageDocumentControlled manageDocumentControlled) {
+        ManageDocumentControlled manageDocumentControlled1 = manageDocumentControlledMapper.selectById(manageDocumentControlled.getId());
+        if (ObjectUtils.isNotEmpty(manageDocumentControlled.getFile())) {
+            if (ObjectUtils.isNotEmpty(manageDocumentControlled1.getUrl())) {
+                // 鍒犻櫎鏃ф枃浠�
+                File oldFile = new File(wordUrl + "/" + manageDocumentControlled1.getUrl());
+                oldFile.delete();
+            }
+            //涓婁紶鏂版枃浠�
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageDocumentControlled.getFile();
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+                manageDocumentControlled.setUrl(pathName);
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+        }
+        return manageDocumentControlledMapper.updateById(manageDocumentControlled);
+    }
+
+    @Override
+    public int checkManageDocumentControlled(ManageDocumentControlled manageDocumentControlled) {
+        ManageDocumentControlled documentControlled = manageDocumentControlledMapper.selectById(manageDocumentControlled.getId());
+        if (manageDocumentControlled.getState().equals("閫氳繃")) {
+            // 鍒犻櫎鏃ф枃浠�
+            File oldFile = new File(wordUrl + "/" + documentControlled.getUrl());
+            oldFile.delete();
+            //涓婁紶鏂版枃浠�
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageDocumentControlled.getFile();
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+                manageDocumentControlled.setUrl(pathName);
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+            //灏嗘枃浠跺彈鎺у凡鐭ユ枃浠舵竻鍗�
+            ManageDocumentList manageDocumentList = new ManageDocumentList();
+            manageDocumentList.setDocumentCode(documentControlled.getDocumentCode());
+            manageDocumentList.setType(documentControlled.getType());
+            manageDocumentList.setName(documentControlled.getName());
+            manageDocumentList.setVersion(documentControlled.getVersion());
+            manageDocumentList.setWriter(documentControlled.getWriter());
+            manageDocumentList.setEffectiveDate(LocalDate.now());
+            manageDocumentList.setState("鏈夋晥");
+            manageDocumentList.setUrl(manageDocumentControlled.getUrl());
+            manageDocumentListMapper.insert(manageDocumentList);
+        }
+        /*鏂板8.4鐨勬枃浠跺鎵硅褰�*/
+        ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+        manageRecordCheck.setDocumentCode(documentControlled.getDocumentCode());
+        manageRecordCheck.setDocumentName(documentControlled.getName());
+        manageRecordCheck.setDocumentVersion(documentControlled.getVersion());
+        manageRecordCheck.setWriteUser(userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName,documentControlled.getWriter())).getId());
+        manageRecordCheck.setCheckUser(documentControlled.getDutyUser());
+        manageRecordCheck.setCheckState(manageDocumentControlled.getState());
+        manageRecordCheck.setRemark(documentControlled.getInstructions());
+        manageRecordCheckMapper.insert(manageRecordCheck);
+        return manageDocumentControlledMapper.updateById(manageDocumentControlled);
+    }
+
+    @Override
+    public void checkManageDocumentControlledPdf(Long id, HttpServletResponse response) throws Exception {
+        ManageDocumentControlled manageDocumentControlled = manageDocumentControlledMapper.selectById(id);
+        File file = new File(wordUrl + "/" + manageDocumentControlled.getUrl());
+        FileInputStream fileInputStream = new FileInputStream(file);
+        response.setContentType("application/pdf");
+        response.setCharacterEncoding("UTF-8");
+        response.setHeader("Content-disposition", "inline;filename=" + file.getName());
+        response.setContentLength((int)file.length());
+        OutputStream os = response.getOutputStream();
+        // 灏嗘枃浠跺唴瀹瑰啓鍏ヨ緭鍑烘祦
+        byte[] buffer = new byte[4096];
+        int bytesRead;
+        while ((bytesRead = fileInputStream.read(buffer)) != -1) {
+            os.write(buffer, 0, bytesRead);
+        }
+        os.flush();
+        os.close();
+    }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentIssueRecycleServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentIssueRecycleServiceImpl.java
new file mode 100644
index 0000000..e6a58f5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentIssueRecycleServiceImpl.java
@@ -0,0 +1,197 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto;
+import com.ruoyi.manage.mapper.ManageDocumentIssueRecycleMapper;
+import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
+import com.ruoyi.manage.mapper.ManageRecordIssueRecycleMapper;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import com.ruoyi.manage.service.ManageDocumentIssueRecycleService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 09:18:24
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageDocumentIssueRecycleServiceImpl extends ServiceImpl<ManageDocumentIssueRecycleMapper, ManageDocumentIssueRecycle> implements ManageDocumentIssueRecycleService {
+
+    @Resource
+    private ManageDocumentIssueRecycleMapper manageDocumentIssueRecycleMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private ManageRecordCheckMapper manageRecordCheckMapper;
+
+    @Resource
+    private ManageRecordIssueRecycleMapper manageRecordIssueRecycleMapper;
+
+    @Override
+    public IPage<ManageDocumentIssueRecycleDto> pageManageDocumentIssueRecycle(Page page, ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto) {
+        return manageDocumentIssueRecycleMapper.pageManageDocumentIssueRecycle(page, QueryWrappers.queryWrappers(manageDocumentIssueRecycleDto));
+    }
+
+    @Override
+    public ManageDocumentIssueRecycleDto getManageDocumentIssueRecycle(Long id) {
+        return manageDocumentIssueRecycleMapper.getManageDocumentIssueRecycle(id);
+    }
+
+    @Override
+    public void exportManageDocumentIssueRecycle(ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto, HttpServletResponse response)throws Exception {
+        List<ManageDocumentIssueRecycleDto> data = manageDocumentIssueRecycleMapper.pageManageDocumentIssueRecycle(new Page(-1, -1), QueryWrappers.queryWrappers(manageDocumentIssueRecycleDto)).getRecords();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("UTF-8");
+        String fileName = URLEncoder.encode("鏂囦欢鍙戞斁鍥炴敹瀵煎嚭", "UTF-8");
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+        try {
+            // 鏂板缓ExcelWriter
+            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            WriteSheet mainSheet = EasyExcel.writerSheet(0, "鏂囦欢鍙戞斁鍥炴敹瀵煎嚭").head(ManageDocumentIssueRecycleDto.class).build();
+            excelWriter.write(data, mainSheet);
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    @Override
+    public int checkManageDocumentIssueRecycle(Integer id, String documentState) {
+        ManageDocumentIssueRecycle manageDocumentIssueRecycle = manageDocumentIssueRecycleMapper.selectById(id);
+        manageDocumentIssueRecycle.setDocumentState(documentState);
+        /*鏂板8.4鐨勬枃浠跺鎵硅褰�*/
+        ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+        manageRecordCheck.setDocumentCode(manageDocumentIssueRecycle.getDocumentCode());
+        manageRecordCheck.setDocumentName(manageDocumentIssueRecycle.getName());
+        manageRecordCheck.setDocumentVersion(manageDocumentIssueRecycle.getVersion());
+        manageRecordCheck.setCheckUser(manageDocumentIssueRecycle.getReceiveUser());
+        manageRecordCheck.setCheckState(documentState);
+        manageRecordCheckMapper.insert(manageRecordCheck);
+        return manageDocumentIssueRecycleMapper.updateById(manageDocumentIssueRecycle);
+    }
+
+    @Override
+    public int addManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle) {
+        manageDocumentIssueRecycle.setDocumentState("寰呭鏍�");
+        if (ObjectUtils.isNotEmpty(manageDocumentIssueRecycle.getFile())){
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageDocumentIssueRecycle.getFile();
+            //涓婁紶鏂版枃浠�
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+            manageDocumentIssueRecycle.setUrl(pathName);
+        }
+        /*鏂板8.3鐨勫彂鏀句笌鍥炴敹璁板綍*/
+        ManageRecordIssueRecycle manageRecordIssueRecycle = new ManageRecordIssueRecycle();
+        manageRecordIssueRecycle.setDocumentCode(manageDocumentIssueRecycle.getDocumentCode());
+        manageRecordIssueRecycle.setDocumentName(manageDocumentIssueRecycle.getName());
+        manageRecordIssueRecycle.setDocumentVersion(manageDocumentIssueRecycle.getVersion());
+        manageRecordIssueRecycle.setReceiveUser(manageDocumentIssueRecycle.getIssueUser());
+        manageRecordIssueRecycle.setReceiveDate(manageDocumentIssueRecycle.getIssueDate());
+        manageRecordIssueRecycleMapper.insert(manageRecordIssueRecycle);
+        return manageDocumentIssueRecycleMapper.insert(manageDocumentIssueRecycle);
+    }
+
+    @Override
+    public int doManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle) {
+        ManageDocumentIssueRecycle documentIssueRecycle = manageDocumentIssueRecycleMapper.selectById(manageDocumentIssueRecycle.getId());
+        //鍒よ鏄惁鏄洖鏀�
+        if (ObjectUtils.isNotEmpty(manageDocumentIssueRecycle.getRecycleUser())){
+            /*鏂板8.3鐨勫彂鏀句笌鍥炴敹璁板綍*/
+            ManageRecordIssueRecycle manageRecordIssueRecycle = manageRecordIssueRecycleMapper.selectOne(Wrappers.<ManageRecordIssueRecycle>lambdaQuery()
+                    .eq(ManageRecordIssueRecycle::getDocumentCode, documentIssueRecycle.getDocumentCode())
+                    .eq(ManageRecordIssueRecycle::getDocumentName, documentIssueRecycle.getName())
+                    .eq(ManageRecordIssueRecycle::getDocumentVersion, documentIssueRecycle.getVersion())
+                    .eq(ManageRecordIssueRecycle::getReceiveUser, documentIssueRecycle.getIssueUser())
+                    .eq(ManageRecordIssueRecycle::getReceiveDate, documentIssueRecycle.getIssueDate()));
+            manageRecordIssueRecycle.setSignedUser(manageDocumentIssueRecycle.getRecycleUser());
+            manageRecordIssueRecycle.setSignedDate(manageDocumentIssueRecycle.getRecycleDate());
+            manageRecordIssueRecycleMapper.updateById(manageRecordIssueRecycle);
+        }
+        if (ObjectUtils.isNotEmpty(manageDocumentIssueRecycle.getFile())) {
+            if (ObjectUtils.isNotEmpty(documentIssueRecycle.getUrl())) {
+                // 鍒犻櫎鏃ф枃浠�
+                File oldFile = new File(wordUrl + "/" + documentIssueRecycle.getUrl());
+                oldFile.delete();
+            }
+            //涓婁紶鏂版枃浠�
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageDocumentIssueRecycle.getFile();
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+                manageDocumentIssueRecycle.setUrl(pathName);
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+        }
+        return manageDocumentIssueRecycleMapper.updateById(manageDocumentIssueRecycle);
+    }
+
+    @Override
+    public int delManageDocumentIssueRecycle(Long id) {
+        ManageDocumentIssueRecycle documentIssueRecycle = manageDocumentIssueRecycleMapper.selectById(id);
+        manageRecordIssueRecycleMapper.delete(Wrappers.<ManageRecordIssueRecycle>lambdaQuery()
+                .eq(ManageRecordIssueRecycle::getDocumentCode, documentIssueRecycle.getDocumentCode())
+                .eq(ManageRecordIssueRecycle::getDocumentName, documentIssueRecycle.getName())
+                .eq(ManageRecordIssueRecycle::getDocumentVersion, documentIssueRecycle.getVersion())
+                .eq(ManageRecordIssueRecycle::getReceiveUser, documentIssueRecycle.getIssueUser())
+                .eq(ManageRecordIssueRecycle::getReceiveDate, documentIssueRecycle.getIssueDate()));
+        return manageDocumentIssueRecycleMapper.deleteById(id);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java
new file mode 100644
index 0000000..247d1d9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java
@@ -0,0 +1,122 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.lang.UUID;
+import com.aspose.words.License;
+import com.aspose.words.SaveFormat;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.manage.mapper.ManageDocumentListMapper;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.service.ManageDocumentListService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-08 11:08:11
+ */
+@Service
+public class ManageDocumentListServiceImpl extends ServiceImpl<ManageDocumentListMapper, ManageDocumentList> implements ManageDocumentListService {
+
+    @Resource
+    private ManageDocumentListMapper manageDocumentListMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Override
+    public IPage<ManageDocumentList> pageManageDocumentList(Page page, ManageDocumentList manageDocumentList) {
+        return manageDocumentListMapper.pageManageDocumentList(page, QueryWrappers.queryWrappers(manageDocumentList));
+    }
+
+
+    @Override
+    public int uploadFile(Integer id, MultipartFile file) {
+        String urlString;
+        String pathName;
+        String path;
+        ManageDocumentList manageDocumentList = manageDocumentListMapper.selectById(id);
+        if (ObjectUtils.isNotEmpty(manageDocumentList.getUrl())){
+            // 鍒犻櫎鏃ф枃浠�
+            File oldFile = new File(wordUrl + "/" + manageDocumentList.getUrl());
+            oldFile.delete();
+        }
+        //涓婁紶鏂版枃浠�
+        path = wordUrl;
+        try {
+            File realpath = new File(path);
+            if (!realpath.exists()) {
+                realpath.mkdirs();
+            }
+            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+            urlString = realpath + "/" + pathName;
+            file.transferTo(new File(urlString));
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("闄勪欢涓婁紶閿欒");
+            return 0;
+        }
+        manageDocumentList.setUrl(pathName);
+        return manageDocumentListMapper.updateById(manageDocumentList);
+    }
+
+    @Override
+    public void importExcel(List<ManageDocumentList> list) {
+        if (CollectionUtil.isEmpty(list)) {
+            return;
+        }
+        list = list.stream().filter(manageDocumentList -> ObjectUtils.isNotEmpty(manageDocumentList.getName())).collect(Collectors.toList());
+        saveBatch(list);
+    }
+
+    public String wordToPdf(String wordPath, String pdfPath) {
+        FileOutputStream os = null;
+        try {
+            InputStream is = new ClassPathResource("/lib/license.xml").getInputStream();
+            License license = new License();
+            license.setLicense(is);
+            if (!license.getIsLicensed()) {
+                System.out.println("License楠岃瘉涓嶉�氳繃...");
+                return null;
+            }
+            //鐢熸垚涓�涓┖鐨凱DF鏂囦欢
+            File file = new File(pdfPath.replace(".pdf", ".pdf"));
+            os = new FileOutputStream(file);
+            //瑕佽浆鎹㈢殑word鏂囦欢
+            com.aspose.words.Document doc = new com.aspose.words.Document(wordPath);
+            doc.save(os, SaveFormat.PDF);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (os != null) {
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingParticipantsServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingParticipantsServiceImpl.java
new file mode 100644
index 0000000..b477e76
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingParticipantsServiceImpl.java
@@ -0,0 +1,42 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.ManageMeetingMapper;
+import com.ruoyi.manage.mapper.ManageMeetingParticipantsMapper;
+import com.ruoyi.manage.pojo.ManageMeeting;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import com.ruoyi.manage.service.ManageMeetingParticipantsService;
+import com.ruoyi.manage.vo.MeetingParticipantsDetailsVo;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:34:27
+ */
+@Service
+public class ManageMeetingParticipantsServiceImpl extends ServiceImpl<ManageMeetingParticipantsMapper, ManageMeetingParticipants> implements ManageMeetingParticipantsService {
+
+
+    @Resource
+    private ManageMeetingMapper manageMeetingMapper;
+
+    @Override
+    public MeetingParticipantsDetailsVo getParticipants(Integer id) {
+        ManageMeeting manageMeeting = manageMeetingMapper.selectById(id);
+        QueryWrapper<ManageMeetingParticipants> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("meeting_id",id);
+        List<ManageMeetingParticipants> participantsList = this.baseMapper.selectList(queryWrapper);
+        MeetingParticipantsDetailsVo vo = new MeetingParticipantsDetailsVo();
+        vo.setManageMeeting(manageMeeting);
+        vo.setParticipantsList(participantsList);
+        return vo;
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingServiceImpl.java
new file mode 100644
index 0000000..61857da
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingServiceImpl.java
@@ -0,0 +1,157 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.ManageMeetingDto;
+import com.ruoyi.manage.dto.ManageMeetingParticipantsDto;
+import com.ruoyi.manage.mapper.ManageMeetingMapper;
+import com.ruoyi.manage.mapper.ManageMeetingParticipantsMapper;
+import com.ruoyi.manage.pojo.ManageMeeting;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import com.ruoyi.manage.service.ManageMeetingService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-11 09:33:47
+ */
+@Service
+public class ManageMeetingServiceImpl extends ServiceImpl<ManageMeetingMapper, ManageMeeting> implements ManageMeetingService {
+
+
+    @Resource
+    private ManageMeetingParticipantsMapper manageMeetingParticipantsMapper;
+
+    @Autowired
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<ManageMeetingDto> page(Page page, String startTime, String endTime, String place) {
+        IPage<ManageMeetingDto> iPage = this.baseMapper.page(page, startTime, endTime, place);
+        for (ManageMeetingDto record : iPage.getRecords()) {
+            List<ManageMeetingParticipants> manageMeetingParticipants = manageMeetingParticipantsMapper.selectList(Wrappers.<ManageMeetingParticipants>lambdaQuery().eq(ManageMeetingParticipants::getMeetingId, record.getId()));
+            String collect = manageMeetingParticipants.stream().map(manageMeetingParticipants1 -> {
+                return manageMeetingParticipants1.getParticipants() + "";
+            }).collect(Collectors.joining(","));
+            record.setParticipant(collect);
+        }
+        return iPage;
+    }
+
+    @Override
+    public void addMeeting(ManageMeetingDto dto) {
+        this.baseMapper.insert(dto);
+
+        String[] ids = dto.getParticipant().split(",");
+        List<ManageMeetingParticipants> list = new ArrayList<>();
+        for (String id : ids) {
+            User user = userMapper.selectById(id);
+            ManageMeetingParticipants participants = new ManageMeetingParticipants();
+            participants.setMeetingId(dto.getId());
+            participants.setParticipants(Integer.parseInt(id));
+            participants.setDepartment(userMapper.selectUserDepartmentLimsName(user.getId()));
+            list.add(participants);
+        }
+        list.forEach(v -> manageMeetingParticipantsMapper.insert(v));
+    }
+
+    @Override
+    public int modifyMeeting(ManageMeetingDto manageMeetingDto) {
+        this.baseMapper.updateById(manageMeetingDto);
+        manageMeetingParticipantsMapper.delete(Wrappers.<ManageMeetingParticipants>lambdaQuery().eq(ManageMeetingParticipants::getMeetingId, manageMeetingDto.getId()));
+        String[] ids = manageMeetingDto.getParticipant().split(",");
+        List<ManageMeetingParticipants> list = new ArrayList<>();
+        for (String id : ids) {
+            User user = userMapper.selectById(id);
+            ManageMeetingParticipants participants = new ManageMeetingParticipants();
+            participants.setMeetingId(manageMeetingDto.getId());
+            participants.setParticipants(Integer.parseInt(id));
+            participants.setDepartment(userMapper.selectUserDepartmentLimsName(user.getId()));
+            list.add(participants);
+        }
+        list.forEach(v -> manageMeetingParticipantsMapper.insert(v));
+        return 0;
+    }
+
+    @Override
+    public void exportMeeting(Integer id, HttpServletResponse response) {
+        ManageMeeting meeting = baseMapper.selectById(id);
+        // 鏌ヨ鍙傚姞浜哄憳
+        List<ManageMeetingParticipants> manageMeetingParticipants = manageMeetingParticipantsMapper.selectList(Wrappers.<ManageMeetingParticipants>lambdaQuery().eq(ManageMeetingParticipants::getMeetingId, id));
+
+        List<ManageMeetingParticipants> list = manageMeetingParticipants.stream().map(manageMeetingParticipants1 -> {
+            manageMeetingParticipants1.setUserName(userMapper.selectById(manageMeetingParticipants1.getParticipants()).getName());
+            manageMeetingParticipants1.setDepartment(userMapper.selectUserDepartmentLimsName(manageMeetingParticipants1.getParticipants()));
+            return manageMeetingParticipants1;
+        }).collect(Collectors.toList());
+
+
+        // 鍒涘缓绌哄璞�
+        List<ManageMeetingParticipantsDto> participants = new ArrayList<>();
+
+        // 娣诲姞鍙傚姞浜哄憳
+        for (int i = 0; i < list.size(); i++) {
+            // 鍒ゆ柇鏈夋病鏈夊埌11琛�
+            if (i % 2 == 0) {
+                ManageMeetingParticipantsDto manageMeetingParticipantsDto = new ManageMeetingParticipantsDto();
+                manageMeetingParticipantsDto.setUserName1(list.get(i).getUserName());
+                manageMeetingParticipantsDto.setDepartment1(list.get(i).getDepartment());
+                participants.add(manageMeetingParticipantsDto);
+            } else {
+                participants.get((i-1)/2).setUserName2(list.get(i).getUserName());
+                participants.get((i-1)/2).setDepartment2(list.get(i).getDepartment());
+            }
+        }
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/review-meet.docx");
+
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+        Configure configure = Configure.builder()
+                .bind("meetingDetails", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("meeting", meeting);
+                    put("meetingTime", meeting.getMeetingTime().format(formatter));
+                    put("meetingDetails", participants);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "绠$悊璇勫浼氳璁板綍", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordAuditServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordAuditServiceImpl.java
new file mode 100644
index 0000000..4dfe938
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordAuditServiceImpl.java
@@ -0,0 +1,670 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordAuditMapper;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+import com.ruoyi.manage.service.ManageRecordAuditService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.util.*;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 10:29:18
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordAuditServiceImpl extends ServiceImpl<ManageRecordAuditMapper, ManageRecordAudit> implements ManageRecordAuditService {
+
+    @Resource
+    private ManageRecordAuditMapper manageRecordAuditMapper;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Override
+    public IPage<ManageRecordAudit> pageManageRecordAudit(Page page, ManageRecordAudit manageRecordAudit) {
+        IPage<ManageRecordAudit> manageRecordAuditIPage = manageRecordAuditMapper.pageManageRecordAudit(page, QueryWrappers.queryWrappers(manageRecordAudit));
+        for (ManageRecordAudit record : manageRecordAuditIPage.getRecords()) {
+            String limsName = userMapper.selectUserDepartmentLimsName(record.getCreateUser());
+            record.setCreateUserDepart(limsName);
+        }
+        return manageRecordAuditIPage;
+    }
+
+    @Override
+    public int addManageRecordAudit(ManageRecordAudit manageRecordAudit) {
+        if (ObjectUtils.isNotEmpty(manageRecordAudit.getFile())) {
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageRecordAudit.getFile();
+            //涓婁紶鏂版枃浠�
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+            manageRecordAudit.setAfterUrl(pathName);
+        }
+        manageRecordAudit.setCreateTime(LocalDate.now());
+        return manageRecordAuditMapper.insert(manageRecordAudit);
+    }
+
+    @Override
+    public int doManageRecordAudit(ManageRecordAudit manageRecordAudit) {
+        ManageRecordAudit recordAudit= manageRecordAuditMapper.selectById(manageRecordAudit.getId());
+        if (ObjectUtils.isNotEmpty(manageRecordAudit.getFile())) {
+            if (ObjectUtils.isNotEmpty(recordAudit.getAfterUrl())) {
+                // 鍒犻櫎鏃ф枃浠�
+                File oldFile = new File(wordUrl + "/" + recordAudit.getAfterUrl());
+                oldFile.delete();
+            }
+            //涓婁紶鏂版枃浠�
+            String urlString;
+            String pathName;
+            String path;
+            MultipartFile file = manageRecordAudit.getFile();
+            path = wordUrl;
+            try {
+                File realpath = new File(path);
+                if (!realpath.exists()) {
+                    realpath.mkdirs();
+                }
+                pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+                urlString = realpath + "/" + pathName;
+                file.transferTo(new File(urlString));
+                manageRecordAudit.setAfterUrl(pathName);
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.err.println("闄勪欢涓婁紶閿欒");
+                return 0;
+            }
+        }
+        return manageRecordAuditMapper.updateById(manageRecordAudit);
+    }
+
+    @Override
+    public int ratifyManageRecordAudit(Integer id) {
+        ManageRecordAudit recordAudit = manageRecordAuditMapper.selectById(id);
+        recordAudit.setRatifyUser(SecurityUtils.getUserId().intValue());
+        return manageRecordAuditMapper.updateById(recordAudit);
+    }
+
+    @Override
+    public String exportOutManageRecordAudit(ManageRecordAudit manageRecordAudit, HttpServletResponse response) {
+        List<ManageRecordAudit> manageRecordAuditList = manageRecordAuditMapper.pageManageRecordAudit(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordAudit)).getRecords();
+        for (ManageRecordAudit record : manageRecordAuditList) {
+            String limsName = userMapper.selectUserDepartmentLimsName(record.getCreateUser());
+            record.setCreateUserDepart(limsName);
+        }
+        //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/audit-deal.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+
+        List<Map<String, Object>> auditList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < manageRecordAuditList.size(); c++) {
+            //瓒呰繃15琛屾崲椤�
+            if (c % 15 == 0) {
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛ㄦ牸鐨勮鏁�
+                for (int i = 0; i < 17; i++) {
+                    RowRenderData rowRenderData = new RowRenderData();
+                    RowStyle rowStyle = new RowStyle();
+                    rowStyle.setHeight(40);
+                    rowRenderData.setRowStyle(rowStyle);
+                    List<CellRenderData> cells = new ArrayList<>();
+                    //琛ㄦ牸鐨勫垪鏁�
+                    for (int j = 0; j < 11; j++) {
+                        CellRenderData cellRenderData = new CellRenderData();
+                        CellStyle cellStyle = new CellStyle();
+                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                        cellRenderData.setCellStyle(cellStyle);
+                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        ParagraphStyle paragraphStyle = new ParagraphStyle();
+                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                        paragraphRenderData.setParagraphStyle(paragraphStyle);
+                        List<RenderData> renderData = new ArrayList<>();
+                        TextRenderData textRenderData = new TextRenderData();
+                        Style style = new Style();
+                        style.setFontFamily("瀹嬩綋");
+                        style.setColor("000000");
+                        textRenderData.setStyle(style);
+                        if (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.鈭�1");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number鈭�2");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("绔犺妭鍙稝Chapter number鈭�3");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("椤电爜@Page number鈭�4");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("淇娆℃暟@Number of revisions鈭�5");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5 || j == 6) {
+                                //绗叚鍒�
+                                textRenderData.setText("鐗堟湰鍙� Version number鈭�6");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                //绗竷鍒�
+                                textRenderData.setText("淇鍐呭@Revision of contents鈭�7");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 8) {
+                                //绗叓鍒�
+                                textRenderData.setText("淇浜篅Revised鈭�8");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 9 ) {
+                                //绗節鍒�
+                                textRenderData.setText("鎵瑰噯浜篅Approver鈭�9");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗崄鍒�
+                                textRenderData.setText("鏃ユ湡@Date鈭�10");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else if (i == 1) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.鈭�1");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number鈭�2");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("绔犺妭鍙稝Chapter number鈭�3");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("椤电爜@Page number鈭�4");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("淇娆℃暟@Number of revisions鈭�5");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5 ) {
+                                //绗叚鍒�
+                                textRenderData.setText("淇敼鍓岪Before modification");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                //绗竷鍒�
+                                textRenderData.setText("淇敼鍚嶡After modification");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else if (j == 7) {
+                                //绗竷鍒�
+                                textRenderData.setText("淇鍐呭@Revision of contents鈭�7");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 8) {
+                                //绗叓鍒�
+                                textRenderData.setText("淇浜篅Revised鈭�8");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 9 ) {
+                                //绗節鍒�
+                                textRenderData.setText("鎵瑰噯浜篅Approver鈭�9");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗崄鍒�
+                                textRenderData.setText("鏃ユ湡@Date鈭�10");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else {
+                            //鍏朵粬琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                try {
+                                    String insReportCode = manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getDocumentCode();
+                                    textRenderData.setText(index + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                index++;
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getDocumentCode());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getCapter());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getPages());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getNumber()+"");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getBeforeVersion());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getAfterVersion());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getAlterThing());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 8) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getAlterUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }else if (j == 9) {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getRatifyUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else {
+                                try {
+                                    textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getDate()+"");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                    }
+                    rowRenderData.setCells(cells);
+                    if (rowRenderData.getCells().size() != 0) {
+                        rows.add(rowRenderData);
+                    }
+                }
+                TableRenderData tableRenderData = new TableRenderData();
+                tableRenderData.setRows(rows);
+                int countSize = tableRenderData.getRows().get(0).getCells().size();
+                for (RowRenderData row : tableRenderData.getRows()) {
+                    if (row.getCells().size() != countSize) {
+                        throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                    }
+                }
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(14);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                Map<String, Object> table = new HashMap<>();
+                table.put("audit", tableRenderData);
+                table.put("index1", index1);
+                auditList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("size", finalIndex);
+                    put("cancelList", auditList);
+                }});
+        String name = UUID.randomUUID() + "_鏂囦欢淇琛�" + ".docx";
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        String path = wordUrl + "/" + name;
+        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+        try {
+            ZipSecureFile.setMinInflateRatio(0.0001);
+            FileInputStream stream = new FileInputStream(path);
+            XWPFDocument document = new XWPFDocument(stream);
+            List<XWPFTable> xwpfTables = document.getTables();
+            for (int i = 0; i < xwpfTables.size(); i++) {
+                Set<String> set1 = new HashSet<>();
+                Map<String, Map<String, Integer>> maps = new HashMap<>();
+                for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+                            String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+                            if (set1.add(split[1])) {
+                                Map<String, Integer> map = new HashMap<>();
+                                map.put("sr", j);
+                                map.put("sc", k);
+                                map.put("er", j + 0);
+                                map.put("ec", k + 0);
+                                maps.put(split[1], map);
+                            } else {
+                                Map<String, Integer> map1 = maps.get(split[1]);
+                                if (j == map1.get("sr")) {
+                                    map1.put("ec", map1.get("ec") + 1);
+                                } else if (k == map1.get("sc")) {
+                                    map1.put("er", map1.get("er") + 1);
+                                }
+                            }
+                            String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+                // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+                List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+                entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+                // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+                List<String> list = new ArrayList<>();
+                for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+                    list.add(entry.getKey());
+                }
+                for (int a = list.size() - 1; a >= 0; a--) {
+                    Map<String, Integer> v = maps.get(list.get(a));
+                    for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+                        if (v.get("ec") > v.get("sc")) {
+                            try {
+                                mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+//                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+                            } catch (Exception e) {
+                            }
+                        }
+                    }
+                    if (v.get("er") > v.get("sr")) {
+                        try {
+                            mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+//                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+                        } catch (Exception e) {
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(path);
+            document.write(fileOutputStream);
+            fileOutputStream.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 0; i < xwpfTables1.size(); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return name;
+    }
+
+    // 姘村钩鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+        for (int i = fromCol; i <= toCol; i++) {
+            if (i == fromCol) {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+
+    // 鍨傜洿鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+        for (int i = fromRow; i <= toRow; i++) {
+            if (i == fromRow) {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java
new file mode 100644
index 0000000..fa8eb5f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java
@@ -0,0 +1,477 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordCancelMapper;
+import com.ruoyi.manage.pojo.ManageRecordCancel;
+import com.ruoyi.manage.service.ManageRecordCancelService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 01:27:22
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordCancelServiceImpl extends ServiceImpl<ManageRecordCancelMapper, ManageRecordCancel> implements ManageRecordCancelService {
+
+    @Resource
+    private ManageRecordCancelMapper manageRecordCancelMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<ManageRecordCancel> pageManageRecordCancel(Page page, ManageRecordCancel manageRecordCancel) {
+        return manageRecordCancelMapper.pageManageRecordCancel(page, QueryWrappers.queryWrappers(manageRecordCancel));
+    }
+
+    @Override
+    public int ratifyManageRecordCancel(Integer id, String ratifyState) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        ManageRecordCancel manageRecordCancel = manageRecordCancelMapper.selectById(id);
+        manageRecordCancel.setRatifyUser(userId);
+        manageRecordCancel.setRatifyTime(LocalDate.now());
+        manageRecordCancel.setRatifyState(ratifyState);
+        return manageRecordCancelMapper.updateById(manageRecordCancel);
+    }
+
+    @Override
+    public String exportOutManageRecordCancel(ManageRecordCancel manageRecordCancel, HttpServletResponse response) {
+        List<ManageRecordCancel> manageRecordCancelList = manageRecordCancelMapper.pageManageRecordCancel(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordCancel)).getRecords();
+        //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/cancel-deal.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+
+        List<Map<String, Object>> cancelList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < manageRecordCancelList.size(); c++) {
+            //瓒呰繃15琛屾崲椤�
+            if (c % 15 == 0) {
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛ㄦ牸鐨勮鏁�
+                for (int i = 0; i < 16; i++) {
+                    RowRenderData rowRenderData = new RowRenderData();
+                    RowStyle rowStyle = new RowStyle();
+                    rowStyle.setHeight(40);
+                    rowRenderData.setRowStyle(rowStyle);
+                    List<CellRenderData> cells = new ArrayList<>();
+                    //琛ㄦ牸鐨勫垪鏁�
+                    for (int j = 0; j < 10; j++) {
+                        CellRenderData cellRenderData = new CellRenderData();
+                        CellStyle cellStyle = new CellStyle();
+                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                        cellRenderData.setCellStyle(cellStyle);
+                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        ParagraphStyle paragraphStyle = new ParagraphStyle();
+                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                        paragraphRenderData.setParagraphStyle(paragraphStyle);
+                        List<RenderData> renderData = new ArrayList<>();
+                        TextRenderData textRenderData = new TextRenderData();
+                        Style style = new Style();
+                        style.setFontFamily("瀹嬩綋");
+                        style.setColor("000000");
+                        textRenderData.setStyle(style);
+                        if (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("鏂囦欢(璁板綍)鍚嶇О@File (record) name");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("鏁伴噺@Quantity");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("閿�姣佸師鍥燖Reason for destruction");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒�
+                                textRenderData.setText("鐢宠浜篅Applicant");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                //绗竷鍒�
+                                textRenderData.setText("鏃ユ湡@Date");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                //绗叓鍒�
+                                textRenderData.setText("鎵瑰噯@Approve");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 8 ) {
+                                //绗節鍒�
+                                textRenderData.setText("鏃ユ湡@Date");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗崄鍒�
+                                textRenderData.setText("澶囨敞@Remark");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else {
+                            //鍏朵粬琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                try {
+                                    String insReportCode = manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getDocumentCode();
+                                    textRenderData.setText(index + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                index++;
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getDocumentCode());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getDocumentName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getQty()+"");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getReason());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getCreateUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getCreateTime()+"");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getRatifyUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 8) {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getRatifyTime()+"");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }else {
+                                try {
+                                    textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getRemark());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                    }
+                    rowRenderData.setCells(cells);
+                    if (rowRenderData.getCells().size() != 0) {
+                        rows.add(rowRenderData);
+                    }
+                }
+                TableRenderData tableRenderData = new TableRenderData();
+                tableRenderData.setRows(rows);
+                int countSize = tableRenderData.getRows().get(0).getCells().size();
+                for (RowRenderData row : tableRenderData.getRows()) {
+                    if (row.getCells().size() != countSize) {
+                        throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                    }
+                }
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(14);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                Map<String, Object> table = new HashMap<>();
+                table.put("cancel", tableRenderData);
+                table.put("index1", index1);
+                cancelList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("size", finalIndex);
+                    put("cancelList", cancelList);
+                }});
+        String name = UUID.randomUUID() + "_鏂囦欢閿�姣佺敵璇疯〃" + ".docx";
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        String path = wordUrl + "/" + name;
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 0; i < xwpfTables1.size(); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return name;
+    }
+
+    @Override
+    public int exportInManageRecordCancel(MultipartFile file) {
+        List<ManageRecordCancel> manageRecordCancelList = new ArrayList<>();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        try {
+            InputStream inputStream = file.getInputStream();
+            XWPFDocument document = new XWPFDocument(inputStream);
+            List<XWPFTable> tables = document.getTables();
+            if (tables.isEmpty()) {
+                throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+            }
+
+            for (XWPFTable table : tables) {
+                List<XWPFTableRow> rows = table.getRows();
+                if (rows.size() <= 1) {
+                    throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+                }
+                for (int i = 1; i < rows.size(); i++) { // 浠庣浜岃寮�濮嬶紝璺宠繃琛ㄥご
+                    XWPFTableRow row = rows.get(i);
+                    if (row.getTableCells().size() != 10) {
+                        System.out.println("琛� " + (i + 1) + " 鐨勫垪鏁颁笉鍖归厤锛岃烦杩囪琛�");
+                        continue;
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+                        ManageRecordCancel manageRecordCancel = new ManageRecordCancel();
+                        manageRecordCancel.setDocumentCode(row.getCell(1).getText());
+                        manageRecordCancel.setDocumentName(row.getCell(2).getText());
+                        manageRecordCancel.setQty(Integer.valueOf(row.getCell(3).getText()));
+                        manageRecordCancel.setReason(row.getCell(4).getText());
+                        try {
+                            manageRecordCancel.setCreateUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                                    .eq(User::getName, row.getCell(5).getText())).getId());
+                        } catch (Exception e) {
+                            manageRecordCancel.setCreateUser(null);
+                        }
+                        try {
+                            manageRecordCancel.setRatifyUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                                    .eq(User::getName, row.getCell(7).getText())).getId());
+                        } catch (Exception e) {
+                            manageRecordCancel.setRatifyUser(null);
+                        }
+                        try {
+                            manageRecordCancel.setCreateTime(LocalDate.parse(row.getCell(6).getText(), dateTimeFormatter));
+                        } catch (Exception e) {
+                            manageRecordCancel.setCreateTime(null);
+                        }
+                        try {
+                            manageRecordCancel.setRatifyTime(LocalDate.parse(row.getCell(8).getText(), dateTimeFormatter));
+                        } catch (Exception e) {
+                            manageRecordCancel.setRatifyTime(null);
+                        }
+                        manageRecordCancel.setRemark(row.getCell(9).getText());
+                        ManageRecordCancel cancel = manageRecordCancelMapper.selectOne(Wrappers.<ManageRecordCancel>lambdaQuery()
+                                .eq(ManageRecordCancel::getDocumentCode, manageRecordCancel.getDocumentCode())
+                                .eq(ManageRecordCancel::getDocumentName, manageRecordCancel.getDocumentName()));
+                        if (ObjectUtils.isNotEmpty(cancel)) {
+                            manageRecordCancel.setId(cancel.getId());
+                        }
+                        manageRecordCancelList.add(manageRecordCancel);
+                    }
+                }
+            }
+            saveOrUpdateBatch(manageRecordCancelList);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCheckServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCheckServiceImpl.java
new file mode 100644
index 0000000..92ca68f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCheckServiceImpl.java
@@ -0,0 +1,467 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.service.ManageRecordCheckService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍) 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 02:31:36
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordCheckServiceImpl extends ServiceImpl<ManageRecordCheckMapper, ManageRecordCheck> implements ManageRecordCheckService {
+
+    @Resource
+    private ManageRecordCheckMapper manageRecordCheckMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<ManageRecordCheck> pageManageRecordCheck(Page page, ManageRecordCheck manageRecordCheck) {
+        return manageRecordCheckMapper.pageManageRecordCheck(page, QueryWrappers.queryWrappers(manageRecordCheck));
+    }
+
+    @Override
+    public int checkManageRecordCheck(Integer id, String checkState) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        ManageRecordCheck manageRecordCheck = manageRecordCheckMapper.selectById(id);
+        manageRecordCheck.setCheckState(checkState);
+        manageRecordCheck.setCheckUser(userId);
+        return manageRecordCheckMapper.updateById(manageRecordCheck);
+    }
+
+    @Override
+    public int ratifyManageRecordCheck(Integer id, String ratifyState) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        ManageRecordCheck manageRecordCheck = manageRecordCheckMapper.selectById(id);
+        manageRecordCheck.setRatifyState(ratifyState);
+        manageRecordCheck.setRatifyUser(userId);
+        return manageRecordCheckMapper.updateById(manageRecordCheck);
+    }
+
+    @Override
+    public String exportOutManageRecordCheck(ManageRecordCheck manageRecordCheck, HttpServletResponse response) {
+        List<ManageRecordCheck> manageRecordCheckList = manageRecordCheckMapper.pageManageRecordCheck(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordCheck)).getRecords();
+        //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/check-deal.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+
+        List<Map<String, Object>> checkList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < manageRecordCheckList.size(); c++) {
+            //瓒呰繃20琛屾崲椤�
+            if (c % 20 == 0) {
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛ㄦ牸鐨勮鏁�
+                for (int i = 0; i < 21; i++) {
+                    RowRenderData rowRenderData = new RowRenderData();
+                    RowStyle rowStyle = new RowStyle();
+                    rowStyle.setHeight(40);
+                    rowRenderData.setRowStyle(rowStyle);
+                    List<CellRenderData> cells = new ArrayList<>();
+                    //琛ㄦ牸鐨勫垪鏁�
+                    for (int j = 0; j < 9; j++) {
+                        CellRenderData cellRenderData = new CellRenderData();
+                        CellStyle cellStyle = new CellStyle();
+                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                        cellRenderData.setCellStyle(cellStyle);
+                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        ParagraphStyle paragraphStyle = new ParagraphStyle();
+                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                        paragraphRenderData.setParagraphStyle(paragraphStyle);
+                        List<RenderData> renderData = new ArrayList<>();
+                        TextRenderData textRenderData = new TextRenderData();
+                        Style style = new Style();
+                        style.setFontFamily("瀹嬩綋");
+                        style.setColor("000000");
+                        textRenderData.setStyle(style);
+                        if (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒�
+                                textRenderData.setText("鏂囦欢鍚嶇О@File name");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("鐗�/娆Edition/time");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("缂栧埗@Editor");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒�
+                                textRenderData.setText("瀹℃牳@Audit");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                //绗竷鍒�
+                                textRenderData.setText("鎵瑰噯@Approve");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                //绗叓鍒�
+                                textRenderData.setText("鎵瑰噯鏃ユ湡@Date of approve");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗節鍒�
+                                textRenderData.setText("澶囨敞@Remark");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        } else {
+                            //鍏朵粬琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                try {
+                                    String insReportCode = manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getDocumentName();
+                                    textRenderData.setText(index + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                index++;
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                try {
+                                    textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getDocumentName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                try {
+                                    textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getDocumentCode());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                try {
+                                    textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getDocumentVersion());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                try {
+                                    textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getWriteUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                try {
+                                    textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getCheckUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                try {
+                                    textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getRatifyUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                try {
+                                    textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getRatifyDate() + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                try {
+                                    textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getRemark());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                    }
+                    rowRenderData.setCells(cells);
+                    if (rowRenderData.getCells().size() != 0) {
+                        rows.add(rowRenderData);
+                    }
+                }
+                TableRenderData tableRenderData = new TableRenderData();
+                tableRenderData.setRows(rows);
+                int countSize = tableRenderData.getRows().get(0).getCells().size();
+                for (RowRenderData row : tableRenderData.getRows()) {
+                    if (row.getCells().size() != countSize) {
+                        throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                    }
+                }
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(14);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                Map<String, Object> table = new HashMap<>();
+                table.put("check", tableRenderData);
+                table.put("index1", index1);
+                checkList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("size", finalIndex);
+                    put("checkList", checkList);
+                }});
+        String name = UUID.randomUUID() + "_鏂囦欢瀹℃壒璁板綍" + ".docx";
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        String path = wordUrl + "/" + name;
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 0; i < xwpfTables1.size(); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return name;
+    }
+
+    @Override
+    public int exportInManageRecordCheck(MultipartFile file) {
+        List<ManageRecordCheck> manageRecordCheckList = new ArrayList<>();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        try {
+            InputStream inputStream = file.getInputStream();
+            XWPFDocument document = new XWPFDocument(inputStream);
+            List<XWPFTable> tables = document.getTables();
+            if (tables.isEmpty()) {
+                throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+            }
+
+            for (XWPFTable table : tables) {
+                List<XWPFTableRow> rows = table.getRows();
+                if (rows.size() <= 1) {
+                    throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+                }
+                for (int i = 1; i < rows.size(); i++) { // 浠庣浜岃寮�濮嬶紝璺宠繃琛ㄥご
+                    XWPFTableRow row = rows.get(i);
+                    if (row.getTableCells().size() != 9) {
+                        System.out.println("琛� " + (i + 1) + " 鐨勫垪鏁颁笉鍖归厤锛岃烦杩囪琛�");
+                        continue;
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+                        ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+                        manageRecordCheck.setDocumentName(row.getCell(1).getText());
+                        manageRecordCheck.setDocumentCode(row.getCell(2).getText());
+                        manageRecordCheck.setDocumentVersion(row.getCell(3).getText());
+                        try {
+                            manageRecordCheck.setWriteUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                                    .eq(User::getName, row.getCell(4).getText())).getId());
+                        } catch (Exception e) {
+                            manageRecordCheck.setWriteUser(null);
+                        }
+                        try {
+                            manageRecordCheck.setCheckUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                                    .eq(User::getName, row.getCell(5).getText())).getId());
+                        } catch (Exception e) {
+                            manageRecordCheck.setCheckUser(null);
+                        }
+                        try {
+                            manageRecordCheck.setRatifyUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                                    .eq(User::getName, row.getCell(6).getText())).getId());
+                        } catch (Exception e) {
+                            manageRecordCheck.setRatifyUser(null);
+                        }
+                        try {
+                            manageRecordCheck.setRatifyDate(LocalDate.parse(row.getCell(7).getText(), dateTimeFormatter));
+                        } catch (Exception e) {
+                            manageRecordCheck.setRatifyDate(null);
+                        }
+
+                        manageRecordCheck.setRemark(row.getCell(8).getText());
+                        ManageRecordCheck check = manageRecordCheckMapper.selectOne(Wrappers.<ManageRecordCheck>lambdaQuery()
+                                .eq(ManageRecordCheck::getDocumentCode, manageRecordCheck.getDocumentCode())
+                                .eq(ManageRecordCheck::getDocumentName, manageRecordCheck.getDocumentName())
+                                .eq(ManageRecordCheck::getDocumentVersion, manageRecordCheck.getDocumentVersion()));
+                        if (ObjectUtils.isNotEmpty(check)) {
+                            manageRecordCheck.setId(check.getId());
+                        }
+                        manageRecordCheckList.add(manageRecordCheck);
+                    }
+                }
+            }
+            saveOrUpdateBatch(manageRecordCheckList);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsServiceImpl.java
new file mode 100644
index 0000000..99f949b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsServiceImpl.java
@@ -0,0 +1,524 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordIntervalsMapper;
+import com.ruoyi.manage.mapper.ManageRecordIntervalsTotalMapper;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import com.ruoyi.manage.service.ManageRecordIntervalsService;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 10:54:31
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordIntervalsServiceImpl extends ServiceImpl<ManageRecordIntervalsMapper, ManageRecordIntervals> implements ManageRecordIntervalsService {
+
+    @Resource
+    private ManageRecordIntervalsMapper manageRecordIntervalsMapper;
+
+    @Resource
+    private ManageRecordIntervalsTotalMapper manageRecordIntervalsTotalMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Override
+    public IPage<ManageRecordIntervals> pageManageRecordIntervals(Page page, ManageRecordIntervals manageRecordIntervals) {
+        return manageRecordIntervalsMapper.pageManageRecordIntervals(page, QueryWrappers.queryWrappers(manageRecordIntervals));
+    }
+
+    @Override
+    public String exportOutManageRecordIntervals(ManageRecordIntervals manageRecordIntervals, HttpServletResponse response) {
+        List<ManageRecordIntervals> manageRecordIntervalsList = manageRecordIntervalsMapper.pageManageRecordIntervals(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordIntervals)).getRecords();
+        //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/intervals-deal.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+
+        List<Map<String, Object>> intervalsList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < manageRecordIntervalsList.size(); c++) {
+            //瓒呰繃15琛屾崲椤�
+            if (c % 15 == 0) {
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛ㄦ牸鐨勮鏁�
+                for (int i = 0; i < 17; i++) {
+                    RowRenderData rowRenderData = new RowRenderData();
+                    RowStyle rowStyle = new RowStyle();
+                    rowStyle.setHeight(40);
+                    rowRenderData.setRowStyle(rowStyle);
+                    List<CellRenderData> cells = new ArrayList<>();
+                    //琛ㄦ牸鐨勫垪鏁�
+                    for (int j = 0; j < 7; j++) {
+                        CellRenderData cellRenderData = new CellRenderData();
+                        CellStyle cellStyle = new CellStyle();
+                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                        cellRenderData.setCellStyle(cellStyle);
+                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        ParagraphStyle paragraphStyle = new ParagraphStyle();
+                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                        paragraphRenderData.setParagraphStyle(paragraphStyle);
+                        List<RenderData> renderData = new ArrayList<>();
+                        TextRenderData textRenderData = new TextRenderData();
+                        Style style = new Style();
+                        style.setFontFamily("瀹嬩綋");
+                        style.setColor("000000");
+                        textRenderData.setStyle(style);
+                        if (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒�
+                                textRenderData.setText("鏂囦欢鍚嶇О@File name");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("鐗堟湰鍙稝Version number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("淇鍙稝Revision number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒�
+                                textRenderData.setText("閫傚疁鎬Suitability");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗竷鍒�
+                                textRenderData.setText("澶囨敞@Remark");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else if (i == 16) {
+                            //鏈�鍚庝竴琛�
+                            textRenderData.setText("娉細閫傚疁鎬т竴鏍忔墦鈥溾垰鈥濊〃姝ゆ枃浠堕�傚疁锛屸�溍椻�濊〃绀轰笉閫傚疁锛屾枃浠堕渶淇鎴栦綔搴熴�侤Note:The鈥溾垰鈥漷able in the suitability column is suitable for this document, the鈥溍椻�漷able is not suitable,and the document needs to berevised or invalidated @瀹℃煡鏃ユ湡锛� @Review Date:@鍙傚姞瀹℃煡浜哄憳绛惧悕锛欯Signatures of the reviewers particip ating in the review:鈭�1");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        }
+                        else {
+                            //鍏朵粬琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                try {
+                                    String insReportCode = manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentCode();
+                                    textRenderData.setText(index + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                index++;
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentCode());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentVersion());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i -1) + (index1 - 1) * 15).getRevision());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getSuitability());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getRemark() );
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                    }
+                    rowRenderData.setCells(cells);
+                    if (rowRenderData.getCells().size() != 0) {
+                        rows.add(rowRenderData);
+                    }
+                }
+                TableRenderData tableRenderData = new TableRenderData();
+                tableRenderData.setRows(rows);
+                int countSize = tableRenderData.getRows().get(0).getCells().size();
+                for (RowRenderData row : tableRenderData.getRows()) {
+                    if (row.getCells().size() != countSize) {
+                        throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                    }
+                }
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(14);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                Map<String, Object> table = new HashMap<>();
+                table.put("intervals", tableRenderData);
+                table.put("index1", index1);
+                intervalsList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("size", finalIndex);
+                    put("intervalsList", intervalsList);
+                }});
+        String name = UUID.randomUUID() + "_鏂囦欢瀹氭湡瀹℃煡璁板綍琛�" + ".docx";
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        String path = wordUrl + "/" + name;
+        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+        try {
+            ZipSecureFile.setMinInflateRatio(0.0001);
+            FileInputStream stream = new FileInputStream(path);
+            XWPFDocument document = new XWPFDocument(stream);
+            List<XWPFTable> xwpfTables = document.getTables();
+            for (int i = 0; i < xwpfTables.size(); i++) {
+                Set<String> set1 = new HashSet<>();
+                Map<String, Map<String, Integer>> maps = new HashMap<>();
+                for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+                            String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+                            if (set1.add(split[1])) {
+                                Map<String, Integer> map = new HashMap<>();
+                                map.put("sr", j);
+                                map.put("sc", k);
+                                map.put("er", j + 0);
+                                map.put("ec", k + 0);
+                                maps.put(split[1], map);
+                            } else {
+                                Map<String, Integer> map1 = maps.get(split[1]);
+                                if (j == map1.get("sr")) {
+                                    map1.put("ec", map1.get("ec") + 1);
+                                } else if (k == map1.get("sc")) {
+                                    map1.put("er", map1.get("er") + 1);
+                                }
+                            }
+                            String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+                // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+                List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+                entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+                // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+                List<String> list = new ArrayList<>();
+                for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+                    list.add(entry.getKey());
+                }
+                for (int a = list.size() - 1; a >= 0; a--) {
+                    Map<String, Integer> v = maps.get(list.get(a));
+                    for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+                        if (v.get("ec") > v.get("sc")) {
+                            try {
+                                mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+//                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+                            } catch (Exception e) {
+                            }
+                        }
+                    }
+                    if (v.get("er") > v.get("sr")) {
+                        try {
+                            mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+//                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+                        } catch (Exception e) {
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(path);
+            document.write(fileOutputStream);
+            fileOutputStream.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 0; i < xwpfTables1.size(); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return name;
+    }
+
+    @Override
+    public int exportInManageRecordIntervals(MultipartFile file) {
+        List<ManageRecordIntervals> manageRecordIntervalsList = new ArrayList<>();
+
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        //鑾峰彇褰撳墠骞翠唤
+        LocalDate currentDate = LocalDate.now();
+        // 瀹氫箟鏃ユ湡鏍煎紡
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+        // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+        String currentMonth = currentDate.format(formatter);
+        ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectOne(Wrappers.<ManageRecordIntervalsTotal>lambdaQuery().eq(ManageRecordIntervalsTotal::getYear, currentMonth));
+        try {
+            InputStream inputStream = file.getInputStream();
+            XWPFDocument document = new XWPFDocument(inputStream);
+            List<XWPFTable> tables = document.getTables();
+            if (tables.isEmpty()) {
+                throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+            }
+            for (XWPFTable table : tables) {
+                List<XWPFTableRow> rows = table.getRows();
+                if (rows.size() <= 1) {
+                    throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+                }
+                for (int i = 1; i < rows.size(); i++) { // 浠庣浜岃寮�濮嬶紝璺宠繃琛ㄥご
+                    XWPFTableRow row = rows.get(i);
+                    if (row.getTableCells().size() != 7) {
+                        System.out.println("琛� " + (i + 1) + " 鐨勫垪鏁颁笉鍖归厤锛岃烦杩囪琛�");
+                        continue;
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+                        ManageRecordIntervals manageRecordIntervals = new ManageRecordIntervals();
+                        manageRecordIntervals.setDocumentName(row.getCell(1).getText());
+                        manageRecordIntervals.setDocumentCode(row.getCell(2).getText());
+                        manageRecordIntervals.setDocumentVersion(row.getCell(3).getText());
+                        manageRecordIntervals.setRevision(row.getCell(4).getText());
+                        manageRecordIntervals.setSuitability(row.getCell(5).getText());
+                        manageRecordIntervals.setRemark(row.getCell(6).getText());
+                        manageRecordIntervals.setRecordIntervalsTotalId(manageRecordIntervalsTotal.getId());
+                        ManageRecordIntervals intervals = manageRecordIntervalsMapper.selectOne(Wrappers.<ManageRecordIntervals>lambdaQuery()
+                                .eq(ManageRecordIntervals::getDocumentCode, manageRecordIntervals.getDocumentCode())
+                                .eq(ManageRecordIntervals::getDocumentName, manageRecordIntervals.getDocumentName())
+                                .eq(ManageRecordIntervals::getRecordIntervalsTotalId, manageRecordIntervalsTotal.getId())
+                                .eq(ManageRecordIntervals::getDocumentVersion, manageRecordIntervals.getDocumentVersion()));
+                        if (ObjectUtils.isNotEmpty(intervals)) {
+                            manageRecordIntervals.setId(intervals.getId());
+                        }
+                        manageRecordIntervalsList.add(manageRecordIntervals);
+                    }
+                }
+            }
+            saveOrUpdateBatch(manageRecordIntervalsList);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+
+    @Override
+    public int addManageRecordIntervals(ManageRecordIntervals manageRecordIntervals) {
+        //鑾峰彇褰撳墠骞翠唤
+        LocalDate currentDate = LocalDate.now();
+        // 瀹氫箟鏃ユ湡鏍煎紡
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+        // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+        String currentMonth = currentDate.format(formatter);
+        ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectOne(Wrappers.<ManageRecordIntervalsTotal>lambdaQuery().eq(ManageRecordIntervalsTotal::getYear, currentMonth));
+        manageRecordIntervals.setRecordIntervalsTotalId(manageRecordIntervalsTotal.getId());
+        manageRecordIntervalsMapper.insert(manageRecordIntervals);
+        manageRecordIntervalsTotal.setTotalNum(1 + manageRecordIntervalsTotal.getTotalNum());
+        return manageRecordIntervalsTotalMapper.updateById(manageRecordIntervalsTotal);
+    }
+
+    @Override
+    public int delManageRecordIntervals(Integer id) {
+        ManageRecordIntervals manageRecordIntervals = manageRecordIntervalsMapper.selectById(id);
+        manageRecordIntervalsMapper.deleteById(id);
+        ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectById(manageRecordIntervals.getRecordIntervalsTotalId());
+        manageRecordIntervalsTotal.setTotalNum(manageRecordIntervalsTotal.getTotalNum() - 1);
+        return manageRecordIntervalsTotalMapper.updateById(manageRecordIntervalsTotal);
+    }
+
+    // 姘村钩鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+        for (int i = fromCol; i <= toCol; i++) {
+            if (i == fromCol) {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+
+    // 鍨傜洿鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+        for (int i = fromRow; i <= toRow; i++) {
+            if (i == fromRow) {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsTotalServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsTotalServiceImpl.java
new file mode 100644
index 0000000..d45ed07
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsTotalServiceImpl.java
@@ -0,0 +1,499 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordIntervalsMapper;
+import com.ruoyi.manage.mapper.ManageRecordIntervalsTotalMapper;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import com.ruoyi.manage.service.ManageRecordIntervalsTotalService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 01:12:11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordIntervalsTotalServiceImpl extends ServiceImpl<ManageRecordIntervalsTotalMapper, ManageRecordIntervalsTotal> implements ManageRecordIntervalsTotalService {
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Resource
+    private ManageRecordIntervalsTotalMapper manageRecordIntervalsTotalMapper;
+
+    @Resource
+    private ManageRecordIntervalsMapper manageRecordIntervalsMapper;
+
+    @Override
+    public IPage<ManageRecordIntervalsTotal> pageManageRecordIntervalsTotal(Page page, ManageRecordIntervalsTotal manageRecordIntervalsTotal) {
+        return manageRecordIntervalsTotalMapper.pageManageRecordIntervalsTotal(page, QueryWrappers.queryWrappers(manageRecordIntervalsTotal));
+    }
+
+    @Override
+    public int submitManageRecordIntervalsTotal(Integer id) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒板~琛ㄤ汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectById(id);
+        manageRecordIntervalsTotal.setSubmitUser(userId);
+        manageRecordIntervalsTotal.setSubmitDate(LocalDate.now());
+        manageRecordIntervalsTotal.setSubmitUrl(user.getSignatureUrl());
+        //鐢熸垚鏍峰搧澶勭悊鐢宠琛ㄥ苟灏嗗~琛ㄤ汉鐨勭數瀛愮鍚嶅嵃涓�
+        manageRecordIntervalsTotal.setUrl(recordTotaldeal(id,user.getSignatureUrl()));
+        return manageRecordIntervalsTotalMapper.updateById(manageRecordIntervalsTotal);
+    }
+
+    @Override
+    public int ratifyManageRecordIntervalsTotal(Integer id, String ratifyState) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒版壒鍑嗕汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectById(id);
+        manageRecordIntervalsTotal.setRatifyUser(userId);
+        manageRecordIntervalsTotal.setRatifyState(ratifyState);
+        manageRecordIntervalsTotal.setRatifyDate(LocalDate.now());
+        manageRecordIntervalsTotal.setRatifyUrl(user.getSignatureUrl());
+        //灏嗘壒鍑嗕汉鐨勭鍚嶅嵃涓�
+        String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+        wordInsertUrl(new HashMap<String, Object>() {{
+            put("ratifyDateEn", monthNames[LocalDate.now().getMonthValue() - 1] + " " + LocalDate.now().getDayOfMonth() + ", " + LocalDate.now().getYear());
+            put("ratifyDate", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+            put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + user.getSignatureUrl()));
+        }},  wordUrl+"/"+manageRecordIntervalsTotal.getUrl());
+        return manageRecordIntervalsTotalMapper.updateById(manageRecordIntervalsTotal);
+    }
+
+    public int wordInsertUrl(Map<String, Object> map, String url) {
+        XWPFTemplate template = XWPFTemplate.compile(url).render(map);
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(url)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return 1;
+    }
+
+    private String recordTotaldeal(Integer id,String signatureUrl){
+        List<ManageRecordIntervals> manageRecordIntervalsList = manageRecordIntervalsMapper.selectList(Wrappers.<ManageRecordIntervals>lambdaQuery().eq(ManageRecordIntervals::getRecordIntervalsTotalId,id));
+        String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+        //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/intervals-deal.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+
+        List<Map<String, Object>> intervalsList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < manageRecordIntervalsList.size(); c++) {
+            //瓒呰繃15琛屾崲椤�
+            if (c % 15 == 0) {
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛ㄦ牸鐨勮鏁�
+                for (int i = 0; i < 17; i++) {
+                    RowRenderData rowRenderData = new RowRenderData();
+                    RowStyle rowStyle = new RowStyle();
+                    rowStyle.setHeight(40);
+                    rowRenderData.setRowStyle(rowStyle);
+                    List<CellRenderData> cells = new ArrayList<>();
+                    //琛ㄦ牸鐨勫垪鏁�
+                    for (int j = 0; j < 7; j++) {
+                        CellRenderData cellRenderData = new CellRenderData();
+                        CellStyle cellStyle = new CellStyle();
+                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                        cellRenderData.setCellStyle(cellStyle);
+                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        ParagraphStyle paragraphStyle = new ParagraphStyle();
+                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                        paragraphRenderData.setParagraphStyle(paragraphStyle);
+                        List<RenderData> renderData = new ArrayList<>();
+                        TextRenderData textRenderData = new TextRenderData();
+                        Style style = new Style();
+                        style.setFontFamily("瀹嬩綋");
+                        style.setColor("000000");
+                        textRenderData.setStyle(style);
+                        if (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒�
+                                textRenderData.setText("鏂囦欢鍚嶇О@File name");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("鐗堟湰鍙稝Version number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("淇鍙稝Revision number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒�
+                                textRenderData.setText("閫傚疁鎬Suitability");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗竷鍒�
+                                textRenderData.setText("澶囨敞@Remark");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else if (i == 16) {
+                            //鏈�鍚庝竴琛�
+                            textRenderData.setText("娉細閫傚疁鎬т竴鏍忔墦鈥溾垰鈥濊〃姝ゆ枃浠堕�傚疁锛屸�溍椻�濊〃绀轰笉閫傚疁锛屾枃浠堕渶淇鎴栦綔搴熴�侤Note:The鈥溾垰鈥漷able in the suitability column is suitable for this document, the鈥溍椻�漷able is not suitable,and the document needs to berevised or invalidated @瀹℃煡鏃ユ湡锛� @Review Date:@鍙傚姞瀹℃煡浜哄憳绛惧悕锛欯Signatures of the reviewers particip ating in the review:鈭�22");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        }
+                        else {
+                            //鍏朵粬琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                try {
+                                    String insReportCode = manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentCode();
+                                    textRenderData.setText(index + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                index++;
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentCode());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentVersion());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i -1) + (index1 - 1) * 15).getRevision());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getSuitability());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                try {
+                                    textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getRemark() );
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                    }
+                    rowRenderData.setCells(cells);
+                    if (rowRenderData.getCells().size() != 0) {
+                        rows.add(rowRenderData);
+                    }
+                }
+                TableRenderData tableRenderData = new TableRenderData();
+                tableRenderData.setRows(rows);
+                int countSize = tableRenderData.getRows().get(0).getCells().size();
+                for (RowRenderData row : tableRenderData.getRows()) {
+                    if (row.getCells().size() != countSize) {
+                        throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                    }
+                }
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(14);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                Map<String, Object> table = new HashMap<>();
+                table.put("intervals", tableRenderData);
+                table.put("index1", index1);
+                intervalsList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("size", finalIndex);
+                    put("intervalsList", intervalsList);
+                    put("submitDate", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+                    put("submitDateEn", monthNames[LocalDate.now().getMonthValue() - 1] + " " + LocalDate.now().getDayOfMonth() + ", " + LocalDate.now().getYear());
+                    put("ratifyDate", "{{ratifyDate}}");
+                    put("ratifyDateEn","{{ratifyDateEn}}");
+                    put("ratifyUrl", null);
+                    put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
+                }});
+        String name = UUID.randomUUID() + "_鏂囦欢瀹氭湡瀹℃煡璁板綍琛�" + ".docx";
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        String path = wordUrl + "/" + name;
+        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+        try {
+            ZipSecureFile.setMinInflateRatio(0.0001);
+            FileInputStream stream = new FileInputStream(path);
+            XWPFDocument document = new XWPFDocument(stream);
+            List<XWPFTable> xwpfTables = document.getTables();
+            for (int i = 0; i < xwpfTables.size(); i++) {
+                Set<String> set1 = new HashSet<>();
+                Map<String, Map<String, Integer>> maps = new HashMap<>();
+                for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+                            String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+                            if (set1.add(split[1])) {
+                                Map<String, Integer> map = new HashMap<>();
+                                map.put("sr", j);
+                                map.put("sc", k);
+                                map.put("er", j + 0);
+                                map.put("ec", k + 0);
+                                maps.put(split[1], map);
+                            } else {
+                                Map<String, Integer> map1 = maps.get(split[1]);
+                                if (j == map1.get("sr")) {
+                                    map1.put("ec", map1.get("ec") + 1);
+                                } else if (k == map1.get("sc")) {
+                                    map1.put("er", map1.get("er") + 1);
+                                }
+                            }
+                            String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+                // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+                List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+                entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+                // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+                List<String> list = new ArrayList<>();
+                for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+                    list.add(entry.getKey());
+                }
+                for (int a = list.size() - 1; a >= 0; a--) {
+                    Map<String, Integer> v = maps.get(list.get(a));
+                    for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+                        if (v.get("ec") > v.get("sc")) {
+                            try {
+                                mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+//                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+                            } catch (Exception e) {
+                            }
+                        }
+                    }
+                    if (v.get("er") > v.get("sr")) {
+                        try {
+                            mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+//                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+                        } catch (Exception e) {
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(path);
+            document.write(fileOutputStream);
+            fileOutputStream.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 0; i < xwpfTables1.size(); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return name;
+    }
+
+    // 姘村钩鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+        for (int i = fromCol; i <= toCol; i++) {
+            if (i == fromCol) {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+
+    // 鍨傜洿鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+        for (int i = fromRow; i <= toRow; i++) {
+            if (i == fromRow) {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIssueRecycleServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIssueRecycleServiceImpl.java
new file mode 100644
index 0000000..08775b5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIssueRecycleServiceImpl.java
@@ -0,0 +1,695 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordIssueRecycleMapper;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import com.ruoyi.manage.service.ManageRecordIssueRecycleService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 09:11:05
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordIssueRecycleServiceImpl extends ServiceImpl<ManageRecordIssueRecycleMapper, ManageRecordIssueRecycle> implements ManageRecordIssueRecycleService {
+
+    @Resource
+    private ManageRecordIssueRecycleMapper manageRecordIssueRecycleMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<ManageRecordIssueRecycle> pageManageRecordIssueRecycle(Page page, ManageRecordIssueRecycle manageRecordIssueRecycle) {
+        return manageRecordIssueRecycleMapper.pageManageRecordIssueRecycle(page, QueryWrappers.queryWrappers(manageRecordIssueRecycle));
+    }
+
+    @Override
+    public String exportOutManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle, HttpServletResponse response) {
+        List<ManageRecordIssueRecycle> manageRecordIssueRecycleList = manageRecordIssueRecycleMapper.pageManageRecordIssueRecycle(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordIssueRecycle)).getRecords();
+        //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/recycle-deal.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+
+        List<Map<String, Object>> recycleList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < manageRecordIssueRecycleList.size(); c++) {
+            //瓒呰繃15琛屾崲椤�
+            if (c % 15 == 0) {
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛ㄦ牸鐨勮鏁�
+                for (int i = 0; i < 17; i++) {
+                    RowRenderData rowRenderData = new RowRenderData();
+                    RowStyle rowStyle = new RowStyle();
+                    rowStyle.setHeight(40);
+                    rowRenderData.setRowStyle(rowStyle);
+                    List<CellRenderData> cells = new ArrayList<>();
+                    //琛ㄦ牸鐨勫垪鏁�
+                    for (int j = 0; j < 12; j++) {
+                        CellRenderData cellRenderData = new CellRenderData();
+                        CellStyle cellStyle = new CellStyle();
+                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                        cellRenderData.setCellStyle(cellStyle);
+                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        ParagraphStyle paragraphStyle = new ParagraphStyle();
+                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                        paragraphRenderData.setParagraphStyle(paragraphStyle);
+                        List<RenderData> renderData = new ArrayList<>();
+                        TextRenderData textRenderData = new TextRenderData();
+                        Style style = new Style();
+                        style.setFontFamily("瀹嬩綋");
+                        style.setColor("000000");
+                        textRenderData.setStyle(style);
+                        if (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.鈭�1");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number鈭�2");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("鏂囦欢鍚嶇О@File name鈭�3");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("鐗堝彿@Edition number鈭�4");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("浠芥暟@Number of copies鈭�5");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒�
+                                textRenderData.setText("鏂囦欢绫诲埆@File category鈭�6");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                //绗竷鍒�
+                                textRenderData.setText("鍒嗗彂鍙稝Distribution number鈭�7");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                //绗叓鍒�
+                                textRenderData.setText("鎺ユ敹閮ㄩ棬@Receiving department鈭�8");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 8 || j == 9) {
+                                //绗節鍒�
+                                textRenderData.setText("鍙戞斁 Issue鈭�9");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 10 || j == 11) {
+                                //绗叓鍒�
+                                textRenderData.setText("鍥炴敹 Reclaim鈭�10");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else if (i == 1) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.鈭�1");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number鈭�2");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("鏂囦欢鍚嶇О@File name鈭�3");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("鐗堝彿@Edition number鈭�4");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("浠芥暟@Number of copies鈭�5");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒�
+                                textRenderData.setText("鏂囦欢绫诲埆@File category鈭�6");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                //绗竷鍒�
+                                textRenderData.setText("鍒嗗彂鍙稝Distribution number鈭�7");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                //绗叓鍒�
+                                textRenderData.setText("鎺ユ敹閮ㄩ棬@Receiving department鈭�8");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 8) {
+                                //绗節鍒�
+                                textRenderData.setText("鎺ュ彈浜篅Recipients");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 9) {
+                                //绗崄鍒�
+                                textRenderData.setText("鏃ユ湡@Date");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 10) {
+                                //绗崄涓�鍒�
+                                textRenderData.setText("绛炬敹浜篅Signatory");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗崄浜屽垪
+                                textRenderData.setText("鏃ユ湡@Date");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else {
+                            //鍏朵粬琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                try {
+                                    String insReportCode = manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentCode();
+                                    textRenderData.setText(index + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                index++;
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentCode());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentVersion());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getPages());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentType());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getNumber());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 7) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDepartLims());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 8) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getReceiveUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 9) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getReceiveDate() + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 10) {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getSignedUserName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                try {
+                                    textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getSignedDate() + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                    }
+                    rowRenderData.setCells(cells);
+                    if (rowRenderData.getCells().size() != 0) {
+                        rows.add(rowRenderData);
+                    }
+                }
+                TableRenderData tableRenderData = new TableRenderData();
+                tableRenderData.setRows(rows);
+                int countSize = tableRenderData.getRows().get(0).getCells().size();
+                for (RowRenderData row : tableRenderData.getRows()) {
+                    if (row.getCells().size() != countSize) {
+                        throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                    }
+                }
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(14);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                Map<String, Object> table = new HashMap<>();
+                table.put("recycle", tableRenderData);
+                table.put("index1", index1);
+                recycleList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("size", finalIndex);
+                    put("recycleList", recycleList);
+                }});
+        String name = UUID.randomUUID() + "_鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�" + ".docx";
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        String path = wordUrl + "/" + name;
+        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+        try {
+            ZipSecureFile.setMinInflateRatio(0.0001);
+            FileInputStream stream = new FileInputStream(path);
+            XWPFDocument document = new XWPFDocument(stream);
+            List<XWPFTable> xwpfTables = document.getTables();
+            for (int i = 0; i < xwpfTables.size(); i++) {
+                Set<String> set1 = new HashSet<>();
+                Map<String, Map<String, Integer>> maps = new HashMap<>();
+                for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+                            String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+                            if (set1.add(split[1])) {
+                                Map<String, Integer> map = new HashMap<>();
+                                map.put("sr", j);
+                                map.put("sc", k);
+                                map.put("er", j + 0);
+                                map.put("ec", k + 0);
+                                maps.put(split[1], map);
+                            } else {
+                                Map<String, Integer> map1 = maps.get(split[1]);
+                                if (j == map1.get("sr")) {
+                                    map1.put("ec", map1.get("ec") + 1);
+                                } else if (k == map1.get("sc")) {
+                                    map1.put("er", map1.get("er") + 1);
+                                }
+                            }
+                            String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+                // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+                List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+                entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+                // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+                List<String> list = new ArrayList<>();
+                for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+                    list.add(entry.getKey());
+                }
+                for (int a = list.size() - 1; a >= 0; a--) {
+                    Map<String, Integer> v = maps.get(list.get(a));
+                    for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+                        if (v.get("ec") > v.get("sc")) {
+                            try {
+                                mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+//                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+                            } catch (Exception e) {
+                            }
+                        }
+                    }
+                    if (v.get("er") > v.get("sr")) {
+                        try {
+                            mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+//                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+                        } catch (Exception e) {
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(path);
+            document.write(fileOutputStream);
+            fileOutputStream.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 0; i < xwpfTables1.size(); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return name;
+    }
+
+    @Override
+    public int exportInManageRecordIssueRecycle(MultipartFile file) {
+        List<ManageRecordIssueRecycle> manageRecordIssueRecycleList = new ArrayList<>();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        try {
+            InputStream inputStream = file.getInputStream();
+            XWPFDocument document = new XWPFDocument(inputStream);
+            List<XWPFTable> tables = document.getTables();
+            if (tables.isEmpty()) {
+                throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+            }
+
+            for (XWPFTable table : tables) {
+                List<XWPFTableRow> rows = table.getRows();
+                if (rows.size() <= 1) {
+                    throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+                }
+                for (int i = 2; i < rows.size(); i++) { // 浠庣涓夎寮�濮嬶紝璺宠繃琛ㄥご
+                    XWPFTableRow row = rows.get(i);
+                    if (row.getTableCells().size() != 12) {
+                        System.out.println("琛� " + (i + 1) + " 鐨勫垪鏁颁笉鍖归厤锛岃烦杩囪琛�");
+                        continue;
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+                        ManageRecordIssueRecycle manageRecordIssueRecycle = new ManageRecordIssueRecycle();
+                        manageRecordIssueRecycle.setDocumentCode(row.getCell(1).getText());
+                        manageRecordIssueRecycle.setDocumentName(row.getCell(2).getText());
+                        manageRecordIssueRecycle.setDocumentVersion(row.getCell(3).getText());
+                        manageRecordIssueRecycle.setPages(row.getCell(4).getText());
+                        manageRecordIssueRecycle.setDocumentType(row.getCell(5).getText());
+                        manageRecordIssueRecycle.setNumber(row.getCell(6).getText());
+                        manageRecordIssueRecycle.setDepartLims(row.getCell(7).getText());
+                        try {
+                            manageRecordIssueRecycle.setReceiveUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                                    .eq(User::getName, row.getCell(8).getText())).getId());
+                        } catch (Exception e) {
+                            manageRecordIssueRecycle.setReceiveUser(null);
+                        }
+                        try {
+                            manageRecordIssueRecycle.setSignedUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                                    .eq(User::getName, row.getCell(10).getText())).getId());
+                        } catch (Exception e) {
+                            manageRecordIssueRecycle.setSignedUser(null);
+                        }
+                        try {
+                            manageRecordIssueRecycle.setReceiveDate(LocalDate.parse(row.getCell(9).getText(), dateTimeFormatter));
+                        } catch (Exception e) {
+                            manageRecordIssueRecycle.setReceiveDate(null);
+                        }
+                        try {
+                            manageRecordIssueRecycle.setSignedDate(LocalDate.parse(row.getCell(11).getText(), dateTimeFormatter));
+                        } catch (Exception e) {
+                            manageRecordIssueRecycle.setSignedDate(null);
+                        }
+
+                        ManageRecordIssueRecycle issueRecycle = manageRecordIssueRecycleMapper.selectOne(Wrappers.<ManageRecordIssueRecycle>lambdaQuery()
+                                .eq(ManageRecordIssueRecycle::getDocumentCode, manageRecordIssueRecycle.getDocumentCode())
+                                .eq(ManageRecordIssueRecycle::getDocumentName, manageRecordIssueRecycle.getDocumentName())
+                                .eq(ManageRecordIssueRecycle::getDocumentVersion, manageRecordIssueRecycle.getDocumentVersion()));
+                        if (ObjectUtils.isNotEmpty(issueRecycle)) {
+                            manageRecordIssueRecycle.setId(issueRecycle.getId());
+                        }
+                        manageRecordIssueRecycleList.add(manageRecordIssueRecycle);
+                    }
+                }
+            }
+            saveOrUpdateBatch(manageRecordIssueRecycleList);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+
+    @Override
+    public int addManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle) {
+        return manageRecordIssueRecycleMapper.insert(manageRecordIssueRecycle);
+    }
+
+    @Override
+    public int doManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle) {
+        return manageRecordIssueRecycleMapper.updateById(manageRecordIssueRecycle);
+    }
+
+    // 姘村钩鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+        for (int i = fromCol; i <= toCol; i++) {
+            if (i == fromCol) {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+
+    // 鍨傜洿鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+        for (int i = fromRow; i <= toRow; i++) {
+            if (i == fromRow) {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordTotalServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordTotalServiceImpl.java
new file mode 100644
index 0000000..8e0f8a5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordTotalServiceImpl.java
@@ -0,0 +1,421 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordTotalMapper;
+import com.ruoyi.manage.mapper.ManageRecordVerifyMapper;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import com.ruoyi.manage.service.ManageRecordTotalService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:30:08
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordTotalServiceImpl extends ServiceImpl<ManageRecordTotalMapper, ManageRecordTotal> implements ManageRecordTotalService {
+
+    @Resource
+    private ManageRecordTotalMapper manageRecordTotalMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Resource
+    private ManageRecordVerifyMapper manageRecordVerifyMapper;
+
+    @Override
+    public IPage<ManageRecordTotal> pageManageRecordTotal(Page page, ManageRecordTotal manageRecordTotal) {
+        return manageRecordTotalMapper.pageProcessTotaldeal(page, QueryWrappers.queryWrappers(manageRecordTotal));
+    }
+
+    @Override
+    public int submitManageRecordTotal(Integer id) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒板~琛ㄤ汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectById(id);
+        manageRecordTotal.setSubmitUser(userId);
+        manageRecordTotal.setSubmitDate(LocalDate.now());
+        manageRecordTotal.setSubmitUrl(user.getSignatureUrl());
+        //鐢熸垚鏍峰搧澶勭悊鐢宠琛ㄥ苟灏嗗~琛ㄤ汉鐨勭數瀛愮鍚嶅嵃涓�
+        manageRecordTotal.setUrl(recordTotaldeal(id,user.getSignatureUrl()));
+        return manageRecordTotalMapper.updateById(manageRecordTotal);
+    }
+
+    @Override
+    public int ratifyManageRecordTotal(Integer id, String ratifyState) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒版壒鍑嗕汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectById(id);
+        manageRecordTotal.setRatifyUser(userId);
+        manageRecordTotal.setRatifyState(ratifyState);
+        manageRecordTotal.setRatifyDate(LocalDate.now());
+        manageRecordTotal.setRatifyUrl(user.getSignatureUrl());
+        //灏嗘壒鍑嗕汉鐨勭鍚嶅嵃涓�
+        String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+        wordInsertUrl(new HashMap<String, Object>() {{
+            put("ratifyDateEn", monthNames[LocalDate.now().getMonthValue() - 1] + " " + LocalDate.now().getDayOfMonth() + ", " + LocalDate.now().getYear());
+            put("ratifyDate", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+            put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + user.getSignatureUrl()));
+        }},  wordUrl+"/"+manageRecordTotal.getUrl());
+        return manageRecordTotalMapper.updateById(manageRecordTotal);
+    }
+
+    public int wordInsertUrl(Map<String, Object> map, String url) {
+        XWPFTemplate template = XWPFTemplate.compile(url).render(map);
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(url)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return 1;
+    }
+
+
+    private String recordTotaldeal(Integer id,String signatureUrl){
+        List<ManageRecordVerify> manageRecordVerifies = manageRecordVerifyMapper.selectList(Wrappers.<ManageRecordVerify>lambdaQuery().eq(ManageRecordVerify::getManageRecordTotalId,id));
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/verify-deal.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+        List<Map<String, Object>> verifyList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < manageRecordVerifies.size(); c++) {
+            //瓒呰繃21琛屾崲椤�
+            if (c % 20 == 0) {
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛ㄦ牸鐨勮鏁�
+                for (int i = 0; i < 21; i++) {
+                    RowRenderData rowRenderData = new RowRenderData();
+                    RowStyle rowStyle = new RowStyle();
+                    rowStyle.setHeight(40);
+                    rowRenderData.setRowStyle(rowStyle);
+                    List<CellRenderData> cells = new ArrayList<>();
+                    //琛ㄦ牸鐨勫垪鏁�
+                    for (int j = 0; j < 8; j++) {
+                        CellRenderData cellRenderData = new CellRenderData();
+                        CellStyle cellStyle = new CellStyle();
+                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                        cellRenderData.setCellStyle(cellStyle);
+                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        ParagraphStyle paragraphStyle = new ParagraphStyle();
+                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                        paragraphRenderData.setParagraphStyle(paragraphStyle);
+                        List<RenderData> renderData = new ArrayList<>();
+                        TextRenderData textRenderData = new TextRenderData();
+                        Style style = new Style();
+                        style.setFontFamily("瀹嬩綋");
+                        style.setColor("000000");
+                        textRenderData.setStyle(style);
+                        if (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒楀簭鍙�
+                                textRenderData.setText("搴忓彿@No.");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒楁牱鍝佸悕绉�
+                                textRenderData.setText("澶栨潵鏂囦欢鍚嶇О@Foreign file name");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒楁牱鍝佺紪鍙�
+                                textRenderData.setText("鏂囦欢缂栧彿@File number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒椾緵鏍峰崟浣�
+                                textRenderData.setText("鏍囧噯瑙勮寖鍚嶇О@Standard specification name");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒楁暟閲�
+                                textRenderData.setText("鏍囧噯鍙稝Stanard number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒楀鐞嗘柟寮�
+                                textRenderData.setText("鐢熸晥鏃ユ湡@Effective Date");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                //绗竷鍒楀鐞嗘柟寮�
+                                textRenderData.setText("浣滃簾鏃ユ湡@Void date");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }else {
+                                //绗叓鍒楁椂闂�
+                                textRenderData.setText("澶囨敞@Remaek");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else {
+                            //鍏朵粬琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                try{
+                                    String sampleName = manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getDocumentName();
+                                    textRenderData.setText(index + "");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                index++;
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                try{
+                                    textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getDocumentName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else if (j == 2) {
+                                try{
+                                    textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getDocumentCode());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else if (j == 3) {
+                                try{
+                                    textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getStandardName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else if (j == 4) {
+                                try{
+                                    textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getStandardCode());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else if (j == 5) {
+                                try{
+                                    textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getEffectiveDate()+"");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else if (j==6){
+                                try{
+                                    textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getCancelDate()+"");
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else {
+                                try{
+                                    textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getNote());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                    }
+                    rowRenderData.setCells(cells);
+                    if (rowRenderData.getCells().size() != 0) {
+                        rows.add(rowRenderData);
+                    }
+                }
+                TableRenderData tableRenderData = new TableRenderData();
+                tableRenderData.setRows(rows);
+                int countSize = tableRenderData.getRows().get(0).getCells().size();
+                for (RowRenderData row : tableRenderData.getRows()) {
+                    if (row.getCells().size() != countSize) {
+                        throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                    }
+                }
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(14);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                Map<String, Object> table = new HashMap<>();
+                table.put("verify", tableRenderData);
+                table.put("index1", index1);
+                verifyList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("verifyList", verifyList);
+                    put("size", finalIndex);
+                    put("submitDate", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+                    put("submitDateEn", monthNames[LocalDate.now().getMonthValue() - 1] + " " + LocalDate.now().getDayOfMonth() + ", " + LocalDate.now().getYear());
+                    put("ratifyDate", "{{ratifyDate}}");
+                    put("ratifyDateEn","{{ratifyDateEn}}");
+                    put("ratifyUrl", null);
+                    put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
+                }});
+        String name = UUID.randomUUID() + "_鏍峰搧澶勭悊鐢宠琛�" + ".docx";
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        String path = wordUrl + "/" + name;
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 0; i < xwpfTables1.size(); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return name;
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordVerifyServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordVerifyServiceImpl.java
new file mode 100644
index 0000000..81ccc19
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordVerifyServiceImpl.java
@@ -0,0 +1,155 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordTotalMapper;
+import com.ruoyi.manage.mapper.ManageRecordVerifyMapper;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import com.ruoyi.manage.service.ManageRecordVerifyService;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.apache.poi.xwpf.usermodel.XWPFTableRow;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 10:29:44
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordVerifyServiceImpl extends ServiceImpl<ManageRecordVerifyMapper, ManageRecordVerify> implements ManageRecordVerifyService {
+
+    @Resource
+    private ManageRecordVerifyMapper manageRecordVerifyMapper;
+
+    @Resource
+    private ManageRecordTotalMapper manageRecordTotalMapper;
+
+    @Override
+    public IPage<ManageRecordVerify> pageManageRecordVerify(Page page, ManageRecordVerify manageRecordVerify) {
+        if (ObjectUtils.isEmpty(manageRecordVerify.getManageRecordTotalId())) {
+            //鑾峰彇褰撳墠骞翠唤
+            LocalDate currentDate = LocalDate.now();
+            // 瀹氫箟鏃ユ湡鏍煎紡
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+            // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+            String currentMonth = currentDate.format(formatter);
+            //鏌ヨ鍘嗗彶
+            ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.<ManageRecordTotal>lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
+            manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
+        }
+        return manageRecordVerifyMapper.pageManageRecordVerify(page, QueryWrappers.queryWrappers(manageRecordVerify));
+    }
+
+    @Override
+    public int addManageRecordVerify(ManageRecordVerify manageRecordVerify) {
+        //鑾峰彇褰撳墠骞翠唤
+        LocalDate currentDate = LocalDate.now();
+        // 瀹氫箟鏃ユ湡鏍煎紡
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+        // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+        String currentMonth = currentDate.format(formatter);
+        ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.<ManageRecordTotal>lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
+        manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
+        manageRecordVerifyMapper.insert(manageRecordVerify);
+        manageRecordTotal.setTotalNum(1 + manageRecordTotal.getTotalNum());
+        return manageRecordTotalMapper.updateById(manageRecordTotal);
+    }
+
+    @Override
+    public int delManageRecordVerify(Integer id) {
+        ManageRecordVerify manageRecordVerify = manageRecordVerifyMapper.selectById(id);
+        manageRecordVerifyMapper.deleteById(id);
+        ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectById(manageRecordVerify.getManageRecordTotalId());
+        manageRecordTotal.setTotalNum(manageRecordTotal.getTotalNum() - 1);
+        return manageRecordTotalMapper.updateById(manageRecordTotal);
+    }
+
+    @Override
+    public int exportManageRecordVerify(MultipartFile file) {
+        List<ManageRecordVerify> manageRecordVerifyList = new ArrayList<>();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        //鑾峰彇褰撳墠骞翠唤
+        LocalDate currentDate = LocalDate.now();
+        // 瀹氫箟鏃ユ湡鏍煎紡
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+        // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+        String currentMonth = currentDate.format(formatter);
+        ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.<ManageRecordTotal>lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
+        try {
+            InputStream inputStream = file.getInputStream();
+            XWPFDocument document = new XWPFDocument(inputStream);
+            List<XWPFTable> tables = document.getTables();
+            if (tables.isEmpty()) {
+                throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+            }
+
+            for (XWPFTable table : tables) {
+                List<XWPFTableRow> rows = table.getRows();
+                if (rows.size() <= 1) {
+                    throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+                }
+                for (int i = 1; i < rows.size(); i++) { // 浠庣浜岃寮�濮嬶紝璺宠繃琛ㄥご
+                    XWPFTableRow row = rows.get(i);
+                    if (row.getTableCells().size() != 8) {
+                        System.out.println("琛� " + (i + 1) + " 鐨勫垪鏁颁笉鍖归厤锛岃烦杩囪琛�");
+                        continue;
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+                        ManageRecordVerify manageRecordVerify = new ManageRecordVerify();
+                        manageRecordVerify.setDocumentName(row.getCell(1).getText());
+                        manageRecordVerify.setDocumentCode(row.getCell(2).getText());
+                        manageRecordVerify.setStandardName(row.getCell(3).getText());
+                        manageRecordVerify.setStandardCode(row.getCell(4).getText());
+                        try {
+                            manageRecordVerify.setEffectiveDate(LocalDate.parse(row.getCell(5).getText(), dateTimeFormatter));
+                        } catch (Exception e) {
+                            manageRecordVerify.setEffectiveDate(null);
+                        }
+                        try {
+                            manageRecordVerify.setCancelDate(LocalDate.parse(row.getCell(6).getText(), dateTimeFormatter));
+                        } catch (Exception e) {
+                            manageRecordVerify.setCancelDate(null);
+                        }
+                        manageRecordVerify.setNote(row.getCell(7).getText());
+                        manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
+                        if (manageRecordVerifyMapper.selectCount(Wrappers.<ManageRecordVerify>lambdaQuery()
+                                .eq(ManageRecordVerify::getDocumentCode, manageRecordVerify.getDocumentCode())
+                                .eq(ManageRecordVerify::getDocumentName, manageRecordVerify.getDocumentName())
+                                .eq(ManageRecordVerify::getStandardName, manageRecordVerify.getStandardName())
+                                .eq(ManageRecordVerify::getStandardCode, manageRecordVerify.getStandardCode())
+                                .eq(ManageRecordVerify::getManageRecordTotalId, manageRecordVerify.getManageRecordTotalId())) <= 0) {
+                            manageRecordVerifyList.add(manageRecordVerify);
+                        }
+                    }
+                }
+            }
+            saveBatch(manageRecordVerifyList);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramFileServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramFileServiceImpl.java
new file mode 100644
index 0000000..4bc7155
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramFileServiceImpl.java
@@ -0,0 +1,76 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.ManageReviewProgramFileMapper;
+import com.ruoyi.manage.mapper.ManageReviewProgramMapper;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import com.ruoyi.manage.pojo.ManageReviewProgramFile;
+import com.ruoyi.manage.service.ManageReviewProgramFileService;
+import com.ruoyi.manage.vo.ReviewProgramDetailsVo;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 04:15:47
+ */
+@Service
+public class ManageReviewProgramFileServiceImpl extends ServiceImpl<ManageReviewProgramFileMapper, ManageReviewProgramFile> implements ManageReviewProgramFileService {
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    ManageReviewProgramMapper manageReviewProgramMapper;
+
+    @Override
+    public ReviewProgramDetailsVo selectFile(Integer id) {
+        ManageReviewProgram program = manageReviewProgramMapper.selectById(id);
+        LambdaQueryWrapper<ManageReviewProgramFile> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ManageReviewProgramFile::getReviewId, id);
+        List<ManageReviewProgramFile> files = list(queryWrapper);
+        ReviewProgramDetailsVo vo = new ReviewProgramDetailsVo();
+        vo.setProgram(program);
+        vo.setFileList(files);
+        return vo;
+    }
+
+    @Override
+    public void addFile(MultipartFile file, Integer id) {
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        ManageReviewProgramFile manageReviewProgramFile = new ManageReviewProgramFile();
+        manageReviewProgramFile.setFileName(filename);
+        manageReviewProgramFile.setReviewId(id);
+        // 鏄枃浠�
+        path = wordUrl;
+        try {
+            File realpath = new File(path);
+            if (!realpath.exists()) {
+                realpath.mkdirs();
+            }
+            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+            urlString = realpath + "/" + pathName;
+            file.transferTo(new File(urlString));
+            manageReviewProgramFile.setUrl(pathName);
+            this.baseMapper.insert(manageReviewProgramFile);
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("闄勪欢涓婁紶閿欒");
+        }
+
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramServiceImpl.java
new file mode 100644
index 0000000..ab8b505
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramServiceImpl.java
@@ -0,0 +1,121 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.FilePictureRenderData;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageReviewProgramMapper;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import com.ruoyi.manage.service.ManageReviewProgramService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-09 03:05:42
+ */
+@Service
+public class ManageReviewProgramServiceImpl extends ServiceImpl<ManageReviewProgramMapper, ManageReviewProgram> implements ManageReviewProgramService {
+
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Override
+    public IPage<ManageReviewProgram> page(Page page, String startTime,String endTime, String judgingLocation) {
+        IPage<ManageReviewProgram> iPage = this.baseMapper.page(page,startTime,endTime,judgingLocation);
+        return iPage;
+    }
+
+    @Override
+    public void exportReviewProgram(Integer id, HttpServletResponse response) {
+        ManageReviewProgram reviewProgram = baseMapper.selectById(id);
+        List<String> name = new ArrayList<>();
+        for (String s : reviewProgram.getParticipants().split(",")) {
+            User user = userMapper.selectById(Integer.parseInt(s));
+            name.add(user.getName());
+        }
+        String participantsName = name.stream().collect(Collectors.joining(","));
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+        //缂栧埗浜虹鍚�
+        User user1 = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName, reviewProgram.getEditor()));
+        if (ObjectUtils.isEmpty(user1.getSignatureUrl())){
+            throw new ErrorException(user1.getName()+"娌℃湁涓婁紶涓汉绛惧悕,璇蜂笂浼�!");
+        }
+        String signatureUrl1 = user1.getSignatureUrl();
+        //鎵瑰噯浜虹鍚�
+        if (ObjectUtils.isEmpty(reviewProgram.getApprove())){
+            throw new ErrorException("娌℃湁杩涜鎵瑰噯");
+        }
+        User user2 = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName, reviewProgram.getApprove()));
+        if (ObjectUtils.isEmpty(user2.getSignatureUrl())){
+            throw new ErrorException(user2.getName()+"娌℃湁涓婁紶涓汉绛惧悕,璇蜂笂浼�!");
+        }
+        String signatureUrl2 = user2.getSignatureUrl();
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/review-program.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("reviewProgram", reviewProgram);
+                    put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl1));
+                    put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl2));
+                    put("editorDate", reviewProgram.getEditorDate().format(formatter));
+                    put("approveDate", reviewProgram.getApproveDate().format(formatter));
+                    put("participantsName",participantsName);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "绠$悊璇勫璁″垝", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    @Override
+    public int addReviewProgram(ManageReviewProgram manageReviewProgram) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        String name = userMapper.selectById(userId).getName();
+        manageReviewProgram.setEditor(name);
+        manageReviewProgram.setEditorDate(LocalDateTime.now());
+        return baseMapper.insert(manageReviewProgram);
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewReportServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewReportServiceImpl.java
new file mode 100644
index 0000000..bf5bfc0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewReportServiceImpl.java
@@ -0,0 +1,141 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.FilePictureRenderData;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageReviewReportMapper;
+import com.ruoyi.manage.pojo.ManageReviewReport;
+import com.ruoyi.manage.service.ManageReviewReportService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-12 04:44:39
+ */
+@Service
+public class ManageReviewReportServiceImpl extends ServiceImpl<ManageReviewReportMapper, ManageReviewReport> implements ManageReviewReportService {
+
+    @Resource
+    UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Override
+    public IPage<ManageReviewReport> page(Page page, String startTime, String endTime, String place) {
+        IPage<ManageReviewReport> iPage = this.baseMapper.page(page, startTime, endTime, place);
+        return iPage;
+    }
+
+    @Override
+    public void exportReviewReport(Integer id, HttpServletResponse response) {
+        ManageReviewReport manageReviewReport = baseMapper.selectById(id);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+        //瀹屾垚鏃堕棿
+        String completionDate = "";
+        if (ObjectUtils.isNotEmpty(manageReviewReport.getCompletionDate())) {
+            completionDate = manageReviewReport.getCompletionDate().format(formatter);
+        }
+        //鍑哄腑浜哄憳
+        String attendessName=null;
+        if (ObjectUtils.isNotEmpty(manageReviewReport.getAttendess())) {
+            List<String> name = new ArrayList<>();
+            if(StringUtils.isNotBlank(manageReviewReport.getAttendess())){
+                for (String s : manageReviewReport.getAttendess().split(",")) {
+                    User user = userMapper.selectById(Integer.parseInt(s));
+                    name.add(user.getName());
+                }
+                attendessName = name.stream().collect(Collectors.joining(","));
+            }
+        }
+        //鏃ユ湡
+        String createTime = manageReviewReport.getCreateTime().format(formatter);
+        //瀹℃牳浜�
+        String signatureUrl1 = null;
+        if (ObjectUtils.isNotEmpty(manageReviewReport.getAudit())) {
+            User user1 = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName, manageReviewReport.getAudit()));
+            if (ObjectUtils.isEmpty(user1.getSignatureUrl())) {
+                throw new ErrorException(user1.getName() + "鐨勪釜浜虹鍚嶆病鏈変笂浼�");
+            }
+            signatureUrl1 = user1.getSignatureUrl();
+        }
+        //鎵瑰噯浜�
+        String signatureUrl2 = null;
+        if (ObjectUtils.isNotEmpty(manageReviewReport.getApproval())) {
+            User user2 = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName, manageReviewReport.getApproval()));
+            if (ObjectUtils.isEmpty(user2.getSignatureUrl())) {
+                throw new ErrorException(user2.getName() + "鐨勪釜浜虹鍚嶆病鏈変笂浼�");
+            }
+            signatureUrl2 = user2.getSignatureUrl();
+        }
+
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/review-report.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String finalCompletionDate = completionDate;
+        FilePictureRenderData picture1=null;
+        FilePictureRenderData picture2=null;
+        if (signatureUrl1!=null){
+             picture1 = new FilePictureRenderData(100, 50, imgUrl + "/" + signatureUrl1);
+        }
+        if (signatureUrl2!=null) {
+             picture2 = new FilePictureRenderData(100, 50, imgUrl + "/" + signatureUrl2);
+        }
+        FilePictureRenderData finalPicture1 = picture1;
+        FilePictureRenderData finalPicture2 = picture2;
+        String finalAttendessName = attendessName;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("report", manageReviewReport);
+                    put("completionDate", finalCompletionDate);
+                    put("date", manageReviewReport.getDate().format(formatter));
+                    put("createTime", createTime);
+                    put("examineUrl", finalPicture1);
+                    put("ratifyUrl", finalPicture2);
+                    put("attendessName", finalAttendessName);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "璇勫鎶ュ憡", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java
new file mode 100644
index 0000000..c275170
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java
@@ -0,0 +1,124 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.mapper.ManageRiskAssessmentResultsMapper;
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import com.ruoyi.manage.service.ManageRiskAssessmentResultsService;
+import com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 02:58:51
+ */
+@Service
+public class ManageRiskAssessmentResultsServiceImpl extends ServiceImpl<ManageRiskAssessmentResultsMapper, ManageRiskAssessmentResults> implements ManageRiskAssessmentResultsService {
+
+    @Autowired
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Override
+    public IPage<ManageRiskAssessmentResultsVo> getPageResults(Page page) {
+        return baseMapper.getPageResults(page, false);
+    }
+
+    @Override
+    public void exportPersonTraining(HttpServletResponse response) {
+        // 鏌ヨ璇︽儏
+        IPage<ManageRiskAssessmentResultsVo> detailedDtos = baseMapper.getPageResults(new Page(1, -1), true);
+        if (detailedDtos.getRecords().isEmpty()) {
+            throw new ErrorException("瀹℃牳閫氳繃鐨勬暟鎹负绌猴紒璇峰鏍搁�氳繃鍚庡湪瀵煎嚭");
+        }
+        ManageRiskAssessmentResultsVo manageRiskAssessmentResultsVo = detailedDtos.getRecords().get(0);
+
+        //鑾峰彇缂栧埗浜虹殑绛惧悕鍦板潃
+        String writeUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getEditor()).getSignatureUrl();
+        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.isEmpty()) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+
+        //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃
+        String examineUrl = null;
+        if (manageRiskAssessmentResultsVo.getApproval() != null) {
+            examineUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getApproval()).getSignatureUrl();
+            if (StringUtils.isBlank(examineUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+        String ratifyUrl = null;
+        if (manageRiskAssessmentResultsVo.getApproval() != null) {
+            ratifyUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getApproval()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        int index = 1;
+        for (ManageRiskAssessmentResultsVo detailedDto : detailedDtos.getRecords()) {
+            detailedDto.setIndex(index);
+            index++;
+        }
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/risk-factor-identification-risk.docx");
+        String finalExamineUrl = examineUrl;
+        String finalRatifyUrl = ratifyUrl;
+        Configure configure = Configure.builder()
+                .bind("trainingDetailedList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("trainingDetailedList", detailedDtos.getRecords());
+                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+                    put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
+                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+                    put("writeDateUrl", manageRiskAssessmentResultsVo.getEditorDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getEditorDate())).create() : null);
+                    put("examineDateUrl", manageRiskAssessmentResultsVo.getApproveDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getApproveDate())).create() : null);
+                    put("ratifyDateUrl", manageRiskAssessmentResultsVo.getApproveDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getApproveDate())).create() : null);
+                }});
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageControlPlanListVo.java b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageControlPlanListVo.java
new file mode 100644
index 0000000..d41e011
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageControlPlanListVo.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.vo;
+
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ManageControlPlanListVo extends ManageControlPlanList {
+    @ApiModelProperty("缂栧埗濮撳悕")
+    private String editorName;
+
+    @ApiModelProperty("瀹℃壒濮撳悕")
+    private String approvalName;
+
+    @ApiModelProperty("鎵瑰噯濮撳悕")
+    private String approveName;
+
+    @ApiModelProperty("瀵煎嚭")
+    private Integer index;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageRiskAssessmentResultsVo.java b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageRiskAssessmentResultsVo.java
new file mode 100644
index 0000000..16499ce
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageRiskAssessmentResultsVo.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.vo;
+
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ManageRiskAssessmentResultsVo extends ManageRiskAssessmentResults {
+
+    @ApiModelProperty("缂栧埗濮撳悕")
+    private String editorName;
+
+    @ApiModelProperty("瀹℃壒濮撳悕")
+    private String approvalName;
+
+    @ApiModelProperty("鎵瑰噯濮撳悕")
+    private String approveName;
+
+    @ApiModelProperty("瀵煎嚭搴忓彿")
+    private Integer index;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/vo/MeetingParticipantsDetailsVo.java b/cnas-manage/src/main/java/com/ruoyi/manage/vo/MeetingParticipantsDetailsVo.java
new file mode 100644
index 0000000..1f6de8e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/vo/MeetingParticipantsDetailsVo.java
@@ -0,0 +1,15 @@
+package com.ruoyi.manage.vo;
+
+import com.ruoyi.manage.pojo.ManageMeeting;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MeetingParticipantsDetailsVo {
+
+    private ManageMeeting manageMeeting;
+
+    private List<ManageMeetingParticipants> participantsList;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/vo/ReviewProgramDetailsVo.java b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ReviewProgramDetailsVo.java
new file mode 100644
index 0000000..713f4d8
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ReviewProgramDetailsVo.java
@@ -0,0 +1,15 @@
+package com.ruoyi.manage.vo;
+
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import com.ruoyi.manage.pojo.ManageReviewProgramFile;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReviewProgramDetailsVo {
+
+    private ManageReviewProgram program;
+
+    private List<ManageReviewProgramFile> fileList;
+}
diff --git a/cnas-manage/src/main/resources/lib/aspose-words-15.12.0-jdk16.jar b/cnas-manage/src/main/resources/lib/aspose-words-15.12.0-jdk16.jar
new file mode 100644
index 0000000..84320cf
--- /dev/null
+++ b/cnas-manage/src/main/resources/lib/aspose-words-15.12.0-jdk16.jar
Binary files differ
diff --git a/cnas-manage/src/main/resources/lib/license.xml b/cnas-manage/src/main/resources/lib/license.xml
new file mode 100644
index 0000000..ecd46c1
--- /dev/null
+++ b/cnas-manage/src/main/resources/lib/license.xml
@@ -0,0 +1,13 @@
+<License>
+    <Data>
+        <Products>
+            <Product>Aspose.Total for Java</Product>
+            <Product>Aspose.Words for Java</Product>
+        </Products>
+        <EditionType>Enterprise</EditionType>
+        <SubscriptionExpiry>20991231</SubscriptionExpiry>
+        <LicenseExpiry>20991231</LicenseExpiry>
+        <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
+    </Data>
+    <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
+</License>
diff --git a/cnas-manage/src/main/resources/mapper/ClientSatisfactionAnalyseFileMapper.xml b/cnas-manage/src/main/resources/mapper/ClientSatisfactionAnalyseFileMapper.xml
new file mode 100644
index 0000000..dfaa1cc
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ClientSatisfactionAnalyseFileMapper.xml
@@ -0,0 +1,18 @@
+<?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.yuanchu.mom.mapper.ClientSatisfactionAnalyseFileMapper">
+
+    <!-- 瀹㈡埛婊℃剰搴﹀垎鏋愰檮浠跺垪琛� -->
+    <select id="pageAnalyseFile" resultType="com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile">
+        select *
+        from (select ccf.*,
+                     u.name user_name
+              from cnas_client_satisfaction_analyse_file ccf
+                       left join user u on u.id = ccf.create_user
+              order by ccf.create_time desc
+             ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ClientSatisfactionMapper.xml b/cnas-manage/src/main/resources/mapper/ClientSatisfactionMapper.xml
new file mode 100644
index 0000000..3363454
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ClientSatisfactionMapper.xml
@@ -0,0 +1,48 @@
+<?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.yuanchu.mom.mapper.ClientSatisfactionMapper">
+
+    <!-- 瀹㈡埛婊℃剰搴﹁皟鏌� -->
+    <select id="pageClientSatisfaction" resultType="com.ruoyi.manage.pojo.ClientSatisfaction">
+        select *
+        from (select *
+              from cnas_client_satisfaction
+              order by create_time desc
+             ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+    <select id="exportWordClientSatisfaction" resultType="com.ruoyi.manage.dto.ClientSatisfactionDto">
+        select *,
+               CASE WHEN service_attitude = 0 THEN '鈽�'
+                   ELSE '鈻�' END AS serviceAttitude0,
+               CASE WHEN service_attitude = 1 THEN '鈽�'
+                   ELSE '鈻�' END AS serviceAttitude1,
+               CASE WHEN service_attitude = 2 THEN '鈽�'
+                   ELSE '鈻�' END AS serviceAttitude2,
+               service_attitude_suggestion,
+               CASE WHEN technical_competence = 0 THEN '鈽�'
+                    ELSE '鈻�' END AS technicalCompetence0,
+               CASE WHEN technical_competence = 1 THEN '鈽�'
+                    ELSE '鈻�' END AS technicalCompetence1,
+               CASE WHEN technical_competence = 2 THEN '鈽�'
+                    ELSE '鈻�' END AS technicalCompetence2,
+               technical_competence_suggestion,
+               CASE WHEN inspection_work = 0 THEN '鈽�'
+                    ELSE '鈻�' END AS inspectionWork0,
+               CASE WHEN inspection_work = 1 THEN '鈽�'
+                    ELSE '鈻�' END AS inspectionWork1,
+               CASE WHEN inspection_work = 2 THEN '鈽�'
+                    ELSE '鈻�' END AS inspectionWork2,
+               inspection_work_suggestion,
+               CASE WHEN reasonable_fees = 0 THEN '鈽�'
+                    ELSE '鈻�' END AS reasonableFees0,
+               CASE WHEN reasonable_fees = 1 THEN '鈽�'
+                    ELSE '鈻�' END AS reasonableFees1,
+               CASE WHEN reasonable_fees = 2 THEN '鈽�'
+                    ELSE '鈻�' END AS reasonableFees2
+        from cnas_client_satisfaction
+        where client_satisfaction_id = #{clientSatisfactionId}
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalCheckMapper.xml b/cnas-manage/src/main/resources/mapper/InternalCheckMapper.xml
new file mode 100644
index 0000000..3ef89c8
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalCheckMapper.xml
@@ -0,0 +1,15 @@
+<?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.yuanchu.mom.mapper.InternalCheckMapper">
+
+    <!-- 鍐呴儴瀹℃煡鍒嗛〉鏌ヨ -->
+    <select id="pageInternalCheck" resultType="com.ruoyi.manage.dto.InternalCheckDto">
+        select *
+        from (select *
+        from cnas_internal_check
+        order by create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalCorrectFileMapper.xml b/cnas-manage/src/main/resources/mapper/InternalCorrectFileMapper.xml
new file mode 100644
index 0000000..5dc4ae7
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalCorrectFileMapper.xml
@@ -0,0 +1,19 @@
+<?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.yuanchu.mom.mapper.InternalCorrectFileMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.InternalCorrectFile">
+        <id column="correct_file_id" property="correctFileId" />
+        <result column="supervise_details_correct_file_id" property="superviseDetailsCorrectFileId" />
+        <result column="correct_id" property="correctId" />
+        <result column="type" property="type" />
+        <result column="file_url" property="fileUrl" />
+        <result column="file_name" property="fileName" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalCorrectMapper.xml b/cnas-manage/src/main/resources/mapper/InternalCorrectMapper.xml
new file mode 100644
index 0000000..32e6f13
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalCorrectMapper.xml
@@ -0,0 +1,15 @@
+<?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.yuanchu.mom.mapper.InternalCorrectMapper">
+
+    <select id="pageInternalAccording" resultType="com.ruoyi.manage.pojo.InternalCorrect">
+        select *
+        from (select *
+        from cnas_internal_correct
+        order by create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalImplementMapper.xml b/cnas-manage/src/main/resources/mapper/InternalImplementMapper.xml
new file mode 100644
index 0000000..c1c3631
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalImplementMapper.xml
@@ -0,0 +1,14 @@
+<?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.yuanchu.mom.mapper.InternalImplementMapper">
+    <!-- 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ -->
+    <select id="pageInternalImplement" resultType="com.ruoyi.manage.dto.InternalImplementDto">
+        select *
+        from (select *
+              from cnas_internal_implement
+              order by create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalMeetingDetailMapper.xml b/cnas-manage/src/main/resources/mapper/InternalMeetingDetailMapper.xml
new file mode 100644
index 0000000..3654cce
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalMeetingDetailMapper.xml
@@ -0,0 +1,6 @@
+<?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.yuanchu.mom.mapper.InternalMeetingDetailMapper">
+
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalMeetingMapper.xml b/cnas-manage/src/main/resources/mapper/InternalMeetingMapper.xml
new file mode 100644
index 0000000..13f0ea1
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalMeetingMapper.xml
@@ -0,0 +1,18 @@
+<?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.yuanchu.mom.mapper.InternalMeetingMapper">
+
+    <select id="pageInternalMeeting" resultType="com.ruoyi.manage.dto.InternalMeetingDto">
+        select *
+        from (select cim.*,
+        (select GROUP_CONCAT(name)
+        from user
+        where find_in_set(id, cim.participant)) participant_name
+        from cnas_internal_meeting cim
+        order by cim.create_time desc
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalPlanDetailMapper.xml b/cnas-manage/src/main/resources/mapper/InternalPlanDetailMapper.xml
new file mode 100644
index 0000000..3ca2756
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalPlanDetailMapper.xml
@@ -0,0 +1,6 @@
+<?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.yuanchu.mom.mapper.InternalPlanDetailMapper">
+
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalPlanMapper.xml b/cnas-manage/src/main/resources/mapper/InternalPlanMapper.xml
new file mode 100644
index 0000000..72f4dd5
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalPlanMapper.xml
@@ -0,0 +1,14 @@
+<?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.yuanchu.mom.mapper.InternalPlanMapper">
+    <!-- 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ -->
+    <select id="pageInternalPlan" resultType="com.ruoyi.manage.dto.InternalPlanDto">
+        select *
+        from (select *
+        from cnas_internal_plan
+        order by create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalReportMapper.xml b/cnas-manage/src/main/resources/mapper/InternalReportMapper.xml
new file mode 100644
index 0000000..afb1fbd
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalReportMapper.xml
@@ -0,0 +1,14 @@
+<?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.yuanchu.mom.mapper.InternalReportMapper">
+    <!-- 鍐呭鎶ュ憡鍒嗛〉鏌ヨ -->
+    <select id="pageInternalReport" resultType="com.ruoyi.manage.pojo.InternalReport">
+        select *
+        from (select *
+        from cnas_internal_report
+        order by create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageControlPlanListMapper.xml b/cnas-manage/src/main/resources/mapper/ManageControlPlanListMapper.xml
new file mode 100644
index 0000000..4b460a9
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageControlPlanListMapper.xml
@@ -0,0 +1,33 @@
+<?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.yuanchu.mom.mapper.ManageControlPlanListMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageControlPlanList">
+        <id column="id" property="id" />
+        <result column="job_activity" property="jobActivity" />
+        <result column="category" property="category" />
+        <result column="description" property="description" />
+        <result column="result" property="result" />
+        <result column="intolerable" property="intolerable" />
+        <result column="plan" property="plan" />
+        <result column="editor" property="editor" />
+        <result column="editor_date" property="editorDate" />
+        <result column="approval" property="approval" />
+        <result column="approval_date" property="approvalDate" />
+        <result column="approve" property="approve" />
+        <result column="approve_date" property="approveDate" />
+    </resultMap>
+
+    <select id="getPageList" resultType="com.ruoyi.manage.vo.ManageControlPlanListVo">
+        select c.*, u1.name editor_name, u2.name approval_name, u3.name approve_name
+        from cnas_manage_control_plan_list c
+                 left join user u1 on u1.id = c.editor
+                 left join user u2 on u2.id = c.approval
+                 left join user u3 on u3.id = c.approve
+        <if test="itSExporting == true">
+            where c.approve_status = 1
+            and c.approval_status = 1
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentAlterMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentAlterMapper.xml
new file mode 100644
index 0000000..3f84de6
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentAlterMapper.xml
@@ -0,0 +1,48 @@
+<?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.yuanchu.mom.mapper.ManageDocumentAlterMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentAlter">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="create_user" property="createUser"/>
+        <result column="createUserName" property="createUserName"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="expect_alter_date" property="expectAlterDate"/>
+        <result column="actually_alter_date" property="actuallyAlterDate"/>
+        <result column="state" property="state"/>
+        <result column="check_user" property="checkUser"/>
+        <result column="checkUserName" property="checkUserName"/>
+        <result column="alter_note" property="alterNote"/>
+        <result column="alter_before_code" property="alterBeforeCode"/>
+        <result column="alter_before_name" property="alterBeforeName"/>
+        <result column="alter_before_version" property="alterBeforeVersion"/>
+        <result column="alter_after_code" property="alterAfterCode"/>
+        <result column="alter_after_name" property="alterAfterName"/>
+        <result column="alter_after_version" property="alterAfterVersion"/>
+        <result column="alter_after_url" property="alterAfterUrl"/>
+        <result column="method" property="method"/>
+    </resultMap>
+
+    <select id="pageManageDocumentAlter" resultMap="BaseResultMap">
+        select * from (select cmda.*,
+        name createUserName
+        from cnas_manage_document_alter cmda
+        left join user u on cmda.create_user = u.id) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="getManageDocumentAlter" resultMap="BaseResultMap">
+        select cmda.*,
+               u1.name createUserName,
+               u2.name checkUserName
+        from cnas_manage_document_alter cmda
+                 left join user u1 on cmda.create_user = u1.id
+                 left join user u2 on cmda.check_user = u2.id
+        where cmda.id = #{id}
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentCancelMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentCancelMapper.xml
new file mode 100644
index 0000000..552f766
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentCancelMapper.xml
@@ -0,0 +1,44 @@
+<?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.yuanchu.mom.mapper.ManageDocumentCancelMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentCancel">
+        <id column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="createUserName" property="createUserName"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="name" property="name"/>
+        <result column="version" property="version"/>
+        <result column="document_state" property="documentState"/>
+        <result column="method" property="method"/>
+        <result column="cancel_note" property="cancelNote"/>
+        <result column="check_user" property="checkUser"/>
+        <result column="checkUserName" property="checkUserName"/>
+        <result column="expect_cancel_date" property="expectCancelDate"/>
+        <result column="actually_cancel_date" property="actuallyCancelDate"/>
+        <result column="state" property="state"/>
+    </resultMap>
+
+    <select id="pageManageDocumentCancel" resultMap="BaseResultMap">
+        select * from (select mdc.*,
+        u.name createUserName
+        from cnas_manage_document_cancel mdc
+        left join user u on mdc.create_user = u.id)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="getManageDocumentCancel" resultMap="BaseResultMap">
+        select mdc.*,
+               u1.name createUserName,
+               u2.name checkUserName
+        from cnas_manage_document_cancel mdc
+                 left join user u1 on mdc.create_user = u1.id
+                 left join user u2 on mdc.check_user = u2.id
+        where mdc.id=#{id}
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentControlledMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentControlledMapper.xml
new file mode 100644
index 0000000..ec28677
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentControlledMapper.xml
@@ -0,0 +1,42 @@
+<?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.yuanchu.mom.mapper.ManageDocumentControlledMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentControlled">
+        <id column="id" property="id"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="type" property="type"/>
+        <result column="name" property="name"/>
+        <result column="version" property="version"/>
+        <result column="writer" property="writer"/>
+        <result column="submit_date" property="submitDate"/>
+        <result column="instructions" property="instructions"/>
+        <result column="state" property="state"/>
+        <result column="url" property="url"/>
+        <result column="duty_user" property="dutyUser"/>
+        <result column="dutyUserName" property="dutyUserName"/>
+        <result column="create_user" property="createUser"/>
+        <result column="createUserName" property="createUserName"/>
+        <result column="createUserDepartLims" property="createUserDepartLims"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <select id="pageManageDocumentControlled" resultMap="BaseResultMap">
+        select * from (select cmdc.*, u1.name createUserName, u2.name dutyUserName
+        from cnas_manage_document_controlled cmdc
+        left join user u1 on cmdc.create_user = u1.id
+        left join user u2 on cmdc.duty_user = u2.id)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="getManageDocumentControlled" resultMap="BaseResultMap">
+        select cmdc.*, u1.name createUserName, u2.name dutyUserName
+        from cnas_manage_document_controlled cmdc
+                 left join user u1 on cmdc.create_user = u1.id
+                 left join user u2 on cmdc.duty_user = u2.id
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentIssueRecycleMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentIssueRecycleMapper.xml
new file mode 100644
index 0000000..c31ff1e
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentIssueRecycleMapper.xml
@@ -0,0 +1,54 @@
+<?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.yuanchu.mom.mapper.ManageDocumentIssueRecycleMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentIssueRecycle">
+        <id column="id" property="id"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="name" property="name"/>
+        <result column="version" property="version"/>
+        <result column="state" property="state"/>
+        <result column="document_state" property="documentState"/>
+        <result column="issue_code" property="issueCode"/>
+        <result column="issue_user" property="issueUser"/>
+        <result column="issue_date" property="issueDate"/>
+        <result column="issue_note" property="issueNote"/>
+        <result column="receive_user" property="receiveUser"/>
+        <result column="receive_date" property="receiveDate"/>
+        <result column="recycle_code" property="recycleCode"/>
+        <result column="recycle_user" property="recycleUser"/>
+        <result column="recycle_date" property="recycleDate"/>
+        <result column="recycle_note" property="recycleNote"/>
+        <result column="create_user" property="createUser"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="url" property="url"/>
+    </resultMap>
+
+    <select id="pageManageDocumentIssueRecycle" resultType="com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto">
+        select * from (select cmdir.*,
+        u1.name issueUserName,
+        u2.name recycleUserName,
+        u3.name receiveUserName
+        from cnas_manage_document_issue_recycle cmdir
+        left join user u1 on issue_user=u1.id
+        left join user u2 on recycle_user=u2.id
+        left join user u3 on receive_user=u3.id) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="getManageDocumentIssueRecycle" resultType="com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto">
+        select cmdir.*,
+               u1.name issueUserName,
+               u2.name recycleUserName,
+               u3.name receiveUserNmae
+        from cnas_manage_document_issue_recycle cmdir
+                 left join user u1 on issue_user=u1.id
+                 left join user u2 on recycle_user=u2.id
+                 left join user u3 on receive_user=u3.id
+        where cmdir.id=#{id}
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentListMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentListMapper.xml
new file mode 100644
index 0000000..d775843
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentListMapper.xml
@@ -0,0 +1,26 @@
+<?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.yuanchu.mom.mapper.ManageDocumentListMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentList">
+        <id column="id" property="id"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="type" property="type"/>
+        <result column="name" property="name"/>
+        <result column="version" property="version"/>
+        <result column="writer" property="writer"/>
+        <result column="effective_date" property="effectiveDate"/>
+        <result column="state" property="state"/>
+        <result column="url" property="url"/>
+        <result column="create_user" property="createUser"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+    <select id="pageManageDocumentList" resultType="com.ruoyi.manage.pojo.ManageDocumentList">
+        select * from (select * from cnas_manage_document_list ) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageMeetingMapper.xml b/cnas-manage/src/main/resources/mapper/ManageMeetingMapper.xml
new file mode 100644
index 0000000..07e58f3
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageMeetingMapper.xml
@@ -0,0 +1,32 @@
+<?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.yuanchu.mom.mapper.ManageMeetingMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageMeeting">
+        <id column="id" property="id" />
+        <result column="meeting_time" property="meetingTime" />
+        <result column="place" property="place" />
+        <result column="compere" property="compere" />
+        <result column="content" property="content" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+    <select id="page" resultType="com.ruoyi.manage.dto.ManageMeetingDto">
+        select cmm.* from cnas_manage_meeting  cmm
+        <where>
+            <if test="startTime != null and startTime != ''">
+                meeting_time >= #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and #{endTime} >= meeting_time
+            </if>
+            <if test="place != null and place != ''">
+                and place = #{place}
+            </if>
+        </where>
+    </select>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageMeetingParticipantsMapper.xml b/cnas-manage/src/main/resources/mapper/ManageMeetingParticipantsMapper.xml
new file mode 100644
index 0000000..f11d7e4
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageMeetingParticipantsMapper.xml
@@ -0,0 +1,17 @@
+<?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.yuanchu.mom.mapper.ManageMeetingParticipantsMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageMeetingParticipants">
+        <id column="id" property="id" />
+        <result column="participants" property="participants" />
+        <result column="department" property="department" />
+        <result column="meeting_id" property="meetingId" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordAuditMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordAuditMapper.xml
new file mode 100644
index 0000000..da2ca90
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordAuditMapper.xml
@@ -0,0 +1,50 @@
+<?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.yuanchu.mom.mapper.ManageRecordAuditMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordAudit">
+        <id column="id" property="id"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="document_name" property="documentName"/>
+        <result column="capter" property="capter"/>
+        <result column="pages" property="pages"/>
+        <result column="number" property="number"/>
+        <result column="before_version" property="beforeVersion"/>
+        <result column="after_version" property="afterVersion"/>
+        <result column="alter_thing" property="alterThing"/>
+        <result column="alter_user" property="alterUser"/>
+        <result column="alterUserName" property="alterUserName"/>
+        <result column="ratify_user" property="ratifyUser"/>
+        <result column="ratifyUserName" property="ratifyUserName"/>
+        <result column="ratifyUserUrl" property="ratifyUserUrl"/>
+        <result column="date" property="date"/>
+        <result column="create_user" property="createUser"/>
+        <result column="createUserName" property="createUserName"/>
+        <result column="createUserDepart" property="createUserDepart"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="reason" property="reason"/>
+        <result column="before_depart" property="beforeDepart"/>
+        <result column="after_depart" property="afterDepart"/>
+        <result column="applicant" property="applicant"/>
+        <result column="formulation" property="formulation"/>
+        <result column="audit" property="audit"/>
+        <result column="method" property="method"/>
+    </resultMap>
+
+    <select id="pageManageRecordAudit" resultMap="BaseResultMap">
+        select * from (select cmra.*,
+        u1.name createUserName,
+        u2.name alterUserName,
+        u3.signature_url ratifyUserUrl,
+        u3.name ratifyUserName
+        from cnas_manage_record_audit cmra
+        left join user u1 on cmra.create_user = u1.id
+        left join user u2 on cmra.alter_user = u2.id
+        left join user u3 on cmra.ratify_user = u3.id)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordCancelMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordCancelMapper.xml
new file mode 100644
index 0000000..e6ddc49
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordCancelMapper.xml
@@ -0,0 +1,34 @@
+<?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.yuanchu.mom.mapper.ManageRecordCancelMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordCancel">
+        <id column="id" property="id"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="document_name" property="documentName"/>
+        <result column="qty" property="qty"/>
+        <result column="reason" property="reason"/>
+        <result column="create_user" property="createUser"/>
+        <result column="createUserName" property="createUserName"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="ratify_user" property="ratifyUser"/>
+        <result column="ratify_state" property="ratifyState"/>
+        <result column="ratifyUserName" property="ratifyUserName"/>
+        <result column="ratify_time" property="ratifyTime"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+    <select id="pageManageRecordCancel" resultMap="BaseResultMap">
+        select * from (select cmrc.*,
+        u1.name createUserName,
+        u2.name ratifyUserName
+        from cnas_manage_record_cancel cmrc
+        left join user u1 on cmrc.create_user = u1.id
+        left join user u2 on cmrc.ratify_user = u2.id)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordCheckMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordCheckMapper.xml
new file mode 100644
index 0000000..c0be1d4
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordCheckMapper.xml
@@ -0,0 +1,35 @@
+<?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.yuanchu.mom.mapper.ManageRecordCheckMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordCheck">
+        <id column="id" property="id"/>
+        <result column="document_name" property="documentName"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="document_version" property="documentVersion"/>
+        <result column="write_user" property="writeUser"/>
+        <result column="writeUserName" property="writeUserName"/>
+        <result column="check_user" property="checkUser"/>
+        <result column="checkUserName" property="checkUserName"/>
+        <result column="check_state" property="checkState"/>
+        <result column="ratify_user" property="ratifyUser"/>
+        <result column="ratifyUserName" property="ratifyUserName"/>
+        <result column="ratify_state" property="ratifyState"/>
+        <result column="ratify_date" property="ratifyDate"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+    <select id="pageManageRecordCheck" resultMap="BaseResultMap">
+        select * from (select cmrc.*,
+        u1.name writeUserName,
+        u2.name checkUserName,
+        u3.name ratifyUserName
+        from cnas_manage_record_check cmrc
+        left join user u1 on write_user=u1.id
+        left join user u2 on check_user=u2.id
+        left join user u3 on ratify_user=u3.id)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsMapper.xml
new file mode 100644
index 0000000..4c314bd
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsMapper.xml
@@ -0,0 +1,27 @@
+<?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.yuanchu.mom.mapper.ManageRecordIntervalsMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordIntervals">
+        <id column="id" property="id"/>
+        <result column="document_name" property="documentName"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="document_version" property="documentVersion"/>
+        <result column="revision" property="revision"/>
+        <result column="suitability" property="suitability"/>
+        <result column="remark" property="remark"/>
+        <result column="create_user" property="createUser"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="record_intervals_total_id" property="recordIntervalsTotalId"/>
+    </resultMap>
+
+    <select id="pageManageRecordIntervals" resultMap="BaseResultMap">
+        select *
+        from (select * from cnas_manage_record_intervals) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsTotalMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsTotalMapper.xml
new file mode 100644
index 0000000..0d79681
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsTotalMapper.xml
@@ -0,0 +1,33 @@
+<?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.yuanchu.mom.mapper.ManageRecordIntervalsTotalMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordIntervalsTotal">
+        <id column="id" property="id" />
+        <result column="ratify_user" property="ratifyUser"/>
+        <result column="ratifyUserName" property="ratifyUserName"/>
+        <result column="ratify_state" property="ratifyState"/>
+        <result column="ratify_date" property="ratifyDate"/>
+        <result column="ratify_url" property="ratifyUrl"/>
+        <result column="submit_user" property="submitUser"/>
+        <result column="submitUserName" property="submitUserName"/>
+        <result column="submit_url" property="submitUrl"/>
+        <result column="submit_date" property="submitDate"/>
+        <result column="year" property="year"/>
+        <result column="total_num" property="totalNum"/>
+        <result column="url" property="url"/>
+    </resultMap>
+
+    <select id="pageManageRecordIntervalsTotal" resultMap="BaseResultMap">
+        select * from (select cmrit.*,
+        u1.name submitUserName,
+        u2.name ratifyUserName
+        from cnas_manage_record_intervals_total cmrit
+        left join user u1 on u1.id=submit_user
+        left join user u2 on u2.id=ratify_user)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordIssueRecycleMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordIssueRecycleMapper.xml
new file mode 100644
index 0000000..1d9616e
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordIssueRecycleMapper.xml
@@ -0,0 +1,33 @@
+<?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.yuanchu.mom.mapper.ManageRecordIssueRecycleMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordIssueRecycle">
+        <id column="id" property="id"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="document_name" property="documentName"/>
+        <result column="document_version" property="documentVersion"/>
+        <result column="pages" property="pages"/>
+        <result column="document_type" property="documentType"/>
+        <result column="number" property="number"/>
+        <result column="depart_lims" property="departLims"/>
+        <result column="receive_user" property="receiveUser"/>
+        <result column="receiveUserName" property="receiveUserName"/>
+        <result column="receive_date" property="receiveDate"/>
+        <result column="signed_user" property="signedUser"/>
+        <result column="signedUserName" property="signedUserName"/>
+        <result column="signed_date" property="signedDate"/>
+    </resultMap>
+
+    <select id="pageManageRecordIssueRecycle" resultMap="BaseResultMap">
+        select * from (select cmrir.*,
+        u1.name receiveUserName,
+        u2.name signedUserName
+        from cnas_manage_record_issue_recycle cmrir
+        left join user u1 on receive_user=u1.id
+        left join user u2 on signed_user=u2.id)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordTotalMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordTotalMapper.xml
new file mode 100644
index 0000000..db979cd
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordTotalMapper.xml
@@ -0,0 +1,32 @@
+<?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.yuanchu.mom.mapper.ManageRecordTotalMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordTotal">
+        <id column="id" property="id"/>
+        <result column="ratify_user" property="ratifyUser"/>
+        <result column="ratifyUserName" property="ratifyUserName"/>
+        <result column="ratify_state" property="ratifyState"/>
+        <result column="ratify_date" property="ratifyDate"/>
+        <result column="ratify_url" property="ratifyUrl"/>
+        <result column="submit_user" property="submitUser"/>
+        <result column="submitUserName" property="submitUserName"/>
+        <result column="submit_url" property="submitUrl"/>
+        <result column="submit_date" property="submitDate"/>
+        <result column="year" property="year"/>
+        <result column="total_num" property="totalNum"/>
+        <result column="url" property="url"/>
+    </resultMap>
+
+    <select id="pageProcessTotaldeal" resultMap="BaseResultMap">
+        select * from (select cmrt.*,
+        u1.name submitUserName,
+        u2.name ratifyUserName
+        from cnas_manage_record_total cmrt
+        left join user u1 on u1.id=submit_user
+        left join user u2 on u2.id=ratify_user)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordVerifyMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordVerifyMapper.xml
new file mode 100644
index 0000000..dad537b
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordVerifyMapper.xml
@@ -0,0 +1,23 @@
+<?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.yuanchu.mom.mapper.ManageRecordVerifyMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordVerify">
+        <id column="id" property="id"/>
+        <result column="document_name" property="documentName"/>
+        <result column="document_code" property="documentCode"/>
+        <result column="standard_name" property="standardName"/>
+        <result column="standard_code" property="standardCode"/>
+        <result column="effective_date" property="effectiveDate"/>
+        <result column="cancel_date" property="cancelDate"/>
+        <result column="note" property="note"/>
+        <result column="manage_record_total_id" property="manageRecordTotalId"/>
+    </resultMap>
+
+    <select id="pageManageRecordVerify" resultMap="BaseResultMap">
+        select * from (select * from cnas_manage_record_verify)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageReviewProgramFileMapper.xml b/cnas-manage/src/main/resources/mapper/ManageReviewProgramFileMapper.xml
new file mode 100644
index 0000000..f02a0d4
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageReviewProgramFileMapper.xml
@@ -0,0 +1,17 @@
+<?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.yuanchu.mom.mapper.ManageReviewProgramFileMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageReviewProgramFile">
+        <id column="id" property="id" />
+        <result column="file_name" property="fileName" />
+        <result column="review_id" property="reviewId" />
+        <result column="url" property="url" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageReviewProgramMapper.xml b/cnas-manage/src/main/resources/mapper/ManageReviewProgramMapper.xml
new file mode 100644
index 0000000..08b19a6
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageReviewProgramMapper.xml
@@ -0,0 +1,41 @@
+<?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.yuanchu.mom.mapper.ManageReviewProgramMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageReviewProgram">
+        <id column="id" property="id" />
+        <result column="review_time" property="reviewTime" />
+        <result column="judging_location" property="judgingLocation" />
+        <result column="judging_purpose" property="judgingPurpose" />
+        <result column="judging_method" property="judgingMethod" />
+        <result column="participants" property="participants" />
+        <result column="judging_scope" property="judgingScope" />
+        <result column="judging_basis" property="judgingBasis" />
+        <result column="main_context" property="mainContext" />
+        <result column="preparation_requirements" property="preparationRequirements" />
+        <result column="editor" property="editor" />
+        <result column="editor_date" property="editorDate" />
+        <result column="approve" property="approve" />
+        <result column="approve_date" property="approveDate" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+    <select id="page" resultType="com.ruoyi.manage.pojo.ManageReviewProgram">
+        select * from cnas_manage_review_program
+        <where>
+            <if test="startTime != null and startTime != ''">
+                 review_time >= #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and #{endTime} >= review_time
+            </if>
+            <if test="judgingLocation != null and judgingLocation != ''">
+                and judging_location = #{judgingLocation}
+            </if>
+        </where>
+    </select>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageReviewReportMapper.xml b/cnas-manage/src/main/resources/mapper/ManageReviewReportMapper.xml
new file mode 100644
index 0000000..9837a99
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageReviewReportMapper.xml
@@ -0,0 +1,48 @@
+<?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.yuanchu.mom.mapper.ManageReviewReportMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageReviewReport">
+        <id column="id" property="id" />
+        <result column="objective" property="objective" />
+        <result column="place" property="place" />
+        <result column="compere" property="compere" />
+        <result column="record_people" property="recordPeople" />
+        <result column="date" property="date" />
+        <result column="page" property="page" />
+        <result column="judging_method" property="judgingMethod" />
+        <result column="review_basis" property="reviewBasis" />
+        <result column="attendess" property="attendess" />
+        <result column="review_inputs" property="reviewInputs" />
+        <result column="review_process" property="reviewProcess" />
+        <result column="main_topic" property="mainTopic" />
+        <result column="matters" property="matters" />
+        <result column="head" property="head" />
+        <result column="completion_date" property="completionDate" />
+        <result column="tracking_confirmed" property="trackingConfirmed" />
+        <result column="foller_up" property="follerUp" />
+        <result column="overall_evaluation" property="overallEvaluation" />
+        <result column="audit" property="audit" />
+        <result column="approval" property="approval" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+    <select id="page" resultType="com.ruoyi.manage.pojo.ManageReviewReport">
+        select * from cnas_manage_review_report
+        <where>
+            <if test="startTime != null and startTime != ''">
+                `date` >= #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and #{endTime} >= `date`
+            </if>
+            <if test="place != null and place != ''">
+                and place = #{place}
+            </if>
+        </where>
+    </select>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRiskAssessmentResultsMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRiskAssessmentResultsMapper.xml
new file mode 100644
index 0000000..099738a
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRiskAssessmentResultsMapper.xml
@@ -0,0 +1,38 @@
+<?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.yuanchu.mom.mapper.ManageRiskAssessmentResultsMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRiskAssessmentResults">
+        <id column="id" property="id" />
+        <result column="venue" property="venue" />
+        <result column="hazard" property="hazard" />
+        <result column="accidents" property="accidents" />
+        <result column="injury" property="injury" />
+        <result column="risk_L" property="riskL" />
+        <result column="risk_E" property="riskE" />
+        <result column="risk_C" property="riskC" />
+        <result column="risk_D" property="riskD" />
+        <result column="level" property="level" />
+        <result column="conclusion" property="conclusion" />
+        <result column="measures" property="measures" />
+        <result column="editor" property="editor" />
+        <result column="editor_date" property="editorDate" />
+        <result column="approval" property="approval" />
+        <result column="approval_date" property="approvalDate" />
+        <result column="approve" property="approve" />
+        <result column="approve_date" property="approveDate" />
+    </resultMap>
+
+    <select id="getPageResults" resultType="com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo">
+        select c.*, u1.name editor_name, u2.name approval_name, u3.name approve_name
+        from cnas_manage_risk_assessment_results c
+                 left join user u1 on u1.id = c.editor
+                 left join user u2 on u2.id = c.approval
+                 left join user u3 on u3.id = c.approve
+        <if test="itSExporting == true">
+            where c.approve_status = 1
+            and c.approval_status = 1
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/static/analysis-risk-factors.docx b/cnas-manage/src/main/resources/static/analysis-risk-factors.docx
new file mode 100644
index 0000000..e6d0e8a
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/analysis-risk-factors.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/audit-deal.docx b/cnas-manage/src/main/resources/static/audit-deal.docx
new file mode 100644
index 0000000..3975bec
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/audit-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/cancel-deal.docx b/cnas-manage/src/main/resources/static/cancel-deal.docx
new file mode 100644
index 0000000..8ff99ca
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/cancel-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/check-deal.docx b/cnas-manage/src/main/resources/static/check-deal.docx
new file mode 100644
index 0000000..594c8eb
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/check-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/customer-satisfaction-questionnaire.docx b/cnas-manage/src/main/resources/static/customer-satisfaction-questionnaire.docx
new file mode 100644
index 0000000..f231417
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/customer-satisfaction-questionnaire.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-check.docx b/cnas-manage/src/main/resources/static/internal-check.docx
new file mode 100644
index 0000000..90f7739
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-check.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-correct.docx b/cnas-manage/src/main/resources/static/internal-correct.docx
new file mode 100644
index 0000000..6a99be5
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-correct.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-implement.docx b/cnas-manage/src/main/resources/static/internal-implement.docx
new file mode 100644
index 0000000..e295ae2
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-implement.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-meeting.docx b/cnas-manage/src/main/resources/static/internal-meeting.docx
new file mode 100644
index 0000000..6459a92
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-meeting.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-plan.docx b/cnas-manage/src/main/resources/static/internal-plan.docx
new file mode 100644
index 0000000..1e1bf70
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-plan.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-report.docx b/cnas-manage/src/main/resources/static/internal-report.docx
new file mode 100644
index 0000000..055ada8
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-report.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/intervals-deal.docx b/cnas-manage/src/main/resources/static/intervals-deal.docx
new file mode 100644
index 0000000..1bdf546
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/intervals-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/recycle-deal.docx b/cnas-manage/src/main/resources/static/recycle-deal.docx
new file mode 100644
index 0000000..3d7fde4
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/recycle-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/review-meet.docx b/cnas-manage/src/main/resources/static/review-meet.docx
new file mode 100644
index 0000000..4ed5d98
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/review-meet.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/review-program.docx b/cnas-manage/src/main/resources/static/review-program.docx
new file mode 100644
index 0000000..141cd5b
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/review-program.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/review-report.docx b/cnas-manage/src/main/resources/static/review-report.docx
new file mode 100644
index 0000000..c33abaf
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/review-report.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/risk-factor-identification-risk.docx b/cnas-manage/src/main/resources/static/risk-factor-identification-risk.docx
new file mode 100644
index 0000000..f0898be
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/risk-factor-identification-risk.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/verify-deal.docx b/cnas-manage/src/main/resources/static/verify-deal.docx
new file mode 100644
index 0000000..139d7ae
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/verify-deal.docx
Binary files differ
diff --git a/inspect-server/pom.xml b/inspect-server/pom.xml
index fc8d299..ed779d7 100644
--- a/inspect-server/pom.xml
+++ b/inspect-server/pom.xml
@@ -12,18 +12,54 @@
     <artifactId>inspect-server</artifactId>
 
     <dependencies>
+        <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
+
+        <!-- 鏍稿績妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-framework</artifactId>
         </dependency>
+
+        <!--鍩虹妯″潡-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>basic-server</artifactId>
+        </dependency>
+
+        <!-- 绯荤粺妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-system</artifactId>
         </dependency>
+
+        <!-- 缁╂晥鏈ㄥ潡 -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>performance-server</artifactId>
+        </dependency>
+
+        <!-- poi-tl鍖呯敓鎴愭姤鍛� -->
+        <dependency>
+            <groupId>com.deepoove</groupId>
+            <artifactId>poi-tl</artifactId>
+        </dependency>
+
+        <!--word杞琾df-->
+        <!--mvn install:install-file -Dfile=aspose-words-15.12.0-jdk16.jar -DgroupId=com.aspose -DartifactId=aspose-words -Dversion=15.12.0 -Dpackaging=jar-->
+        <dependency>
+            <groupId>com.aspose</groupId>
+            <artifactId>aspose-words</artifactId>
+            <version>15.12.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itextpdf</artifactId>
+            <version>5.0.6</version>
+        </dependency>
     </dependencies>
 
     <properties>
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java
deleted file mode 100644
index fc15a45..0000000
--- a/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.ruoyi.basic.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 妫�楠屾牱鍝�
- * @TableName ins_sample
- */
-@TableName(value ="ins_sample")
-@Data
-public class InsSample implements Serializable {
-    /**
-     *
-     */
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    /**
-     * 1锛氬悎鏍� 0锛氫笉鍚堟牸
-     */
-    private Integer insResult;
-
-    /**
-     * 澶栭敭锛歩ns_order琛╥d
-     */
-    private Integer insOrderId;
-
-    /**
-     * 閰嶅鏍峰搧鍨嬪彿
-     */
-    private String joinModel;
-
-    /**
-     * 閰嶅鏍峰搧鍚嶇О
-     */
-    private String joinName;
-
-    /**
-     * 閰嶅鏍峰搧鏁伴噺
-     */
-    private Integer joinNum;
-
-    /**
-     * 鏍峰搧缂栫爜
-     */
-    private String sampleCode;
-
-    /**
-     * 妫�楠屽伐鍘�
-     */
-    private String factory;
-
-    /**
-     * 瀹為獙瀹ゅ悕绉�
-     */
-    private String laboratory;
-
-    /**
-     * 鏍峰搧绫诲瀷
-     */
-    private String sampleType;
-
-    /**
-     * 鏍峰搧鍚嶇О
-     */
-    private String sample;
-
-    /**
-     * 瑙勬牸鍨嬪彿
-     */
-    private String model;
-
-    /**
-     * 妫�楠岀姸鎬�(0锛氬緟妫�楠�1:妫�楠屼腑 2:宸叉楠�3锛氬緟澶嶆牳4锛氬鏍告湭閫氳繃5锛氬鏍搁�氳繃)
-     */
-    private Integer insState;
-
-    /**
-     * 澶囨敞
-     */
-    private String remark;
-
-    private Integer standardMethodListId;
-
-    @ApiModelProperty("鏍峰搧鍗曚綅")
-    private String unit;
-
-    private Integer cellId;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty("淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    private Integer parentId;
-
-    @ApiModelProperty("鏁伴噺")
-    private Integer quantity;
-
-    @ApiModelProperty("鐗规畩鏍囧噯鏂规硶")
-    private String specialStandardMethod;
-
-    @TableField(select = false,exist = false)
-    private Integer num=1;
-
-}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java
new file mode 100644
index 0000000..f3657e4
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java
@@ -0,0 +1,123 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 妫�楠屾牱鍝�
+ * @TableName ins_sample
+ */
+@TableName(value ="ins_sample")
+@Data
+public class InsSample implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 1锛氬悎鏍� 0锛氫笉鍚堟牸
+     */
+    private Integer insResult;
+
+    /**
+     * 澶栭敭锛歩ns_order琛╥d
+     */
+    private Integer insOrderId;
+
+    /**
+     * 閰嶅鏍峰搧鍨嬪彿
+     */
+    private String joinModel;
+
+    /**
+     * 閰嶅鏍峰搧鍚嶇О
+     */
+    private String joinName;
+
+    /**
+     * 閰嶅鏍峰搧鏁伴噺
+     */
+    private Integer joinNum;
+
+    /**
+     * 鏍峰搧缂栫爜
+     */
+    private String sampleCode;
+
+    /**
+     * 妫�楠屽伐鍘�
+     */
+    private String factory;
+
+    /**
+     * 瀹為獙瀹ゅ悕绉�
+     */
+    private String laboratory;
+
+    /**
+     * 鏍峰搧绫诲瀷
+     */
+    private String sampleType;
+
+    /**
+     * 鏍峰搧鍚嶇О
+     */
+    private String sample;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String model;
+
+    /**
+     * 妫�楠岀姸鎬�(0锛氬緟妫�楠�1:妫�楠屼腑 2:宸叉楠�3锛氬緟澶嶆牳4锛氬鏍告湭閫氳繃5锛氬鏍搁�氳繃)
+     */
+    private Integer insState;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+    private Integer standardMethodListId;
+
+    @ApiModelProperty("鏍峰搧鍗曚綅")
+    private String unit;
+
+    private Integer cellId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    private Integer parentId;
+
+    @ApiModelProperty("鏁伴噺")
+    private Integer quantity;
+
+    @ApiModelProperty("鐗规畩鏍囧噯鏂规硶")
+    private String specialStandardMethod;
+
+    @TableField(select = false,exist = false)
+    private Integer num=1;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/util/HackLoopTableRenderPolicy.java b/inspect-server/src/main/java/com/ruoyi/inspect/util/HackLoopTableRenderPolicy.java
new file mode 100644
index 0000000..9343a26
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/util/HackLoopTableRenderPolicy.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2014-2020 Sayi
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.ruoyi.inspect.util;
+
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.exception.RenderException;
+import com.deepoove.poi.policy.RenderPolicy;
+import com.deepoove.poi.render.compute.RenderDataCompute;
+import com.deepoove.poi.render.processor.DocumentProcessor;
+import com.deepoove.poi.resolver.TemplateResolver;
+import com.deepoove.poi.template.ElementTemplate;
+import com.deepoove.poi.template.MetaTemplate;
+import com.deepoove.poi.template.run.RunTemplate;
+import com.deepoove.poi.util.ReflectionUtils;
+import com.deepoove.poi.util.TableTools;
+import org.apache.poi.xwpf.usermodel.*;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Hack for loop table row
+ *
+ * @author Sayi
+ *
+ */
+public class HackLoopTableRenderPolicy implements RenderPolicy {
+
+    private String prefix;
+    private String suffix;
+    private boolean onSameLine;
+
+    public HackLoopTableRenderPolicy() {
+        this(false);
+    }
+
+    public HackLoopTableRenderPolicy(boolean onSameLine) {
+        this("[", "]", onSameLine);
+    }
+
+    public HackLoopTableRenderPolicy(String prefix, String suffix) {
+        this(prefix, suffix, false);
+    }
+
+    public HackLoopTableRenderPolicy(String prefix, String suffix, boolean onSameLine) {
+        this.prefix = prefix;
+        this.suffix = suffix;
+        this.onSameLine = onSameLine;
+    }
+
+    @Override
+    public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
+        RunTemplate runTemplate = (RunTemplate) eleTemplate;
+        XWPFRun run = runTemplate.getRun();
+        try {
+            if (!TableTools.isInsideTable(run)) {
+                throw new IllegalStateException(
+                        "The template tag " + runTemplate.getSource() + " must be inside a table");
+            }
+            XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
+            XWPFTable table = tagCell.getTableRow().getTable();
+            run.setText("", 0);
+
+            int templateRowIndex = getTemplateRowIndex(tagCell);
+            if (null != data && data instanceof Iterable) {
+                Iterator<?> iterator = ((Iterable<?>) data).iterator();
+                XWPFTableRow templateRow = table.getRow(templateRowIndex);
+                int insertPosition = templateRowIndex;
+
+                TemplateResolver resolver = new TemplateResolver(template.getConfig().copy(prefix, suffix));
+                boolean firstFlag = true;
+                while (iterator.hasNext()) {
+                    insertPosition = templateRowIndex++;
+                    XWPFTableRow nextRow = table.insertNewTableRow(insertPosition);
+                    setTableRow(table, templateRow, insertPosition);
+
+                    // double set row
+                    XmlCursor newCursor = templateRow.getCtRow().newCursor();
+                    newCursor.toPrevSibling();
+                    XmlObject object = newCursor.getObject();
+                    nextRow = new XWPFTableRow((CTRow) object, table);
+                    if (!firstFlag) {
+                        // update VMerge cells for non-first row
+                        List<XWPFTableCell> tableCells = nextRow.getTableCells();
+                        for (XWPFTableCell cell : tableCells) {
+                            CTTcPr tcPr = TableTools.getTcPr(cell);
+                            CTVMerge vMerge = tcPr.getVMerge();
+                            if (null == vMerge) continue;
+                            if (STMerge.RESTART == vMerge.getVal()) {
+                                vMerge.setVal(STMerge.CONTINUE);
+                            }
+                        }
+                    } else {
+                        firstFlag = false;
+                    }
+                    setTableRow(table, nextRow, insertPosition);
+
+                    RenderDataCompute dataCompute = template.getConfig().getRenderDataComputeFactory()
+                            .newCompute(iterator.next());
+                    List<XWPFTableCell> cells = nextRow.getTableCells();
+                    cells.forEach(cell -> {
+                        List<MetaTemplate> templates = resolver.resolveBodyElements(cell.getBodyElements());
+                        new DocumentProcessor(template, resolver, dataCompute).process(templates);
+                    });
+                }
+            }
+
+            table.removeRow(templateRowIndex);
+            afterloop(table, data);
+        } catch (Exception e) {
+            throw new RenderException("HackLoopTable for " + eleTemplate + "error: " + e.getMessage(), e);
+        }
+    }
+
+    private int getTemplateRowIndex(XWPFTableCell tagCell) {
+        XWPFTableRow tagRow = tagCell.getTableRow();
+        return onSameLine ? getRowIndex(tagRow) : (getRowIndex(tagRow) + 1);
+    }
+
+    protected void afterloop(XWPFTable table, Object data) {
+    }
+
+    @SuppressWarnings("unchecked")
+    private void setTableRow(XWPFTable table, XWPFTableRow templateRow, int pos) {
+        List<XWPFTableRow> rows = (List<XWPFTableRow>) ReflectionUtils.getValue("tableRows", table);
+        rows.set(pos, templateRow);
+        table.getCTTbl().setTrArray(pos, templateRow.getCtRow());
+    }
+
+    private int getRowIndex(XWPFTableRow row) {
+        List<XWPFTableRow> rows = row.getTable().getRows();
+        return rows.indexOf(row);
+    }
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java b/inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java
new file mode 100644
index 0000000..4ea9c59
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java
@@ -0,0 +1,90 @@
+package com.ruoyi.inspect.util;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.deepoove.poi.data.PictureRenderData;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-17 鏄熸湡浜� 10:35:50
+ * Description: User宸ュ叿绫�
+ */
+@Component
+public class UserUtils {
+    private static UserMapper userMapper;
+
+    private static String imgUrl;
+
+    @Autowired
+    public void setUserMapper(UserMapper userMapper) {
+        UserUtils.userMapper = userMapper;
+    }
+
+    @Autowired
+    public void setImgUrl(@Value("${file.path}") String imgUrl) {
+        UserUtils.imgUrl = imgUrl;
+    }
+
+    /**
+     * 閫氳繃浜哄憳id鑾峰彇鐢ㄦ埛绛惧悕鍦板潃
+     * @param userId 浜哄憳id
+     * @return 鐢ㄦ埛绛惧悕鍦板潃
+     */
+    public static String getUserSignatureUrl(Integer userId) {
+        String userSignatureUrl = null;
+        if (userId != null) {
+            userSignatureUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                            .eq(User::getId, userId))
+                    .getSignatureUrl();
+            if (StringUtils.isBlank(userSignatureUrl)) {
+                throw new ErrorException("鎵句笉鍒拌浜哄憳绛惧悕");
+            }
+            return imgUrl + "\\" + userSignatureUrl;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * 閫氳繃浜哄憳id鑾峰彇娓叉煋Word鐢ㄦ埛绛惧悕瀵硅薄
+     * @param userId 浜哄憳id
+     * @return 鐢ㄦ埛绛惧悕瀵硅薄 or null
+     */
+    public static PictureRenderData getFinalUserSignatureUrl(Integer userId) {
+        String userSignatureUrl = null;
+        if (userId != null) {
+            userSignatureUrl = userMapper.selectById(userId)
+                    .getSignatureUrl();
+            if (StringUtils.isBlank(userSignatureUrl)) {
+                throw new ErrorException("鎵句笉鍒拌浜哄憳绛惧悕");
+            }
+        }
+        return StringUtils.isNotBlank(userSignatureUrl) ? Pictures.ofLocal(imgUrl + "/" + userSignatureUrl).create() : null;
+    }
+
+
+    /**
+     * 閫氳繃鍚嶅瓧鑾峰彇娓叉煋Word鐢ㄦ埛绛惧悕瀵硅薄
+     * @param userName 浜哄憳鍚嶅瓧
+     * @return 鐢ㄦ埛绛惧悕瀵硅薄 or null
+     */
+    public static PictureRenderData getFinalUserSignatureUrl(String userName) {
+        String userSignatureUrl = null;
+        if (userName != null) {
+            userSignatureUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                            .eq(User::getName, userName))
+                    .getSignatureUrl();
+            if (StringUtils.isBlank(userSignatureUrl)) {
+                throw new ErrorException("鎵句笉鍒拌浜哄憳绛惧悕");
+            }
+        }
+        return StringUtils.isNotBlank(userSignatureUrl) ? Pictures.ofLocal(imgUrl + "/" + userSignatureUrl).create() : null;
+    }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/util/XWPFDocumentUtils.java b/inspect-server/src/main/java/com/ruoyi/inspect/util/XWPFDocumentUtils.java
new file mode 100644
index 0000000..386c987
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/util/XWPFDocumentUtils.java
@@ -0,0 +1,119 @@
+package com.ruoyi.inspect.util;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+
+import java.util.*;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/16
+ */
+public class XWPFDocumentUtils {
+
+    public static void updateMergeByDocument(XWPFDocument document) {
+        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+        List<XWPFTable> xwpfTables = document.getTables();
+        for (int i = 0; i < xwpfTables.size(); i++) {
+            Set<String> set1 = new HashSet<>();
+            Map<String, Map<String, Integer>> maps = new HashMap<>();
+            for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+                for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+                    if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().contains("鈭�")) {
+                        String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+                        if (set1.add(split[1])) {
+                            Map<String, Integer> map = new HashMap<>();
+                            map.put("sr", j);
+                            map.put("sc", k);
+                            map.put("er", j + 0);
+                            map.put("ec", k + 0);
+                            maps.put(split[1], map);
+                        } else {
+                            Map<String, Integer> map1 = maps.get(split[1]);
+                            if (j == map1.get("sr")) {
+                                map1.put("ec", map1.get("ec") + 1);
+                            } else if (k == map1.get("sc")) {
+                                map1.put("er", map1.get("er") + 1);
+                            }
+                        }
+                        String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+                        xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                        xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+                        xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+                        xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+                    }
+                }
+            }
+            // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+            List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+            entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+            // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+            List<String> list = new ArrayList<>();
+            for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+                list.add(entry.getKey());
+            }
+            for (int a = list.size() - 1; a >= 0; a--) {
+                Map<String, Integer> v = maps.get(list.get(a));
+                for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+                    if (v.get("ec") > v.get("sc")) {
+                        try {
+                            mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+                        } catch (Exception e) {
+                        }
+                    }
+                }
+                if (v.get("er") > v.get("sr")) {
+                    try {
+                        mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+                    } catch (Exception e) {
+                    }
+                }
+            }
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        List<XWPFTable> xwpfTables1 = document.getTables();
+        for (int i = 0; i < xwpfTables1.size(); i++) {
+            for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                    if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                        String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                        String[] split = text.split("@");
+                        xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                        XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                        XWPFRun run = xwpfParagraph.createRun();
+                        run.setText(split[0]);
+                        if (ObjectUtils.isNotNull(split[1])) {
+                            run.addBreak();
+                            run.setText(split[1]);
+                        }
+                        xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                    }
+                }
+            }
+        }
+    }
+
+    // 姘村钩鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+        for (int i = fromCol; i <= toCol; i++) {
+            if (i == fromCol) {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+
+    // 鍨傜洿鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+        for (int i = fromRow; i <= toRow; i++) {
+            if (i == fromRow) {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+}
+
diff --git a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryCorrectionHoursMapper.java b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryCorrectionHoursMapper.java
index 96db341..d1f2978 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryCorrectionHoursMapper.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryCorrectionHoursMapper.java
@@ -20,7 +20,7 @@
  */
 public interface AuxiliaryCorrectionHoursMapper extends BaseMapper<AuxiliaryCorrectionHours> {
 
-    IPage<AuxiliaryCorrectionHoursDto> selectAuxiliaryCorrectionHours(Page page, @Param("ew") QueryWrapper<AuxiliaryCorrectionHoursDto> ew, @Param("ids") List<Long> ids);
+    IPage<AuxiliaryCorrectionHoursDto> selectAuxiliaryCorrectionHours(Page page, @Param("ew") QueryWrapper<AuxiliaryCorrectionHoursDto> ew, @Param("ids") List<Integer> ids);
 
     List<Integer> selDepartLimsByName(String departLims);
 
diff --git a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java
index a563f4a..15afc60 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java
@@ -23,25 +23,25 @@
  */
 public interface AuxiliaryOutputWorkingHoursMapper extends BaseMapper<AuxiliaryOutputWorkingHours> {
 
-    IPage<AuxiliaryOutputWorkingHoursDto> selectAuxiliaryOutputWorkingHours(Page page, @Param("ew") QueryWrapper<AuxiliaryOutputWorkingHoursDto> ew, @Param("ids") List<Long> ids);
+    IPage<AuxiliaryOutputWorkingHoursDto> selectAuxiliaryOutputWorkingHours(Page page, @Param("ew") QueryWrapper<AuxiliaryOutputWorkingHoursDto> ew, @Param("ids") List<Integer> ids);
 
     //鏌ヨ缁熻宸ユ椂瀵煎嚭鏁版嵁
-    List<AuxiliaryOutputWorkingHoursDto> selectDataByUser(@Param("ids") List<Long> ids);
+    List<AuxiliaryOutputWorkingHoursDto> selectDataByUser(@Param("ids") List<Integer> ids);
 
     //鏌ヨ璇ユ湀鐨勪骇閲忓伐鏃�
-    List<Map<String, Object>> totalHours(@Param("month") String month, @Param("ids") List<Long> ids, @Param("type") String type);
+    List<Map<String, Object>> totalHours(@Param("month") String month, @Param("ids") List<Integer> ids, @Param("type") String type);
 
 
-    List<AuxiliaryOutputWorkingHours> selectListByIds(@Param("ids") List<Long> ids);
+    List<AuxiliaryOutputWorkingHours> selectListByIds(@Param("ids") List<Integer> ids);
 
-    List<AuxiliaryOutputWorkingHours> selectLists(@Param("ew") QueryWrapper<AuxiliaryOutputWorkingHours> ew, @Param("ids") List<Long> ids);
+    List<AuxiliaryOutputWorkingHours> selectLists(@Param("ew") QueryWrapper<AuxiliaryOutputWorkingHours> ew, @Param("ids") List<Integer> ids);
 
     /**
      * 鏌ヨ
      * @param dto
      * @return
      */
-    List<AuxiliaryAllDto> selectAuxiliaryAllByMonth(@Param("dto") AuxiliaryOriginalHoursLookDto dto, @Param("userIds") List<Long> userIds);
+    List<AuxiliaryAllDto> selectAuxiliaryAllByMonth(@Param("dto") AuxiliaryOriginalHoursLookDto dto, @Param("userIds") List<Integer> userIds);
 
     /**
      * 鏌ヨ杈呭姪宸ユ椂
@@ -49,7 +49,7 @@
      * @param userIds
      * @return
      */
-    List<AuxiliaryAllDto> selectSubsidiaryAllByMonth(@Param("dto") AuxiliaryOriginalHoursLookDto dto, @Param("userIds") List<Long> userIds);
+    List<AuxiliaryAllDto> selectSubsidiaryAllByMonth(@Param("dto") AuxiliaryOriginalHoursLookDto dto, @Param("userIds") List<Integer> userIds);
 
-    List<AuxiliaryOutputWorkingHoursDto> selectAuxiliaryOutputWorkingHoursList(@Param("ew") QueryWrapper<AuxiliaryOutputWorkingHoursDto> ew, @Param("ids") List<Long> ids);
+    List<AuxiliaryOutputWorkingHoursDto> selectAuxiliaryOutputWorkingHoursList(@Param("ew") QueryWrapper<AuxiliaryOutputWorkingHoursDto> ew, @Param("ids") List<Integer> ids);
 }
diff --git a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursDayMapper.java b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursDayMapper.java
index 58d7e12..6dc4532 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursDayMapper.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursDayMapper.java
@@ -21,17 +21,17 @@
  */
 public interface AuxiliaryWorkingHoursDayMapper extends BaseMapper<AuxiliaryWorkingHoursDay> {
 
-    IPage<AuxiliaryWorkingHoursDayDto> selectAuxiliaryWorkingHoursDay(Page page, @Param("ew") QueryWrapper<AuxiliaryWorkingHoursDayDto> ew, @Param("ids") List<Long> ids);
+    IPage<AuxiliaryWorkingHoursDayDto> selectAuxiliaryWorkingHoursDay(Page page, @Param("ew") QueryWrapper<AuxiliaryWorkingHoursDayDto> ew, @Param("ids") List<Integer> ids);
 
     //鏌ヨ杈呭姪宸ユ椂瀵煎嚭淇℃伅
-    List<AuxiliaryWorkingHoursDayDto> selectDataByUser(@Param("ids") List<Long> ids);
+    List<AuxiliaryWorkingHoursDayDto> selectDataByUser(@Param("ids") List<Integer> ids);
 
-    List<AuxiliaryWorkingHoursDay> selectListByIds(@Param("ids") List<Long> ids);
+    List<AuxiliaryWorkingHoursDay> selectListByIds(@Param("ids") List<Integer> ids);
 
     //鏌ヨ璇ユ湀鐨勮緟鍔╁伐鏃�
-    List<Map<String, Object>> totalHours(@Param("month") String month, @Param("ids") List<Long> ids);
+    List<Map<String, Object>> totalHours(@Param("month") String month, @Param("ids") List<Integer> ids);
 
-    List<AuxiliaryWorkingHoursDay> selectLists(@Param("ew") QueryWrapper<AuxiliaryWorkingHoursDay> ew, @Param("ids") List<Long> ids);
+    List<AuxiliaryWorkingHoursDay> selectLists(@Param("ew") QueryWrapper<AuxiliaryWorkingHoursDay> ew, @Param("ids") List<Integer> ids);
 
     /**
      * 鏌ヨ杈呭姪宸ユ椂闆嗗悎
@@ -39,5 +39,5 @@
      * @param ids
      * @return
      */
-    List<AuxiliaryWorkingHoursDayDto> selectAuxiliaryWorkingHoursDayList(@Param("ew") QueryWrapper<AuxiliaryWorkingHoursDayDto> ew, @Param("ids") List<Long> ids);
+    List<AuxiliaryWorkingHoursDayDto> selectAuxiliaryWorkingHoursDayList(@Param("ew") QueryWrapper<AuxiliaryWorkingHoursDayDto> ew, @Param("ids") List<Integer> ids);
 }
diff --git a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryCorrectionHoursServiceImpl.java b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryCorrectionHoursServiceImpl.java
index 3cc5139..9afc078 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryCorrectionHoursServiceImpl.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryCorrectionHoursServiceImpl.java
@@ -45,7 +45,7 @@
 
     @Override
     public IPage<AuxiliaryCorrectionHoursDto> selectAuxiliaryCorrectionHours(Page page, AuxiliaryCorrectionHoursDto auxiliaryCorrectionHoursDto) {
-        List<Long> ids = new ArrayList<>();
+        List<Integer> ids = new ArrayList<>();
         String departLims = auxiliaryCorrectionHoursDto.getDepartLims();
         auxiliaryCorrectionHoursDto.setDepartLims(null);
         if (ObjectUtils.isNotEmpty(departLims)) {
@@ -63,7 +63,8 @@
         if (ids.size() == 0) {
             ids = null;
         }
-        return auxiliaryCorrectionHoursMapper.selectAuxiliaryCorrectionHours(page, QueryWrappers.queryWrappers(auxiliaryCorrectionHoursDto).eq("month", auxiliaryCorrectionHoursDto.getMonth()), ids);
+        return auxiliaryCorrectionHoursMapper.selectAuxiliaryCorrectionHours(page, QueryWrappers.queryWrappers(auxiliaryCorrectionHoursDto)
+                .eq("month", auxiliaryCorrectionHoursDto.getMonth()), ids);
     }
 
     //瀵煎叆涓婁紶
diff --git a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java
index 490b042..2bacdd7 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java
@@ -58,7 +58,7 @@
 
     @Override
     public IPage<AuxiliaryOriginalHoursDto> selectAuxiliaryOriginalHours(Page page, AuxiliaryOriginalHoursLookDto auxiliaryOriginalHoursLookDto) {
-        List<Long> ids = new ArrayList<>();
+        List<Integer> ids = new ArrayList<>();
         String departLims = auxiliaryOriginalHoursLookDto.getDepartLims();
         auxiliaryOriginalHoursLookDto.setDepartLims(null);
         String name = auxiliaryOriginalHoursLookDto.getName();
@@ -207,7 +207,7 @@
         if (StringUtils.isBlank(dto.getMonth())) {
             throw new BaseException("缂哄皯鏈堜唤");
         }
-        List<Long> userIds = new ArrayList<>();
+        List<Integer> userIds = new ArrayList<>();
 
         String name = dto.getName();
         if (ObjectUtils.isNotEmpty(name)) {
diff --git a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOutputWorkingHoursServiceImpl.java b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOutputWorkingHoursServiceImpl.java
index d087d07..a8524ef 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOutputWorkingHoursServiceImpl.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOutputWorkingHoursServiceImpl.java
@@ -59,7 +59,7 @@
         String week = auxiliaryOutputWorkingHoursDto.getWeek();
         auxiliaryOutputWorkingHoursDto.setDateTime(null);
         auxiliaryOutputWorkingHoursDto.setWeek(null);
-        List<Long> ids = new ArrayList<>();
+        List<Integer> ids = new ArrayList<>();
         if (ids.size() == 0) {
             ids = null;
         }
@@ -106,7 +106,7 @@
     public Map<String, Object> collectWorkingHours(AuxiliaryOutputWorkingHoursDto auxiliaryOutputWorkingHoursDto) {
         AuxiliaryOutputWorkingHours outputWorkingHours = new AuxiliaryOutputWorkingHours();
         AuxiliaryWorkingHoursDay workingHoursDay = new AuxiliaryWorkingHoursDay();
-        List<Long> ids = new ArrayList<>();
+        List<Integer> ids = new ArrayList<>();
         if (ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHoursDto.getWeekDay())){
             outputWorkingHours.setWeekDay(auxiliaryOutputWorkingHoursDto.getWeekDay());
             workingHoursDay.setWeekDay(auxiliaryOutputWorkingHoursDto.getWeekDay());
@@ -172,7 +172,7 @@
     public void exportWorkingHours(HttpServletResponse response) throws IOException {
         List<AuxiliaryOutputWorkingHoursDto> auxiliaryOutputWorkingHoursDtos = new ArrayList<>();
         List<AuxiliaryWorkingHoursDayDto> auxiliaryWorkingHoursDayDtos = new ArrayList<>();
-        List<Long> ids = new ArrayList<>();
+        List<Integer> ids = new ArrayList<>();
         //鏌ヨ杈呭姪宸ユ椂
         auxiliaryWorkingHoursDayDtos = auxiliaryWorkingHoursDayMapper.selectDataByUser(ids);
         //鏌ヨ缁熻宸ユ椂
@@ -210,7 +210,7 @@
         auxiliaryOutputWorkingHoursDto.setDateTime(null);
         auxiliaryOutputWorkingHoursDto.setWeek(null);
 
-        List<Long> ids = new ArrayList<>();
+        List<Integer> ids = new ArrayList<>();
         String name = auxiliaryOutputWorkingHoursDto.getName();
         if (ObjectUtils.isNotEmpty(name)) {
             ids.addAll(userMapper.selectList(Wrappers.<User>lambdaQuery().like(User::getName, name)).stream().map(User::getId).collect(Collectors.toList()));
diff --git a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursDayServiceImpl.java b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursDayServiceImpl.java
index 55fa4c2..b9f48d0 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursDayServiceImpl.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursDayServiceImpl.java
@@ -68,7 +68,7 @@
         auxiliaryWorkingHoursDayDto.setDateTime(null);
         auxiliaryWorkingHoursDayDto.setWeek(null);
         Map<String, Object> map = new HashMap<>();
-        List<Long> ids = new ArrayList<>();
+        List<Integer> ids = new ArrayList<>();
         if (ids.size() == 0) {
             ids = null;
         }
@@ -184,7 +184,7 @@
         String week = auxiliaryWorkingHoursDayDto.getWeek();
         auxiliaryWorkingHoursDayDto.setDateTime(null);
         auxiliaryWorkingHoursDayDto.setWeek(null);
-        List<Long> ids = new ArrayList<>();
+        List<Integer> ids = new ArrayList<>();
         String name = auxiliaryWorkingHoursDayDto.getName();
         if (ObjectUtils.isNotEmpty(name)) {
             ids.addAll(userMapper.selectList(Wrappers.<User>lambdaQuery().like(User::getName, name)).stream().map(User::getId).collect(Collectors.toList()));
diff --git a/pom.xml b/pom.xml
index ab947ba..8b5bb9f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,6 +44,7 @@
         <okhttp.version>4.9.0</okhttp.version>
         <hutool.version>5.8.18</hutool.version>
         <easyexcel.version>3.3.2</easyexcel.version>
+        <poi.tl.version>1.12.2</poi.tl.version>
     </properties>
 
     <!-- 渚濊禆澹版槑 -->
@@ -234,6 +235,34 @@
                 <version>${ruoyi.version}</version>
             </dependency>
 
+            <!--鍩虹妯″潡-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>basic-server</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!--涓氬姟妯″潡-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>inspect-server</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!--缁╂晥妯″潡-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>performance-server</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!--cnas浣撶郴绠$悊瑕佹眰-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>cnas-manage</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
 
             <!-- minio -->
             <dependency>
@@ -253,6 +282,13 @@
                 <groupId>com.squareup.okhttp3</groupId>
                 <artifactId>okhttp</artifactId>
                 <version>${okhttp.version}</version>
+            </dependency>
+
+            <!-- poi-tl鍖呯敓鎴愭姤鍛� -->
+            <dependency>
+                <groupId>com.deepoove</groupId>
+                <artifactId>poi-tl</artifactId>
+                <version>${poi.tl.version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
@@ -339,6 +375,7 @@
         <module>basic-server</module>
         <module>inspect-server</module>
         <module>performance-server</module>
+        <module>cnas-manage</module>
     </modules>
     <packaging>pom</packaging>
 
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 0009314..b3f8e8c 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -87,6 +87,11 @@
             <version>${ruoyi.version}</version>
         </dependency>
 
+        <!--cnas浣撶郴绠$悊瑕佹眰-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>cnas-manage</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 1db419e..84a6399 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -1,3 +1,19 @@
+
+# 鐓х墖瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+file:
+    path: D:\椤圭洰鏂囦欢瀛樺偍\img
+    # 杞琾df鏂囦欢璺緞
+    licenseUrl: D:\maven_data\yuanchu\center-lims-after\inspect-server\src\main\resources\lib\license.xml
+    # 涓婁紶鏂囦欢鍏佽鐨勬墿灞曞悕
+    allowed: png,jpg,jpeg,gif,pdf
+
+wordUrl: D:\椤圭洰鏂囦欢瀛樺偍\word
+twoCode: D:\椤圭洰鏂囦欢瀛樺偍\two_code
+phoneQrCode: http://114.132.189.42:8001/qr/qrScan?code= #浜岀淮鐮佹壂鐮乽rl
+
+excelUrl: D:\椤圭洰鏂囦欢瀛樺偍\excel
+
+
 # 鏁版嵁婧愰厤缃�
 spring:
     datasource:
@@ -6,8 +22,8 @@
         druid:
             # 涓诲簱鏁版嵁婧�
             master:
-#                url: jdbc:mysql://114.132.189.42:9004/lims-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                url: jdbc:mysql://127.0.0.1:3307/center-lims-test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                url: jdbc:mysql://114.132.189.42:9004/center-lims-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#                url: jdbc:mysql://127.0.0.1:3307/center-lims-test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                 username: root
                 password: 123456
             # 浠庡簱鏁版嵁婧�
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java
index 29d18a7..eb50fe3 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java
@@ -18,10 +18,10 @@
 
     @ApiModelProperty(value = "涓婚敭")
     @TableId(type = IdType.AUTO)
-    private Long id;
+    private Integer id;
 
     @ApiModelProperty(value = "閮ㄩ棬ID")
-    private Long deptId;
+    private Integer deptId;
 
     @ApiModelProperty(value = "鐢ㄦ埛璐﹀彿")
     private String account;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateImageUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateImageUtil.java
new file mode 100644
index 0000000..7fb91ee
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateImageUtil.java
@@ -0,0 +1,61 @@
+package com.ruoyi.common.utils;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.font.FontRenderContext;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * @Author zhuo
+ * @Date 2024/9/28
+ */
+public class DateImageUtil {
+
+    /**
+     * 鐢熸垚 褰撳墠鏃ユ湡鐨勭敾甯�
+     * @return
+     */
+    public static InputStream createDateImage(LocalDateTime date) {
+        int width = 80;
+        int height = 20;
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
+        if (date == null) {
+            date = LocalDateTime.now();
+        }
+        String s = date.format(formatter);
+
+        Font font = new Font("Serif", Font.BOLD, 10);
+        // 鍒涘缓涓�涓敾甯冿紙鑳屾櫙閫忔槑锛�
+        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+        // 鑾峰彇鐢诲竷鐨勭敾绗�
+        Graphics2D g2 = (Graphics2D) bi.getGraphics();
+        // 寮�濮嬬粯鍥�
+        g2.setComposite(AlphaComposite.Src); // 纭繚缁樺浘鏃舵槸閫忔槑鑳屾櫙
+        g2.setBackground(new Color(0, 0, 0, 0)); // 鑳屾櫙鑹蹭负閫忔槑
+        g2.clearRect(0, 0, width, height);
+        g2.setPaint(new Color(0, 0, 0)); // 璁剧疆缁樺埗棰滆壊
+        FontRenderContext context = g2.getFontRenderContext();
+        Rectangle2D bounds = font.getStringBounds(s, context);
+        double x = (width - bounds.getWidth()) / 2;
+        double y = (height - bounds.getHeight()) / 2;
+        double ascent = -bounds.getY();
+        double baseY = y + ascent;
+        g2.drawString(s, (int) x, (int) baseY);
+        g2.dispose(); // 閲婃斁鐢荤瑪璧勬簮
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+        try {
+            ImageIO.write(bi, "png", os);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return new ByteArrayInputStream(os.toByteArray());
+    }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java
new file mode 100644
index 0000000..4a39760
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java
@@ -0,0 +1,9 @@
+package com.ruoyi.framework.exception;
+
+public class ErrorException extends RuntimeException{
+
+    public ErrorException(String msg){
+        super(msg);
+    }
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java
new file mode 100644
index 0000000..95bfc18
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java
@@ -0,0 +1,18 @@
+package com.ruoyi.framework.exception;
+
+public class MyFileException extends RuntimeException{
+    public MyFileException() {
+    }
+
+    public MyFileException(String message) {
+        super(message);
+    }
+
+    public MyFileException(Throwable cause) {
+        super(cause);
+    }
+
+    public MyFileException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java
index 0f3eafd..c320557 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java
@@ -1,7 +1,12 @@
 package com.ruoyi.system.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.User;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * 鐢ㄦ埛淇℃伅琛�
@@ -11,5 +16,34 @@
  */
 public interface UserMapper extends BaseMapper<User> {
 
+    /**
+     * 鏍规嵁鏉′欢鑾峰彇鐢ㄦ埛鍒楄〃
+     * @param ew
+     * @param type
+     * @return
+     */
+    List<User> selectUserCondition(@Param("ew") QueryWrapper<User> ew, @Param("type") String type);
+
+    /**
+     * 鑾峰彇鐢ㄦ埛閮ㄩ棬
+     * @param userId
+     * @return
+     */
+    String selectUserDepartmentLimsName(@Param("userId") Integer userId);
+
+    /**
+     * 鏌ヨ鐢ㄦ埛鍜岄儴闂�
+     * @param participant
+     * @return
+     */
+    List<Map<String, String>> selectNameAnddepartment(@Param("participant") String participant);
+
+    /**
+     * 鑾峰彇褰撳墠鐧诲綍鐨勫鎴蜂俊鎭�
+     * @param userId
+     * @return
+     */
+    User getUserNow(@Param("userId") int userId);
+
 }
 
diff --git a/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
new file mode 100644
index 0000000..6487371
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
@@ -0,0 +1,63 @@
+<?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.UserMapper">
+
+    <!--鏍规嵁鏉′欢鑾峰彇鐢ㄦ埛鍒楄〃-->
+    <select id="selectUserCondition" resultType="com.ruoyi.common.core.domain.entity.User">
+        select * from (select id,
+        dept_id,
+        account,
+        name,
+        name_en,
+        user_type,
+        email,
+        phone,
+        sex,
+        age,
+        signature_url,
+        picture_url,
+        status,
+        del_flag,
+        login_ip,
+        login_date,
+        depart_lims_id,
+        company,
+        is_custom
+        from user
+        where del_flag = '0') a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <!-- 鑾峰彇鐢ㄦ埛閮ㄩ棬 -->
+    <select id="selectUserDepartmentLimsName" resultType="java.lang.String">
+        select dl.name
+        from user u
+                 left join department_lims dl on find_in_set(dl.id, u.depart_lims_id) and dl.id != 1
+        where u.id = #{userId}
+        limit 1
+    </select>
+
+    <!-- 鏌ヨ鐢ㄦ埛鍜岄儴闂� -->
+    <select id="selectNameAnddepartment" resultType="java.util.Map">
+        select u.name  userName,
+               dl.name department
+        from user u
+                 left join department_lims dl on find_in_set(dl.id, u.depart_lims_id) and dl.id != 1
+        where find_in_set(u.id, #{participant})
+    </select>
+
+    <!-- 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅 -->
+    <select id="getUserNow" resultType="com.ruoyi.common.core.domain.entity.User">
+        select u.id,
+               c.company,
+               u.name,
+               c.code,
+               u.phone,
+               c.id departId
+        from user u
+                 left join custom c on u.company = c.id
+        where u.id = #{userId}
+    </select>
+</mapper>

--
Gitblit v1.9.3