From 07524804b9d927556c18ce68d32eacf04c0e9445 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 24 二月 2025 13:36:10 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-after into dev_cr

---
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java                    |   27 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessDealMapper.java                                        |   21 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java                            |   16 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java                          |   16 
 cnas-process/src/main/resources/static/quality-monitor.docx                                                       |    0 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewBackupsService.java                    |   16 
 cnas-personnel/src/main/resources/static/supervision-record.docx                                                  |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java                          |   16 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java                                      |   27 
 cnas-process/src/main/resources/mapper/ProcessMethodVerifyMethodFileMapper.xml                                    |    6 
 cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionMapper.java                           |   30 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyCalibrationsFileMapper.java                |   34 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonCommunicationAbilityService.java                   |   25 
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessReportDto.java                                            |   12 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewArchived.java                             |   63 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java                  |  370 +
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySupervise.java                                           |   81 
 cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml                                            |   14 
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetails.java                                      |   88 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewArchivedServiceImpl.java          |   20 
 cnas-personnel/src/main/resources/static/person-basic-info.docx                                                   |    0 
 cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderDetailService.java                            |   16 
 cnas-personnel/src/main/resources/static/supervision-control-sheet.docx                                           |    0 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMethodFileService.java                    |   15 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java              |   60 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessComplainController.java                            |   68 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java                                         |   83 
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewBackupsDto.java                            |   62 
 cnas-process/src/main/resources/mapper/InspectionOrderDetailMapper.xml                                            |   19 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java                           |   67 
 cnas-process/pom.xml                                                                                              |    4 
 cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsService.java                            |   15 
 cnas-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java                                   |   66 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodVerifyController.java                        |  156 
 cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsRatifyService.java                      |   15 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMethodFileServiceImpl.java           |   19 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java                                        |  156 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonCommunicationAbility.java                             |   61 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordPersonDetailedDto.java                         |   26 
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyDto.java                                      |   30 
 cnas-process/src/main/resources/mapper/ProcessSampleMapper.xml                                                    |   29 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java           |  100 
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsRecord.java                              |  118 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMachineAttachmentService.java             |   15 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyWorkFileMapper.java                        |   24 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java           |  113 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessEvaluateController.java                            |   62 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java                          |   74 
 cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsCorrectDto.java                           |   25 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessComplainService.java                                  |   31 
 cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectFileMapper.xml                               |    6 
 pom.xml                                                                                                           |    8 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectMapper.java                     |   28 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessSampleService.java                                    |   27 
 cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDto.java                                           |   22 
 cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistribution.java                                   |   45 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsRatifyServiceImpl.java             |   19 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsMapper.java                              |   28 
 cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java                       |   45 
 cnas-process/src/main/resources/mapper/ProcessMethodVerifyWorkFileMapper.xml                                      |   13 
 cnas-personnel/pom.xml                                                                                            |   46 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewArchivedMapper.java                     |   28 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewBackupsMapper.java                      |   26 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateMapper.java                      |   23 
 cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java                                   |  160 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java                        |  229 
 cnas-personnel/src/main/resources/static/credentials-deal.docx                                                    |    0 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionDetailServiceImpl.java          |   20 
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsRatify.java                                |   87 
 cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml                                      |   24 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java                 |   31 
 cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionDto.java                                 |   28 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessComplainMapper.java                                    |   25 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java       |  132 
 cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderExportDto.java                                    |   51 
 cnas-process/src/main/resources/static/excel/check-records.xlsx                                                   |    0 
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewArchivedDto.java                           |   19 
 cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateMapper.xml                                    |   15 
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluateFile.java                          |   56 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewArchivedService.java                   |   16 
 cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml                                   |   47 
 cnas-process/src/main/resources/static/report-deal.docx                                                           |    0 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessSampleController.java                              |   61 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java                                       |   23 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotalSampleServiceImpl.java                      |  437 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java                         |   14 
 cnas-personnel/src/main/resources/static/person-training.docx                                                     |    0 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotaldealMapper.java                                   |   21 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsRatifyMapper.java                        |   17 
 cnas-process/src/main/resources/mapper/ProcessTotalSampleMapper.xml                                               |   35 
 cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml                                        |  118 
 cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java                     |   34 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessDeal.java                                                |   65 
 cnas-process/src/main/java/com/ruoyi/process/excel/QualitySuperviseDetailsUpload.java                             |   30 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyService.java                              |   87 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyWorkFile.java                                |   59 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java                      |   35 
 cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsEvaluateDto.java                            |   16 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java                   |   26 
 cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionService.java                         |   64 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java                                    |   53 
 cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml                                           |   21 
 cnas-process/src/main/java/com/ruoyi/process/controller/InconsistentDistributionController.java                   |   94 
 cnas-process/src/main/java/com/ruoyi/process/excel/QualityMonitorDetailsUpload.java                               |   33 
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluate.java                              |   88 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailedFile.java                             |   49 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotalSampleController.java                         |   54 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordListDto.java                             |   37 
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsAccording.java                           |  144 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java          |   66 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java                               |   29 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java                 |   20 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessDealController.java                                |   61 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotalSampleMapper.java                                 |   21 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateFileMapper.java                  |   17 
 cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml                                  |   23 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.java                                 |   20 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java                |   27 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyWorkFileServiceImpl.java         |   19 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingServiceImpl.java                      |  429 +
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrectFile.java                         |   56 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java                                 |   99 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectFileMapper.java                 |   17 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessReport.java                                              |   82 
 cnas-process/src/main/resources/mapper/ProcessDealMapper.xml                                                      |   26 
 cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java                           |    4 
 cnas-process/src/main/resources/static/supervision-detail-record.docx                                             |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java                                      |   47 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java                                             |   24 
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessComplainDto.java                                          |   23 
 cnas-process/src/main/resources/static/quality-monitor-evaluate.docx                                              |    0 
 cnas-process/src/main/resources/static/inspection-order.docx                                                      |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordSubmitDto.java                           |   35 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonCommunicationAbilityDto.java                           |   14 
 cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderMapper.java                                    |   37 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java                        |  416 +
 cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyCalibrationsFileServiceImpl.java |   19 
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyCalibrationsFileDto.java                      |   19 
 cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml                                     |   19 
 cnas-process/src/main/resources/static/quality-supervise.docx                                                     |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java                                |  114 
 cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionDetailService.java                   |   16 
 cnas-process/src/main/resources/mapper/QualitySuperviseMapper.xml                                                 |   26 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java                |   92 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingDetailedService.java                       |   29 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java                  |   20 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessReportService.java                                    |   24 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyServiceImpl.java                     |  454 +
 cnas-process/src/main/resources/static/sample-deal.docx                                                           |    0 
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyExportWordDto.java                            |   40 
 cnas-process/src/main/resources/mapper/QualityMonitorMapper.xml                                                   |   20 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotaldealController.java                           |   55 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsMapper.java                            |   29 
 cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrderDetail.java                                      |   62 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java                                     |   70 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedFileMapper.java                     |   15 
 cnas-process/src/main/resources/static/sample-receive.docx                                                        |    0 
 cnas-process/src/main/java/com/ruoyi/process/dto/SampleItemDto.java                                               |   23 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsRecordMapper.java                      |   24 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java                        | 1118 +++
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java                               |   13 
 cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java                             |   74 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java                         |  246 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsEvaluateServiceImpl.java           |   19 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessEvaluate.java                                            |   74 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java                |  231 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMachineAttachmentServiceImpl.java    |   19 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityExportDto.java                        |  101 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java                              |   78 
 cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml                                           |  126 
 cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java                                  |   25 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java                |  177 
 cnas-process/src/main/resources/static/supervise-detail-correct.docx                                              |    0 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMachineAttachmentMapper.java               |   17 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityDto.java                              |   30 
 cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx                                        |    0 
 cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java                            |  128 
 cnas-personnel/src/main/resources/static/communication-deal.docx                                                  |    0 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessReportMapper.java                                      |   25 
 cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderDetailMapper.java                              |   16 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java                                           |   78 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMapper.java                                |   29 
 cnas-process/src/main/resources/mapper/ProcessMethodVerifyMachineAttachmentMapper.xml                             |    5 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java                                 |   32 
 cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsAccordingDto.java                         |   63 
 cnas-process/src/main/resources/static/method-verify.docx                                                         |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java                                 |   23 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessComplainServiceImpl.java                         |  105 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java                            |   16 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderDetailServiceImpl.java                   |   20 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java                              |   45 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyCalibrationsFile.java                        |   56 
 cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedListener.java                        |   42 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java                         |   48 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java                                          |    9 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java                                |   42 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseMapper.java                                   |   38 
 cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsEvaluateService.java                    |   15 
 cnas-personnel/src/main/resources/static/explain-deal.docx                                                        |    0 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMethodFileMapper.java                      |   17 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java                                |   42 
 cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java                          |   35 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java                             |   32 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java                                                  |   48 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMethodFile.java                              |   54 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingDetailedServiceImpl.java              |   85 
 cnas-process/src/main/resources/mapper/ProcessMethodVerifyMapper.xml                                              |   22 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java                                   |   41 
 cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml                                                 |   46 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java                         |  310 +
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyCalibrationsFileService.java              |   15 
 cnas-process/src/main/resources/static/supervision-detail-according.docx                                          |    0 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessEvaluateServiceImpl.java                         |   99 
 cnas-process/src/main/resources/mapper/InconsistentDistributionDetailMapper.xml                                   |    6 
 ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml                                            |   25 
 cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateFileMapper.xml                                |    5 
 cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseController.java                           |  353 +
 cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseDetailsService.java                          |   15 
 cnas-personnel/src/main/resources/static/person-training-record.docx                                              |    0 
 cnas-process/src/main/resources/mapper/ProcessEvaluateMapper.xml                                                  |   26 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java                 |   20 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java                                 |   23 
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrect.java                             |  132 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java                        |   14 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsServiceImpl.java                   |   19 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotalSampleService.java                               |   27 
 cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseService.java                                 |  201 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessDealServiceImpl.java                             |  104 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDetailsDto.java                               |   65 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java                      |   20 
 cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml                                                |   65 
 cnas-personnel/src/main/resources/static/personnel-capacity.docx                                                  |    0 
 cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionDetailMapper.java                     |   18 
 cnas-process/src/main/resources/mapper/ProcessReportMapper.xml                                                    |   41 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java                           |   61 
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetails.java                                    |   78 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessEvaluateService.java                                  |   29 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java        |   36 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java                     |  128 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPersonnelCapacityServiceImpl.java             |  158 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java                           |   82 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyWorkFileService.java                      |   15 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessSampleMapper.java                                      |   21 
 cnas-process/src/main/java/com/ruoyi/process/dto/ImageDemoData.java                                               |   43 
 cnas-process/src/main/resources/mapper/InspectionOrderMapper.xml                                                  |   28 
 cnas-process/src/main/resources/mapper/ProcessComplainMapper.xml                                                  |   62 
 cnas-process/src/main/resources/mapper/ProcessMethodSearchNewArchivedMapper.xml                                   |   19 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseDetailsServiceImpl.java                 |   19 
 cnas-process/src/main/resources/mapper/ProcessMethodVerifyCalibrationsFileMapper.xml                              |   24 
 cnas-process/src/main/resources/mapper/QualitySuperviseDetailsRecordMapper.xml                                    |   11 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessComplain.java                                            |  142 
 cnas-process/src/main/resources/static/quality-monitor-details-ratify.docx                                        |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java                        |   29 
 cnas-process/src/main/java/com/ruoyi/process/schedule/ProcessTotaldealSchedule.java                               |   37 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonCommunicationAbilityServiceImpl.java          |  113 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMachineAttachment.java                       |   60 
 cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java                             |  295 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java                          |  812 ++
 cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml                                          |   36 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java                                    |   58 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorMapper.java                                     |   28 
 cnas-process/src/main/resources/mapper/InconsistentDistributionMapper.xml                                         |   20 
 cnas-process/src/main/resources/static/inconsistent-distribution.docx                                             |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingRecordService.java                         |   59 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java                               |   63 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java                   |   59 
 cnas-personnel/src/main/resources/static/training-record.docx                                                     |    0 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerify.java                                        |  133 
 cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrder.java                                            |  110 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoWorkDto.java                                  |   16 
 cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsAccordingMapper.java                   |   36 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotaldealService.java                                 |   27 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java                                        |    7 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java                     |  340 +
 cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitor.java                                             |   83 
 cnas-process/src/main/resources/mapper/QualitySuperviseDetailsAccordingMapper.xml                                 |   57 
 cnas-personnel/src/main/resources/static/super-vise-plan.docx                                                     |    0 
 cnas-process/src/main/resources/mapper/ProcessMethodSearchNewBackupsMapper.xml                                    |   16 
 cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectMapper.xml                                   |   15 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotalSample.java                                         |   77 
 cnas-process/src/main/resources/mapper/QualityMonitorDetailsRatifyMapper.xml                                      |    5 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java                           |  423 +
 cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.xml                                                 |   34 
 ruoyi-admin/pom.xml                                                                                               |   12 
 cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderDto.java                                          |   19 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewBackupsServiceImpl.java           |   20 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java                            |   16 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessReportController.java                              |   70 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessSampleServiceImpl.java                           |   94 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSample.java                                              |   79 
 /dev/null                                                                                                         |    8 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonCommunicationAbilityController.java             |   61 
 cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderService.java                                  |   86 
 cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewBackups.java                              |   84 
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessEvaluateMapper.java                                    |   21 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonCommunicationAbilityMapper.java                     |   21 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessDealService.java                                      |   27 
 297 files changed, 18,032 insertions(+), 10 deletions(-)

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
index 0251cac..74f3ba3 100644
--- a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java
@@ -71,7 +71,7 @@
      */
 
     @ApiOperation(value = "瀹㈡埛婊℃剰搴﹁皟鏌ユ柊澧�")
-    @GetMapping("/delClientSatisfaction")
+    @DeleteMapping("/delClientSatisfaction")
     public Result updateClientSatisfaction(Integer clientSatisfactionId){
         return Result.success(clientSatisfactionService.removeById(clientSatisfactionId));
     }
@@ -132,7 +132,7 @@
      */
 
     @ApiOperation(value = "鍒犻櫎鎴峰垎鏋愰檮浠�")
-    @GetMapping("/delAnalyseFile")
+    @DeleteMapping("/delAnalyseFile")
     public Result delAnalyseFile(Integer analyseFileId){
         return Result.success(clientSatisfactionAnalyseFileMapper.deleteById(analyseFileId));
     }
diff --git a/cnas-personnel/pom.xml b/cnas-personnel/pom.xml
new file mode 100644
index 0000000..689a7a9
--- /dev/null
+++ b/cnas-personnel/pom.xml
@@ -0,0 +1,46 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi</artifactId>
+        <version>3.8.9</version>
+    </parent>
+
+    <artifactId>cnas-personnel</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>ruoyi-system</artifactId>
+        </dependency>
+
+        <!-- 绯荤粺妯″潡-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>inspect-server</artifactId>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java
new file mode 100644
index 0000000..01b44d4
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java
@@ -0,0 +1,229 @@
+package com.ruoyi.personnel.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.core.domain.entity.DepartmentDto;
+import com.ruoyi.common.utils.FileSaveUtil;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.personnel.dto.PersonBasicInfoDetailsDto;
+import com.ruoyi.personnel.dto.PersonBasicInfoDto;
+import com.ruoyi.personnel.dto.UserPageDto;
+import com.ruoyi.personnel.pojo.Annex;
+import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+import com.ruoyi.personnel.service.AnnexService;
+import com.ruoyi.personnel.service.PersonBasicInfoFileService;
+import com.ruoyi.personnel.service.PersonBasicInfoService;
+import com.ruoyi.personnel.service.PersonBasicInfoWorkService;
+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.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+@Api(tags = "浜哄憳-浜哄憳鍩烘湰淇℃伅")
+@RestController
+@RequestMapping("/personBasicInfo")
+public class PersonBasicInfoController {
+
+    @Resource
+    private PersonBasicInfoService personBasicInfoService;
+
+    @Resource
+    private PersonBasicInfoFileService personBasicInfoFileService;
+    @Resource
+    private PersonBasicInfoWorkService personBasicInfoWorkService;
+
+    @Resource
+    private AnnexService annexService;
+
+
+    @ApiOperation(value = "鏌ヨCNAS浜哄憳渚ц竟鏍�")
+    @GetMapping("/selectCNSAPersonTree")
+    public Result<List<DepartmentDto>> selectCNSAPersonTree() {
+        return Result.success(personBasicInfoService.selectCNSAPersonTree());
+    }
+
+    @ApiOperation(value = "鑾峰彇CNAS浜哄憳鍩烘湰淇℃伅")
+    @GetMapping("/getCNASPersonnelInfo")
+    public Result getCNASPersonnelInfo(Integer userId) {
+        return Result.success(personBasicInfoService.getCNASPersonnelInfo(userId));
+    }
+
+    @ApiOperation(value = "淇濆瓨CNAS浜哄憳鍩烘湰淇℃伅")
+    @PostMapping("/saveCNASPersonnelInfo")
+    public Result saveCNASPersonnelInfo(@RequestBody PersonBasicInfoDto personBasicInfoDto) {
+        personBasicInfoService.saveCNASPersonnelInfo(personBasicInfoDto);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "浜哄憳鏄庣粏鍒嗛〉鏌ヨ")
+    @GetMapping("basicInformationOfPersonnelSelectPage")
+    public Result<IPage<Map<String, Object>>> basicInformationOfPersonnelSelectPage(Page<List<PersonBasicInfoDetailsDto>> page, String name, Integer departmentId) {
+        return Result.success(personBasicInfoService.basicInformationOfPersonnelSelectPage(page, name, departmentId));
+    }
+
+    // 涓婁紶鏂囦欢鎺ュ彛
+    @ApiOperation(value = "涓婁紶鏂囦欢鎺ュ彛")
+    @PostMapping("/saveCNASFile")
+    public Result saveFile(@RequestPart("file") MultipartFile file) {
+        String s = FileSaveUtil.uploadWordFile(file);
+        return Result.success("涓婁紶鎴愬姛", s);
+    }
+
+    @GetMapping("/getAnnexByUserId")
+    public Result<List<Annex>> getAnnexByUserId(Integer userId) {
+        List<Annex> list = annexService.list(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId, userId));
+        return Result.success(list);
+    }
+
+    // 鍒犻櫎鏂囦欢
+    @DeleteMapping("/deleteCNASFile")
+    public Result saveFile(String fileName) {
+        String[] split = fileName.split(",");
+        for (String s : split) {
+            FileSaveUtil.DeleteFile(s);
+        }
+        return Result.success();
+
+    }
+
+    /**
+     * 浜哄憳鍩烘湰淇℃伅闄勪欢鏂板
+     */
+    @PostMapping("/addAnnex")
+    public Result addAnnex(@RequestBody Annex annex) {
+        annexService.save(annex);
+        return Result.success();
+    }
+
+    @GetMapping("/getAnnex")
+    public Result<Annex> getAnnex(Integer id) {
+        return Result.success(annexService.getById(id));
+    }
+    /**
+     * 浜哄憳鍩烘湰淇℃伅闄勪欢鍒犻櫎
+     */
+    @DeleteMapping("/deleteAnnex")
+    public Result deleteAnnex(Integer id) {
+        annexService.removeById(id);
+        return Result.success();
+    }
+
+    /**
+     * 浜哄憳鍩烘湰淇℃伅闄勪欢淇敼
+     *
+     */
+    @PostMapping("/updateAnnex")
+    public Result updateAnnex(@RequestBody Annex annex) {
+        annexService.updateById(annex);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "瀵煎嚭浜哄憳鍩烘湰淇℃伅")
+    @GetMapping("/exportPersonBasicInfo")
+    public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception {
+        personBasicInfoService.exportPersonBasicInfo(userPageDto,response);
+    }
+
+    @ApiOperation(value = "涓嬭浇浜哄憳妗f鍗�")
+    @GetMapping("/exportPersonBasicInfoById")
+    public Result exportPersonBasicInfoById(Integer id, HttpServletResponse response) {
+        return Result.success(personBasicInfoService.exportPersonBasicInfoById(id,response));
+    }
+
+    /**
+     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板
+     * @param userId
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板")
+    @PostMapping("/uploadBasicInfoFile")
+    public Result<?> uploadBasicInfoFile(Integer userId, MultipartFile file) {
+        return Result.success(personBasicInfoService.uploadBasicInfoFile(userId, file));
+    }
+
+
+    /**
+     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒楄〃")
+    @GetMapping("/getBasicInfoFileList")
+    public Result<List<PersonBasicInfoFile>> getBasicInfoFileList(Integer userId){
+        return Result.success(personBasicInfoFileService.list(Wrappers.<PersonBasicInfoFile>lambdaQuery()
+                .eq(PersonBasicInfoFile::getUserId, userId)));
+    }
+
+    /**
+     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒犻櫎")
+    @GetMapping("/delBasicInfoFileList")
+    public Result delBasicInfoFileList(Integer basicInfoFileId){
+        return Result.success(personBasicInfoFileService.removeById(basicInfoFileId));
+    }
+
+    /**
+     * 浜哄憳鍩硅鍩烘湰淇℃伅宸ヤ綔缁忓巻鏂板
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳鍩硅鍩烘湰淇℃伅宸ヤ綔缁忓巻鏂板")
+    @PostMapping("/addBasicInfoWork")
+    public Result<?> addBasicInfoWork(@RequestBody PersonBasicInfoWork basicInfoWork) {
+        if (basicInfoWork.getUserId() == null) {
+            throw new ErrorException("缂哄皯浜哄憳id");
+        }
+        basicInfoWork.setUserId(basicInfoWork.getUserId());
+        return Result.success(personBasicInfoWorkService.save(basicInfoWork));
+    }
+
+
+    /**
+     * 浜哄憳宸ヤ綔缁忓巻鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳宸ヤ綔缁忓巻鍒楄〃")
+    @GetMapping("/getBasicInfoWorkList")
+    public Result<List<PersonBasicInfoWork>> getBasicInfoWorkList(Integer userId){
+        return Result.success(personBasicInfoWorkService.list(Wrappers.<PersonBasicInfoWork>lambdaQuery()
+                .eq(PersonBasicInfoWork::getUserId, userId)));
+    }
+
+    /**
+     * 浜哄憳宸ヤ綔缁忓巻鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳宸ヤ綔缁忓巻鍒犻櫎")
+    @GetMapping("/delBasicInfoWorkList")
+    public Result delBasicInfoWorkList(Integer basicInfoWorkId){
+        return Result.success(personBasicInfoWorkService.removeById(basicInfoWorkId));
+    }
+
+    /**
+     * 浜哄憳鍩烘湰淇℃伅闄勪欢鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳宸ヤ綔缁忓巻淇敼")
+    @PostMapping("/updateBasicInfoWorkList")
+    public Result updateBasicInfoWorkList(@RequestBody PersonBasicInfoWork basicInfoWork){
+        return Result.success(personBasicInfoWorkService.updateById(basicInfoWork));
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonCommunicationAbilityController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonCommunicationAbilityController.java
new file mode 100644
index 0000000..3aef8b9
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonCommunicationAbilityController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonCommunicationAbilityDto;
+import com.ruoyi.personnel.pojo.PersonCommunicationAbility;
+import com.ruoyi.personnel.service.PersonCommunicationAbilityService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 娌熼�氳褰� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+@Api(tags = "浜哄憳 - 娌熼�氳褰�")
+@RestController
+@RequestMapping("/personCommunicationAbility")
+public class PersonCommunicationAbilityController {
+
+    @Autowired
+    private PersonCommunicationAbilityService personCommunicationAbilityService;
+
+    @ApiOperation(value = "鏂板/鏇存柊 娌熼�氳褰�")
+    @PostMapping("addOrUpdatePersonCommunicationAbility")
+    public Result<?> addOrUpdatePersonCommunicationAbility(@RequestBody PersonCommunicationAbility personCommunicationAbility) {
+        personCommunicationAbilityService.saveOrUpdate(personCommunicationAbility);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎 娌熼�氳褰�")
+    @DeleteMapping("deletePersonCommunicationAbility")
+    public Result<?> deletePersonCommunicationAbility(@RequestParam("id") Integer id) {
+        personCommunicationAbilityService.removeById(id);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鏌ヨ 娌熼�氳褰�")
+    @GetMapping("personPersonCommunicationAbilityPage")
+    public Result<IPage<PersonCommunicationAbilityDto>> personPersonCommunicationAbilityPage(Page page,
+                                                                                             Integer departLimsId,
+                                                                                             Integer userId,
+                                                                                             String userName) {
+        return Result.success(personCommunicationAbilityService.personPersonCommunicationAbilityPage(page, departLimsId, userId, userName));
+    }
+
+    @ApiOperation(value = "瀵煎嚭娌熼�氳褰�")
+    @PostMapping("exportPersonCommunicationAbility")
+    public void exportPersonCommunicationAbility(Integer id, HttpServletResponse response) throws Exception{
+        personCommunicationAbilityService.exportPersonCommunicationAbility(id,response);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java
new file mode 100644
index 0000000..615af7b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java
@@ -0,0 +1,60 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+import com.ruoyi.personnel.service.PersonJobResponsibilitiesService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+@Api(tags = "浜哄憳 - 宀椾綅鑱岃矗")
+@RestController
+@RequestMapping("/personJobResponsibilities")
+public class PersonJobResponsibilitiesController {
+    @Autowired
+    private PersonJobResponsibilitiesService personJobResponsibilitiesService;
+
+    @ApiOperation(value = "鏂板/鏇存柊 宀椾綅鑱岃矗")
+    @PostMapping("/personJobResponsibilitiesSave")
+    public Result<?> personJobResponsibilitiesSave(@RequestBody PersonJobResponsibilities personJobResponsibilities) {
+        personJobResponsibilitiesService.saveOrUpdate(personJobResponsibilities);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鍒犻櫎 宀椾綅鑱岃矗")
+    @DeleteMapping("/personJobResponsibilitiesDelete")
+    public Result<?> personJobResponsibilitiesDelete(@RequestParam("id") Integer id) {
+        personJobResponsibilitiesService.removeById(id);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鏌ヨ 宀椾綅鑱岃矗")
+    @GetMapping("/personJobResponsibilitiesSelect")
+    public Result<IPage<PersonJobResponsibilitiesDto>> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
+        IPage<PersonJobResponsibilitiesDto> iPage = personJobResponsibilitiesService.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
+        return Result.success(iPage);
+    }
+
+
+    @ApiOperation(value = "瀵煎嚭浠昏亴宀椾綅璇存槑璇�")
+    @PostMapping("/exportPersonJobResponsibilities")
+    public void exportPersonJobResponsibilities(Integer id, HttpServletResponse response){
+        personJobResponsibilitiesService.exportPersonJobResponsibilities(id,response);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java
new file mode 100644
index 0000000..a066615
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java
@@ -0,0 +1,92 @@
+package com.ruoyi.personnel.controller;
+
+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.personnel.dto.PersonPersonnelCapacityDto;
+import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
+import com.ruoyi.personnel.service.PersonPersonnelCapacityService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浜哄憳鑳藉姏 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 11:26:18
+ */
+@Api(tags = "浜哄憳 - 浜哄憳鑳藉姏")
+@RestController
+@RequestMapping("/personPersonnelCapacity")
+public class PersonPersonnelCapacityController {
+
+    @Autowired
+    private PersonPersonnelCapacityService personPersonnelCapacityService;
+
+
+    @ApiOperation(value = "鏂板/鏇存柊 浜哄憳鑳藉姏")
+    @PostMapping("addOrUpdatePersonPersonnelCapacity")
+    public Result<?> addOrUpdatePersonPersonnelCapacity(@RequestBody PersonPersonnelCapacity personPersonnelCapacity) {
+        personPersonnelCapacityService.saveOrUpdate(personPersonnelCapacity);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎 浜哄憳鑳藉姏")
+    @DeleteMapping("deletePersonPersonnelCapacity")
+    public Result<?> deletePersonPersonnelCapacity(@RequestParam("id") Integer id) {
+        // 鍒犻櫎鏁版嵁
+        personPersonnelCapacityService.removeById(id);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏌ヨ 浜哄憳鑳藉姏")
+    @GetMapping("personPersonnelCapacityPage")
+    public Result<IPage<PersonPersonnelCapacityDto>> personPersonnelCapacityPage(Page page,
+                                                                                 Integer departmentId,
+                                                                                 Integer userId,
+                                                                                 String userName) {
+        return Result.success(personPersonnelCapacityService.personPersonnelCapacityPage(page, departmentId, userId, userName));
+    }
+
+    @ApiOperation(value = "纭 浜哄憳鑳藉姏")
+    @GetMapping("confirmPersonnelCapability")
+    public Result<?> confirmPersonnelCapability(@RequestParam("id") Integer id) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        personPersonnelCapacityService.update(Wrappers.<PersonPersonnelCapacity>lambdaUpdate()
+                .eq(PersonPersonnelCapacity::getId, id)
+                .set(PersonPersonnelCapacity::getConfirmOperatingPersonnelId, userId)
+                .set(PersonPersonnelCapacity::getConfirmDate, LocalDateTime.now()));
+        return Result.success();
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鑳藉姏
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭浜哄憳鑳藉姏")
+    @GetMapping("/exportPersonnelCapacity")
+    public void exportPersonnelCapacity(Integer id, HttpServletResponse response){
+        personPersonnelCapacityService.exportPersonnelCapacity(id, response);
+    }
+
+    /**
+     * 鎻愪氦纭浜哄憳鑳藉姏
+     * @param personPersonnelCapacity
+     * @return
+     */
+    @ApiOperation(value = "鎻愪氦")
+    @PostMapping("submitConfirmPersonnelCapability")
+    public Result<?> submitConfirmPersonnelCapability(@RequestBody PersonPersonnelCapacity personPersonnelCapacity) {
+        personPersonnelCapacityService.submitConfirmPersonnelCapability(personPersonnelCapacity);
+        return Result.success();
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java
new file mode 100644
index 0000000..c65f312
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java
@@ -0,0 +1,66 @@
+package com.ruoyi.personnel.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.FileSaveUtil;
+import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+import com.ruoyi.personnel.service.PersonPostAuthorizationRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+@Api(tags = "浜哄憳 - 浠昏亴鎺堟潈璁板綍")
+@RestController
+@RequestMapping("/personPostAuthorizationRecord")
+public class PersonPostAuthorizationRecordController {
+
+    @Autowired
+    private PersonPostAuthorizationRecordService personPostAuthorizationRecordService;
+
+    @ApiOperation(value = "鏂板/鏇存柊 浠昏亴鎺堟潈璁板綍")
+    @PostMapping("/addOrUpdatePersonPostAuthorizationRecord")
+    public Result<?> addOrUpdatePersonPostAuthorizationRecord(@RequestBody PersonPostAuthorizationRecord personRewardPunishmentRecord) {
+        personPostAuthorizationRecordService.saveOrUpdate(personRewardPunishmentRecord);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎 浠昏亴鎺堟潈璁板綍")
+    @DeleteMapping("/deletePersonPostAuthorizationRecord")
+    public Result<?> deletePersonPostAuthorizationRecord(@RequestParam("id") Integer id) {
+        // 鍒犻櫎鏂囦欢
+        PersonPostAuthorizationRecord postAuthorizationRecord = personPostAuthorizationRecordService.getById(id);
+        FileSaveUtil.DeleteFile(postAuthorizationRecord.getSystemFileName());
+        // 鍒犻櫎鏁版嵁
+        personPostAuthorizationRecordService.removeById(id);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鏌ヨ 浠昏亴鎺堟潈璁板綍")
+    @GetMapping("/PersonPostAuthorizationRecordPage")
+    public Result<IPage<PersonPostAuthorizationRecordDto>> PersonPostAuthorizationRecordPage(Page page,
+                                                                                             Integer departLimsId,
+                                                                                             Integer userId,
+                                                                                             String userName) {
+        return Result.success(personPostAuthorizationRecordService.personPostAuthorizationRecordPage(page, departLimsId, userId, userName));
+    }
+
+    @ApiOperation(value = "瀵煎嚭宀椾綅鑱屼笟璧勬牸璇佷功")
+    @PostMapping("/exportPersonPostAuthorizationRecord")
+    public void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response){
+        personPostAuthorizationRecordService.exportPersonPostAuthorizationRecord(id,response);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java
new file mode 100644
index 0000000..72f4e43
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java
@@ -0,0 +1,100 @@
+package com.ruoyi.personnel.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto;
+import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+import com.ruoyi.personnel.service.PersonRewardPunishmentRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+@Api(tags = "浜哄憳 - 濂栨儵璁板綍")
+@RestController
+@RequestMapping("/personRewardPunishmentRecord")
+public class PersonRewardPunishmentRecordController {
+
+    @Autowired
+    private PersonRewardPunishmentRecordService personRewardPunishmentRecordService;
+
+    @ApiOperation(value = "鏂板/鏇存柊 濂栨儵璁板綍")
+    @PostMapping("/addOrUpdateRewardPunishment")
+    public Result<?> PersonTrainingSave(@RequestBody PersonRewardPunishmentRecord personRewardPunishmentRecord) {
+        personRewardPunishmentRecordService.saveOrUpdate(personRewardPunishmentRecord);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎濂栨儵璁板綍")
+    @DeleteMapping("/deleteRewardPunishment")
+    public Result<?> deleteRewardPunishment(@RequestParam("id") Integer id) {
+        personRewardPunishmentRecordService.removeById(id);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏌ヨ 濂栨儵璁板綍")
+    @GetMapping("/rewardPunishmentPage")
+    @SneakyThrows
+    public Result<IPage<PersonRewardPunishmentRecordDto>> rewardPunishmentPage(Page page,
+                                                                               Integer userId,
+                                                                               Integer departmentId,
+                                                                               String userName,
+                                                                               @RequestParam(value = "startTime",required = false) String startTimeStr,
+                                                                               @RequestParam(value = "endTime",required = false) String endTimeStr) {
+        Date startTime = null;
+        Date endTime = null;
+        if (StringUtils.isNotEmpty(startTimeStr) || StringUtils.isNotEmpty(endTimeStr)) {
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+            startTime = formatter.parse(startTimeStr);
+            endTime = formatter.parse(endTimeStr);
+        }
+        return Result.success(personRewardPunishmentRecordService.rewardPunishmentPage(page, userId, userName, startTime, endTime, departmentId));
+    }
+
+    @ApiOperation(value = "濂栨儵璁板綍瀵煎嚭")
+    @GetMapping("/rewardPunishmentExport")
+    public void rewardPunishmentExport(Integer userId,
+                                       Integer departmentId,
+                                       String userName,
+                                       @RequestParam(value = "startTime",required = false) String startTimeStr,
+                                       @RequestParam(value = "endTime",required = false) String endTimeStr,
+                                       HttpServletResponse response) throws Exception {
+        Date startTime = null;
+        Date endTime = null;
+        if (StringUtils.isNotEmpty(startTimeStr) || StringUtils.isNotEmpty(endTimeStr)) {
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+            startTime = formatter.parse(startTimeStr);
+            endTime = formatter.parse(endTimeStr);
+        }
+        List<PersonRewardPunishmentRecordExcel> data = personRewardPunishmentRecordService.rewardPunishmentExport(userId, departmentId, userName, startTime, endTime);
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setHeader("requestType", "excel");
+        response.setHeader("Access-Control-Expose-Headers", "requestType");
+        // 璁剧疆鍗曞厓鏍兼牱寮�
+        // 淇濆瓨鍒扮涓�涓猻heet涓�
+        EasyExcel.write(response.getOutputStream())
+                .head(PersonRewardPunishmentRecordExcel.class)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+                .sheet()
+                .doWrite(data);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java
new file mode 100644
index 0000000..203d834
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java
@@ -0,0 +1,246 @@
+package com.ruoyi.personnel.controller;
+
+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.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.personnel.dto.PersonTrainingDetailedDto;
+import com.ruoyi.personnel.dto.PersonTrainingDto;
+import com.ruoyi.personnel.dto.PersonTrainingRecordDto;
+import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto;
+import com.ruoyi.personnel.mapper.PersonTrainingDetailedFileMapper;
+import com.ruoyi.personnel.pojo.PersonTraining;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailedFile;
+import com.ruoyi.personnel.pojo.PersonTrainingRecord;
+import com.ruoyi.personnel.service.PersonTrainingDetailedService;
+import com.ruoyi.personnel.service.PersonTrainingRecordService;
+import com.ruoyi.personnel.service.PersonTrainingService;
+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.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+@Api(tags = "浜哄憳 - 鍩硅璁″垝")
+@RestController
+@RequestMapping("/personTraining")
+public class PersonTrainingController {
+
+    @Autowired
+    private PersonTrainingService personTrainingService;
+
+    @Autowired
+    private PersonTrainingDetailedService personTrainingDetailedService;
+
+    @Autowired
+    private PersonTrainingRecordService personTrainingRecordService;
+
+    @Autowired
+    private PersonTrainingDetailedFileMapper personTrainingDetailedFileMapper;
+
+    @Autowired
+    private NumberGenerator<PersonTrainingDetailed> numberGenerator;
+
+    @ApiOperation(value = "鍩硅璁″垝 瀵煎叆")
+    @PostMapping("personTrainingImport")
+    public Result<?> personTrainingImport(@RequestPart("file") MultipartFile file, PersonTraining training) {
+        personTrainingService.personTrainingImport(file, training);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍩硅璁″垝 鍒犻櫎")
+    @DeleteMapping("personTrainingDelete")
+    public Result<?> personTrainingDelete(@RequestParam("id") Integer id) {
+        personTrainingService.personTrainingDelete(id);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍩硅璁″垝 鏌ヨ")
+    @GetMapping("personTrainingSelect")
+    public Result<IPage<PersonTrainingDto>> personTrainingSelect(Page page, String compilerName, String departmentId) {
+        IPage<PersonTrainingDto> iPage = personTrainingService.personTrainingSelect(page, compilerName, departmentId);
+        return Result.success(iPage);
+    }
+
+    @ApiOperation(value = "骞村害鍩硅璁″垝 瀹℃牳")
+    @PostMapping("reviewAnnualPersonnelTraining")
+    public Result<?> reviewAnnualPersonnelTraining(@RequestBody PersonTraining training) {
+        personTrainingService.reviewAnnualPersonnelTraining(training);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍩硅璁″垝 鎵瑰噯")
+    @PostMapping("approveAnnualPersonnelTraining")
+    public Result<?> approveAnnualPersonnelTraining(@RequestBody PersonTraining training) {
+        personTrainingService.approveAnnualPersonnelTraining(training);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "骞村害璁″垝鏄庣粏琛� 鏂板/缂栬緫")
+    @PostMapping("addOrUpdatePersonTrainingDetailed")
+    public Result<?> addOrUpdatePersonTrainingDetailed(@RequestBody PersonTrainingDetailed personTrainingDetailed) {
+        if (ObjectUtils.isEmpty(personTrainingDetailed.getId())) {
+            personTrainingDetailed.setState(3);
+        }
+        personTrainingDetailedService.saveOrUpdate(personTrainingDetailed);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "骞村害璁″垝鏄庣粏琛� 鎵归噺鍒犻櫎")
+    @DeleteMapping("deleteAnnualPlanDetailTable")
+    public Result<?> deleteAnnualPlanDetailTable(String ids) {
+        personTrainingDetailedService.deleteAnnualPlanDetailTable(ids);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "骞村害璁″垝鏄庣粏琛� 鏌ヨ")
+    @GetMapping("queryTheAnnualPlanDetailsTable")
+    public Result<IPage<PersonTrainingDetailedDto>> queryTheAnnualPlanDetailsTable(Page page,
+                                                                                   String trainingLecturerName, String courseCode,
+                                                                                   String trainingDate, Integer id, Integer userId) {
+        IPage<PersonTrainingDetailedDto> iPage = personTrainingDetailedService.queryTheAnnualPlanDetailsTable(page,
+                trainingLecturerName, courseCode, trainingDate, id, userId);
+        return Result.success(iPage);
+    }
+
+
+    @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 鏌ヨ")
+    @GetMapping("trainingAndAssessmentRecordsPage")
+    public Result<List<PersonTrainingRecordDto>> trainingAndAssessmentRecordsPage(Integer trainingDetailedId,
+                                                                                   String userName) {
+        List<PersonTrainingRecordDto> list = personTrainingRecordService.trainingAndAssessmentRecordsPage(trainingDetailedId, userName);
+        return Result.success(list);
+    }
+
+
+    @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 鏂板浜哄憳")
+    @PostMapping("newPersonnelAddedToTrainingRecords")
+    public Result<?> newPersonnelAddedToTrainingRecords(@RequestBody List<PersonTrainingRecord> personTrainingRecord) {
+        personTrainingRecordService.saveBatch(personTrainingRecord);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 璁ら")
+    @PostMapping("claimOfTrainingAndAssessmentRecords")
+    public Result<?> claimOfTrainingAndAssessmentRecords(@RequestParam("claimAndClaim") Boolean claimAndClaim,
+                                                         @RequestParam("courseId") Integer courseId) {
+        personTrainingRecordService.claimOfTrainingAndAssessmentRecords(claimAndClaim, courseId);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 鎻愪氦/鎾ら攢")
+    @PostMapping("trainingAndAssessmentRecordsAdded")
+    public Result<?> trainingAndAssessmentRecordsAdded(@RequestBody PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) {
+        personTrainingRecordService.trainingAndAssessmentRecordsAdded(personTrainingRecordSubmitDto);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 璇勪环")
+    @PostMapping("trainingAndAssessmentRecordsEvaluate")
+    public Result<?> trainingAndAssessmentRecordsEvaluate(@RequestBody PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) {
+        personTrainingDetailedService.update(Wrappers.<PersonTrainingDetailed>lambdaUpdate()
+                .eq(PersonTrainingDetailed::getId, personTrainingRecordSubmitDto.getTrainingDetailedId())
+                .set(PersonTrainingDetailed::getComprehensiveAssessment, personTrainingRecordSubmitDto.getComprehensiveAssessment())
+                .set(PersonTrainingDetailed::getAssessmentDate, personTrainingRecordSubmitDto.getAssessmentDate())
+                .set(PersonTrainingDetailed::getState, personTrainingRecordSubmitDto.getState()));
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 鍒犻櫎")
+    @DeleteMapping("deleteTrainingAndAssessmentRecords")
+    public Result<?> deleteTrainingAndAssessmentRecords(String ids) {
+        personTrainingRecordService.deleteTrainingAndAssessmentRecords(ids);
+        return Result.success();
+    }
+
+    @PostMapping("outOfFocusPreservation")
+    public Result<?> outOfFocusPreservation(@RequestBody PersonTrainingRecord personTrainingRecord) {
+        personTrainingRecordService.updateById(personTrainingRecord);
+        return Result.success();
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅璁″垝
+     * @return
+     */
+
+    @ApiOperation(value = "瀵煎嚭浜哄憳鍩硅璁″垝")
+    @GetMapping("/exportPersonTraining")
+    public void exportPersonTraining(Integer id, HttpServletResponse response){
+        personTrainingService.exportPersonTraining(id, response);
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍")
+    @GetMapping("/exportPersonTrainingRecord")
+    public void exportPersonTrainingRecord(Integer id, HttpServletResponse response){
+        personTrainingService.exportPersonTrainingRecord(id, response);
+    }
+
+    /**
+     * 浜哄憳鍩硅璇︽儏闄勪欢鏂板
+     * @param trainingDetailedId
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳鍩硅璇︽儏闄勪欢鏂板")
+    @PostMapping("/uploadTrainingDetailedFile")
+    public Result<?> uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file) {
+        return Result.success(personTrainingService.uploadTrainingDetailedFile(trainingDetailedId, file));
+    }
+
+
+    /**
+     * 浜哄憳鍩硅璇︽儏闄勪欢鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳鍩硅璇︽儏闄勪欢鍒楄〃")
+    @GetMapping("/getTrainingDetailedFileList")
+    public Result<List<PersonTrainingDetailedFile>> getTrainingDetailedFileList(Integer trainingDetailedId){
+        return Result.success(personTrainingDetailedFileMapper.selectList(Wrappers.<PersonTrainingDetailedFile>lambdaQuery()
+                .eq(PersonTrainingDetailedFile::getTrainingDetailedId, trainingDetailedId)));
+    }
+
+    /**
+     * 浜哄憳鍩硅璇︽儏闄勪欢鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "浜哄憳鍩硅璇︽儏闄勪欢鍒犻櫎")
+    @DeleteMapping("/delTrainingDetailedFileList")
+    public Result delTrainingDetailedFileList(Integer detailedFileId){
+        return Result.success(personTrainingDetailedFileMapper.deleteById(detailedFileId));
+    }
+
+    /**
+     * 鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅")
+    @GetMapping("/getThisYearTrainingDetailed")
+    public Result<List<PersonTrainingDetailed>> getThisYearTrainingDetailed(){
+        return Result.success(personTrainingService.getThisYearTrainingDetailed());
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java
new file mode 100644
index 0000000..5385869
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java
@@ -0,0 +1,59 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonTrainingRecordListDto;
+import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
+import com.ruoyi.personnel.service.PersonTrainingRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+@Api(tags = "浜哄憳 - 鍩硅璁板綍")
+@RestController
+@RequestMapping("/personTrainingRecord")
+public class PersonTrainingRecordController {
+
+    @Autowired
+    private PersonTrainingRecordService personTrainingRecordService;
+
+    @ApiOperation(value = "鏌ヨ浜哄憳 鍩硅璁板綍")
+    @GetMapping("trainingSelectTrainingRecord")
+    public Result<IPage<PersonTrainingRecordListDto>> trainingSelectTrainingRecord(Page page, String userName, Integer userId, Integer departmentId) {
+        IPage<PersonTrainingRecordListDto> iPage = personTrainingRecordService.personnelTrainingPersonnel(page, userName, userId, departmentId);
+        return Result.success(iPage);
+    }
+
+
+    @ApiOperation(value = "鏌ヨ浜哄憳鏄庣粏 鍩硅璁板綍")
+    @GetMapping("queryPersonnelDetails")
+    public Result<IPage<TrainingRecordPersonDetailedDto>> queryPersonnelDetails(Page page, Integer userId, Integer trainingDate) {
+        IPage<TrainingRecordPersonDetailedDto> iPage = personTrainingRecordService.queryPersonnelDetailsOfUserIdAndYear(page, userId, trainingDate); // 鏂板鏍规嵁骞翠唤鏌ヨ
+        return Result.success(iPage);
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅璁板綍
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭浜哄憳鍩硅璁板綍")
+    @GetMapping("/exportTrainingRecord")
+    public void exportTrainingRecord(Integer userId, Integer trainingDate, HttpServletResponse response){
+        personTrainingRecordService.exportTrainingRecordAddTrainingDate(userId, trainingDate, response);// 鏂板鏍规嵁骞翠唤鏌ヨ
+
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDetailsDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDetailsDto.java
new file mode 100644
index 0000000..ffdbdcc
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDetailsDto.java
@@ -0,0 +1,65 @@
+package com.ruoyi.personnel.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-13 鏄熸湡浜� 13:52:52
+ * Description:
+ */
+@Data
+public class PersonBasicInfoDetailsDto {
+
+    @ApiModelProperty("鐢ㄦ埛id")
+    private Integer userId;
+
+    @ApiModelProperty("鐢ㄦ埛濮撳悕")
+    private String name;
+
+    @ApiModelProperty("鍏ヨ亴鏃堕棿")
+    private String entryTimeStr;
+
+    @ApiModelProperty("瀹為檯瀹炰範缁撴潫")
+    private String endPracticalPracticeStr;
+
+    @ApiModelProperty("绫嶈疮")
+    private String nativePlace;
+
+    @ApiModelProperty("韬唤璇佸彿")
+    private String identityCard;
+
+    @ApiModelProperty("韬唤璇佸湴鍧�")
+    private String idAddress;
+
+    @ApiModelProperty("鐢ㄦ埛鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty("姣曚笟闄㈡牎")
+    private String graduatedInstitutions1;
+
+    @ApiModelProperty("涓撲笟")
+    private String major1;
+
+    @ApiModelProperty("姣曚笟鏃堕棿1")
+    private LocalDateTime graduationTime1;
+
+    @ApiModelProperty("鏈�楂樺鍘�")
+    private String officialAcademicRedentials;
+
+    @ApiModelProperty("鏈�楂樺浣�")
+    private String highestDegree;
+
+    @ApiModelProperty("鑱岀О")
+    private String professionalTitle;
+
+    // 鑱屼笟鑳藉姏
+
+    @ApiModelProperty("绱ф�ヨ仈绯讳汉")
+    private String emergencyContact;
+
+    @ApiModelProperty("绱ф�ヨ仈绯讳汉鐢佃瘽")
+    private String emergencyContactPhone;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java
new file mode 100644
index 0000000..b5cd643
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java
@@ -0,0 +1,47 @@
+package com.ruoyi.personnel.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.ruoyi.personnel.pojo.PersonBasicInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+@ExcelIgnoreUnannotated
+public class PersonBasicInfoDto extends PersonBasicInfo {
+    @ApiModelProperty(value = "璐﹀彿")
+    @ExcelProperty("鍛樺伐缂栧彿")
+    private String account;
+
+    @ApiModelProperty(value = "濮撳悕")
+    @ExcelProperty("濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "濮撳悕(鑻辨枃)")
+    private String nameEn;
+
+    @ApiModelProperty(value = "骞撮緞")
+    private Integer age;
+
+    @ApiModelProperty(value = "鐢佃瘽鍙风爜")
+    @ExcelProperty("鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "閭")
+    private String email;
+
+    @ApiModelProperty(value = "閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty(value = "lims缁勭粐鏋舵瀯")
+    private String departLimsId;
+
+    @ApiModelProperty(value = "绛惧悕鐓х墖鍦板潃")
+    private String signatureUrl;
+
+    @ApiModelProperty(value = "鑷韩鐓х墖鍦板潃")
+    private String pictureUrl;
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoWorkDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoWorkDto.java
new file mode 100644
index 0000000..13cd08d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoWorkDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2025/1/14
+ */
+@Data
+public class PersonBasicInfoWorkDto extends PersonBasicInfoWork {
+
+    @ApiModelProperty("濉厖浣跨敤")
+    private String fill;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonCommunicationAbilityDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonCommunicationAbilityDto.java
new file mode 100644
index 0000000..d3cb18e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonCommunicationAbilityDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonCommunicationAbility;
+import lombok.Data;
+
+@Data
+public class PersonCommunicationAbilityDto extends PersonCommunicationAbility {
+
+    private String userName;
+
+    private String account;
+
+    private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java
new file mode 100644
index 0000000..096f8d3
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+import lombok.Data;
+
+@Data
+public class PersonJobResponsibilitiesDto extends PersonJobResponsibilities {
+
+    private String incumbentName;
+
+    private String supervisorName;
+
+    private String departLimsName;
+
+    private String account;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityDto.java
new file mode 100644
index 0000000..5e77690
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityDto.java
@@ -0,0 +1,30 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PersonPersonnelCapacityDto extends PersonPersonnelCapacity {
+
+    @ApiModelProperty("鎿嶄綔浜哄鍚�")
+    private String confirmOperatingPersonnelName;
+
+    @ApiModelProperty("浜哄憳濮撳悕")
+    private String userName;
+
+    @ApiModelProperty("宀椾綅鍚嶇О")
+    private String postName;
+
+    @ApiModelProperty("宀椾綅鑱岃矗")
+    private String responsibilities;
+
+    @ApiModelProperty("宸ヤ綔缁忓巻")
+    private String placeWork;
+
+    @ApiModelProperty("涓撲笟")
+    private String major;
+
+    @ApiModelProperty(value = "鑱岀О")
+    private String professionalTitle;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityExportDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityExportDto.java
new file mode 100644
index 0000000..20526b6
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityExportDto.java
@@ -0,0 +1,101 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/28
+ */
+@Data
+public class PersonPersonnelCapacityExportDto extends PersonPersonnelCapacity {
+
+    @ApiModelProperty("宀椾綅鍚嶇О")
+    private String postName;
+
+    @ApiModelProperty("浜哄憳濮撳悕")
+    private String userName;
+
+    @ApiModelProperty("瀛﹀巻")
+    private String officialAcademicRedentials;
+
+    @ApiModelProperty("涓撲笟")
+    private String major;
+
+    @ApiModelProperty("鑱岀О")
+    private String professionalTitle;
+
+    @ApiModelProperty("宸ヤ綔缁忓巻")
+    private String placeWork;
+
+    @ApiModelProperty("瀛﹀巻 绗﹀悎涓庡惁(1锛氱鍚�)")
+    private String academicConformNot1 = "鈻�";
+    @ApiModelProperty("瀛﹀巻 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+    private String academicConformNot2 = "鈻�";
+    @ApiModelProperty("瀛﹀巻 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+    private String academicConformNot3 = "鈻�";
+
+    @ApiModelProperty("鐩稿叧骞撮檺  绗﹀悎涓庡惁(1锛氱鍚�)")
+    private String relatedYearsConformNot1 = "鈻�";
+    @ApiModelProperty("鐩稿叧骞撮檺  绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+    private String relatedYearsConformNot2 = "鈻�";
+    @ApiModelProperty("鐩稿叧骞撮檺  绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+    private String relatedYearsConformNot3 = "鈻�";
+
+    @ApiModelProperty("鐩稿叧鍩硅 绗﹀悎涓庡惁(1锛氱鍚�)")
+    private String relatedTrainingConformNot1 = "鈻�";
+    @ApiModelProperty("鐩稿叧鍩硅 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+    private String relatedTrainingConformNot2 = "鈻�";
+    @ApiModelProperty("鐩稿叧鍩硅 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+    private String relatedTrainingConformNot3 = "鈻�";
+
+    @ApiModelProperty("鐩稿叧缁忛獙 绗﹀悎涓庡惁(1锛氱鍚�)")
+    private String relevantExperienceConformNot1 = "鈻�";
+    @ApiModelProperty("鐩稿叧缁忛獙 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+    private String relevantExperienceConformNot2 = "鈻�";
+    @ApiModelProperty("鐩稿叧缁忛獙 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+    private String relevantExperienceConformNot3 = "鈻�";
+
+    @ApiModelProperty("涓婂矖璇� 绗﹀悎涓庡惁(1锛氱鍚�)")
+    private String workLicenseConformNot1 = "鈻�";
+    @ApiModelProperty("涓婂矖璇� 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+    private String workLicenseConformNot2 = "鈻�";
+    @ApiModelProperty("涓婂矖璇� 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+    private String workLicenseConformNot3 = "鈻�";
+
+    @ApiModelProperty("宀椾綅鑱岃矗1(鐔熸倝鏈矖浣嶇殑浜у搧妫�娴嬫牱鍝佸埗澶囧拰鐩稿叧浜у搧鍩虹鐭ヨ瘑)")
+    private String jobResponsibilities1 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗2(鐔熸倝鏈矖浣嶆牱鍝佹娴嬫祦绋�)")
+    private String jobResponsibilities2 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗3(姝g‘鐔熺粌鎿嶄綔鏈矖浣嶄华琛ㄨ澶�)")
+    private String jobResponsibilities3 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗4(鐔熸倝鏈矖浣嶇浉鍏虫娴嬫爣鍑�)")
+    private String jobResponsibilities4 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗5(鐔熸倝鏈矖浣嶄骇鍝佹�ц兘鍙婄粨鏋滃垽鏂�佸垎鏋�)")
+    private String jobResponsibilities5 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗6(瀹屾垚鐩稿簲鐨勫巶楠屻�佽璇�)")
+    private String jobResponsibilities6 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗7(缂栧啓鐩稿叧妫�娴嬫墜椤�)")
+    private String jobResponsibilities7 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗8(浜嗚В浠櫒璁惧鍩烘湰缁撴瀯涓庣畝鍗曠淮鎶や繚鍏�)")
+    private String jobResponsibilities8 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗9(鍏峰鎶�鑳藉煿璁殑鑳藉姏)")
+    private String jobResponsibilities9 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗10(鍏峰妫�娴嬩华鍣ㄦ敼閫犺兘鍔�)")
+    private String jobResponsibilities10 = "鈻�";
+
+    @ApiModelProperty("宀椾綅鑱岃矗 绗﹀悎涓庡惁(1锛氱鍚�)")
+    private String jobResponsibilitiesConformNot1 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+    private String jobResponsibilitiesConformNot2 = "鈻�";
+    @ApiModelProperty("宀椾綅鑱岃矗 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+    private String jobResponsibilitiesConformNot3 = "鈻�";
+
+    @ApiModelProperty("缁煎悎璇勪环1(鍙儨浠昏宀椾綅)")
+    private String comprehensiveAssessment1 = "鈻�";
+    @ApiModelProperty("缁煎悎璇勪环2(鍙竟鍩硅杈逛笂宀�)")
+    private String comprehensiveAssessment2 = "鈻�";
+    @ApiModelProperty("缁煎悎璇勪环3(涓嶈儨浠昏宀椾綅)")
+    private String comprehensiveAssessment3 = "鈻�";
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java
new file mode 100644
index 0000000..33dd76c
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+import lombok.Data;
+
+@Data
+public class PersonPostAuthorizationRecordDto extends PersonPostAuthorizationRecord {
+
+    private String userName;
+
+    private String account;
+
+    private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java
new file mode 100644
index 0000000..5be270b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+import lombok.Data;
+
+@Data
+public class PersonRewardPunishmentRecordDto extends PersonRewardPunishmentRecord {
+
+    private String userName;
+
+    private String account;
+
+    private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java
new file mode 100644
index 0000000..2c6f9aa
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.personnel.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PersonTrainingDetailedDto extends PersonTrainingDetailed {
+
+    @ApiModelProperty("涓惧姙閮ㄩ棬鍚嶇О")
+    private String holdingDepartmentName;
+
+    @ApiModelProperty("鍩硅璁插笀鍚嶇О")
+    private String trainingLecturerName;
+
+    @ApiModelProperty("褰撳墠鐧诲綍浜烘槸鍚﹁棰�")
+    private Boolean whetherClaim;
+
+
+    @ApiModelProperty("鍩硅鏃ユ湡")
+    private String trainingDateString;
+
+    // 瀵煎嚭浣跨敤
+    @TableField(select = false, exist = false)
+    @ApiModelProperty("搴忓彿(瀵煎嚭浣跨敤)")
+    private Integer index;
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java
new file mode 100644
index 0000000..c6ad50b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonTraining;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PersonTrainingDto瀵硅薄", description = "鍩硅璁″垝")
+public class PersonTrainingDto extends PersonTraining {
+
+    @ApiModelProperty("缂栧埗浜哄鍚�")
+    private String compilerName;
+
+    @ApiModelProperty("瀹℃牳浜哄鍚�")
+    private String reviewerName;
+
+    @ApiModelProperty("鎵瑰噯浜哄鍚�")
+    private String approverName;
+
+    @ApiModelProperty("鍒涘缓浜哄鍚�")
+    private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java
new file mode 100644
index 0000000..445bef7
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonTrainingRecord;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PersonTrainingRecordDto extends PersonTrainingRecord {
+    @ApiModelProperty(value = "濮撳悕")
+    private String userName;
+
+    @ApiModelProperty(value = "宸ュ彿")
+    private String account;
+
+    @ApiModelProperty(value = "瑙掕壊")
+    private String roleName;
+
+    @ApiModelProperty(value = "鐢佃瘽鍙风爜")
+    private String phone;
+
+    @ApiModelProperty(value = "閮ㄩ棬")
+    private String department;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordListDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordListDto.java
new file mode 100644
index 0000000..da61ed1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordListDto.java
@@ -0,0 +1,37 @@
+package com.ruoyi.personnel.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PersonTrainingRecordListDto {
+
+    @ApiModelProperty(value = "鐢ㄦ埛id")
+    private Integer userId;
+
+    @ApiModelProperty("鍛樺伐缂栧彿")
+    private String account;
+
+    @ApiModelProperty("鐢ㄦ埛濮撳悕")
+    private String name;
+
+    @ApiModelProperty("鎵�鍦ㄩ儴闂�")
+    private String departLimsName;
+
+    @ApiModelProperty("鑱岀О")
+    private String professionalTitle;
+
+    @ApiModelProperty("鏈�楂樺鍘�")
+    private String officialAcademicRedentials;
+
+    @ApiModelProperty("鍏ュ崟浣嶆椂闂�")
+    private LocalDateTime unitTime;
+
+    @ApiModelProperty("鍏ュ崟浣嶆椂闂�")
+    private String unitTimeSting;
+
+    @ApiModelProperty("涓撲笟")
+    private String major1;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordSubmitDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordSubmitDto.java
new file mode 100644
index 0000000..e24f5d2
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordSubmitDto.java
@@ -0,0 +1,35 @@
+package com.ruoyi.personnel.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class PersonTrainingRecordSubmitDto {
+
+    @ApiModelProperty("骞村害璁″垝鏄庣粏ID")
+    private Integer trainingDetailedId;
+
+    @ApiModelProperty("鍩硅鍦扮偣")
+    private String placeTraining;
+
+    @ApiModelProperty("鍩硅瀹屾垚鏃堕棿")
+    private LocalDate openingTime;
+
+    @ApiModelProperty("鑰冩牳鏂瑰紡")
+    private String assessmentMethod;
+
+    @ApiModelProperty("鏈鍩硅缁煎悎璇勪环")
+    private String comprehensiveAssessment;
+
+    @ApiModelProperty("璇勪环浜�")
+    private Integer assessmentUserId;
+
+    @ApiModelProperty("璇勪环鏃堕棿")
+    private LocalDate assessmentDate;
+
+    private Integer state;
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java
new file mode 100644
index 0000000..320af2a
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.personnel.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/25
+ */
+@Data
+public class TrainingRecordExportDto {
+
+    @ApiModelProperty("鐢ㄦ埛鍚嶇О1")
+    private String userName1;
+
+    @ApiModelProperty("閮ㄩ棬1")
+    private String department1;
+
+    @ApiModelProperty("鑰冩牳缁撴灉1")
+    private String examinationResults1;
+
+    @ApiModelProperty("鐢ㄦ埛鍚嶇О2")
+    private String userName2;
+
+    @ApiModelProperty("閮ㄩ棬1")
+    private String department2;
+
+    @ApiModelProperty("鑰冩牳缁撴灉1")
+    private String examinationResults2;
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordPersonDetailedDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordPersonDetailedDto.java
new file mode 100644
index 0000000..23f0a02
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordPersonDetailedDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.personnel.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class TrainingRecordPersonDetailedDto {
+
+    @ApiModelProperty("鍩硅鏃ユ湡")
+    private String trainingDateString;
+
+    @ApiModelProperty("鍩硅鏃ユ湡")
+    private String trainingDate;
+
+    @ApiModelProperty("鍩硅鍐呭")
+    private String trainingContent;
+
+    @ApiModelProperty("璇炬椂")
+    private Integer classHour;
+
+    @ApiModelProperty("鑰冩牳缁撴灉")
+    private String examinationResults;
+
+    @ApiModelProperty("澶囨敞")
+    private String remarks;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java
new file mode 100644
index 0000000..856b6f4
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java
@@ -0,0 +1,24 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.common.core.domain.entity.User;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserPageDto extends User {
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    private String createUserName;
+
+    @ApiModelProperty(value = "鏇存柊鐢ㄦ埛")
+    private String updateUserName;
+
+    @ApiModelProperty(value = "瑙掕壊")
+    private String roleName;
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java
new file mode 100644
index 0000000..84456f3
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java
@@ -0,0 +1,34 @@
+package com.ruoyi.personnel.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class PersonRewardPunishmentRecordExcel {
+    @ExcelProperty("鍛樺伐缂栧彿")
+    private String account;
+
+    @ExcelProperty("濮撳悕")
+    private String userName;
+
+    @ExcelProperty("濂栨儵绾у埆")
+    private String rewardPunishLevel;
+
+    @ExcelProperty("濂栨儵鍚嶇О")
+    private String rewardPunishName;
+
+    @ExcelProperty("濂栨儵鏃堕棿")
+    private String rewardPunishTime;
+
+    @ExcelProperty("濂栨儵鍗曚綅")
+    private String rewardPunishWorkUnit;
+
+    @ExcelProperty("濂栨儵鍐呭")
+    private String rewardPunishContent;
+
+    @ExcelProperty("鍒涘缓鏃堕棿")
+    private String createTime;
+
+    @ExcelProperty("鍒涘缓浜�")
+    private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedListener.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedListener.java
new file mode 100644
index 0000000..9effe23
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedListener.java
@@ -0,0 +1,42 @@
+package com.ruoyi.personnel.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.ruoyi.personnel.service.PersonTrainingDetailedService;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class PersonTrainingDetailedListener extends AnalysisEventListener<PersonTrainingDetailedUpload> {
+
+    private Integer planId;
+
+    private static final int BATCH_COUNT = 1000;
+    List<PersonTrainingDetailedUpload> list = new ArrayList<>();
+
+    private PersonTrainingDetailedService personTrainingDetailedService;
+
+    public PersonTrainingDetailedListener(PersonTrainingDetailedService personTrainingDetailedService) {
+        this.personTrainingDetailedService = personTrainingDetailedService;
+    }
+
+    @Override
+    public void invoke(PersonTrainingDetailedUpload data, AnalysisContext context) {
+        list.add(data);
+        if (list.size() >= BATCH_COUNT) {
+            save();
+            list.clear();
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        save();
+    }
+
+    private void save() {
+        personTrainingDetailedService.importExcel(list, this.planId);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java
new file mode 100644
index 0000000..7bc5876
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java
@@ -0,0 +1,35 @@
+package com.ruoyi.personnel.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class PersonTrainingDetailedUpload {
+
+    @ExcelProperty("鍩硅鐩爣")
+    private String trainingObjectives;
+
+    @ExcelProperty("鍩硅鍐呭")
+    private String trainingContent;
+
+    @ExcelProperty("鍩硅鏂瑰紡")
+    private String trainingMode;
+
+    @ExcelProperty("鍙傚姞瀵硅薄")
+    private String participants;
+
+    @ExcelProperty("涓惧姙閮ㄩ棬")
+    private String holdingDepartment;
+
+    @ExcelProperty("鍩硅璁插笀")
+    private String trainingLecturerName;
+
+    @ExcelProperty("鍩硅鏃堕棿")
+    private String trainingDate;
+
+    @ExcelProperty("璇炬椂")
+    private Integer classHour;
+
+    @ExcelProperty("澶囨敞")
+    private String remarks;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java
new file mode 100644
index 0000000..9fee604
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.personnel.pojo.Annex;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AnnexMapper extends BaseMapper<Annex> {
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java
new file mode 100644
index 0000000..fb0e2f5
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:28:55
+ */
+public interface PersonBasicInfoFileMapper extends BaseMapper<PersonBasicInfoFile> {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java
new file mode 100644
index 0000000..f23ba5f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java
@@ -0,0 +1,42 @@
+package com.ruoyi.personnel.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.common.core.domain.entity.DepartmentDto;
+import com.ruoyi.personnel.dto.PersonBasicInfoDto;
+import com.ruoyi.personnel.pojo.PersonBasicInfo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+public interface PersonBasicInfoMapper extends BaseMapper<PersonBasicInfo> {
+
+    List<DepartmentDto> selectLimsUser();
+
+    PersonBasicInfoDto getCNASPersonnelInfo(Integer userId);
+
+    /**
+     * 浜哄憳鍩烘湰淇℃伅鍒嗛〉鏌ヨ
+     * @param page
+     * @param name
+     * @param departmentId
+     * @return
+     */
+    IPage<Map<String, Object>> selectPersonBasecInfoAndUser(Page page, String name, Integer departmentId);
+
+    /**
+     * 瀵煎嚭鏌ヨ浜哄憳淇℃伅
+     * @param userId
+     * @return
+     */
+    Map<String, Object> selectexportPersonBasic(Integer userId);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java
new file mode 100644
index 0000000..df8d2d4
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:45:04
+ */
+public interface PersonBasicInfoWorkMapper extends BaseMapper<PersonBasicInfoWork> {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonCommunicationAbilityMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonCommunicationAbilityMapper.java
new file mode 100644
index 0000000..0888b35
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonCommunicationAbilityMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonCommunicationAbilityDto;
+import com.ruoyi.personnel.pojo.PersonCommunicationAbility;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 娌熼�氳兘鍔� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+public interface PersonCommunicationAbilityMapper extends BaseMapper<PersonCommunicationAbility> {
+
+    IPage<PersonCommunicationAbilityDto> personPersonCommunicationAbilityPage(Page page, @Param("departLimsId") Integer departLimsId, @Param("userId") Integer userId, @Param("userName") String userName);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java
new file mode 100644
index 0000000..a46e3bf
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+public interface PersonJobResponsibilitiesMapper extends BaseMapper<PersonJobResponsibilities> {
+
+    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java
new file mode 100644
index 0000000..b2bb671
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonPersonnelCapacityDto;
+import com.ruoyi.personnel.dto.PersonPersonnelCapacityExportDto;
+import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 浜哄憳鑳藉姏 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 11:26:18
+ */
+public interface PersonPersonnelCapacityMapper extends BaseMapper<PersonPersonnelCapacity> {
+
+    IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName);
+
+    /**
+     * 鏌ヨ浜哄憳鑳藉姏鎺ュ彛
+     * @param id
+     * @return
+     */
+    PersonPersonnelCapacityExportDto selectExportPersonnelCapacity(@Param("id") Integer id);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java
new file mode 100644
index 0000000..1121811
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+public interface PersonPostAuthorizationRecordMapper extends BaseMapper<PersonPostAuthorizationRecord> {
+
+    IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page, Integer departLimsId, Integer userId, String userName);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java
new file mode 100644
index 0000000..a77cb79
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonRewardPunishmentRecordDto;
+import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+public interface PersonRewardPunishmentRecordMapper extends BaseMapper<PersonRewardPunishmentRecord> {
+
+    IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page, Integer userId, String userName, Date startTime, Date endTime, Integer departmentId);
+
+    List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(Integer userId, Integer departmentId, String userName, Date startTime, Date endTime);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedFileMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedFileMapper.java
new file mode 100644
index 0000000..88b2531
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedFileMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailedFile;
+
+/**
+ * 浜哄憳鍩硅璁″垝璇︽儏闄勪欢琛�(CnasPersonTrainingDetailedFile)$desc
+ *
+ * @author makejava
+ * @since 2024-12-25 14:18:22
+ */
+public interface PersonTrainingDetailedFileMapper extends BaseMapper<PersonTrainingDetailedFile> {
+
+}
+
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java
new file mode 100644
index 0000000..47c397b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java
@@ -0,0 +1,48 @@
+package com.ruoyi.personnel.mapper;
+
+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.personnel.dto.PersonTrainingDetailedDto;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁″垝璇︽儏 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:46:27
+ */
+public interface PersonTrainingDetailedMapper extends MyBaseMapper<PersonTrainingDetailed> {
+
+    IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page,
+                                                                    String trainingLecturerName,
+                                                                    String courseCode, String trainingDate,
+                                                                    Integer id,
+                                                                    Integer userId,
+                                                                    Integer loginUserId);
+
+    /**
+     * 鏍规嵁涓昏〃id鏌ヨ璇︽儏
+     * @param trainingId
+     * @return
+     */
+    List<PersonTrainingDetailedDto> selectTrainingList(@Param("trainingId") Integer trainingId);
+
+    /**
+     * 鏌ヨ璇︾粏
+     * @param id
+     * @return
+     */
+    PersonTrainingDetailedDto selectTrainingDetail(@Param("id") Integer id);
+
+    /**
+     * 鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅
+     * @return
+     */
+    List<PersonTrainingDetailed> getThisYearTrainingDetailed();
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.java
new file mode 100644
index 0000000..f5dd8a6
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonTrainingDto;
+import com.ruoyi.personnel.pojo.PersonTraining;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+public interface PersonTrainingMapper extends BaseMapper<PersonTraining> {
+
+    IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departLimsId);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java
new file mode 100644
index 0000000..a10ed81
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java
@@ -0,0 +1,67 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonTrainingRecordDto;
+import com.ruoyi.personnel.dto.PersonTrainingRecordListDto;
+import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
+import com.ruoyi.personnel.pojo.PersonTrainingRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-12 04:50:48
+ */
+public interface PersonTrainingRecordMapper extends BaseMapper<PersonTrainingRecord> {
+
+    List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName);
+
+    IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId);
+
+    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetails(Page page, Integer userId);
+
+    /**
+     * 鏍规嵁璇︽儏id鏌ヨ鍩硅浜哄憳
+     * @param trainingDetailedId
+     * @return
+     */
+    List<PersonTrainingRecordDto> selectListByTrainingDetailedId(@Param("trainingDetailedId") Integer trainingDetailedId);
+
+    /**
+     * 鏌ヨ浜哄憳淇℃伅
+     * @param userId
+     * @return
+     */
+    PersonTrainingRecordListDto selectUserTraining(@Param("userId") Integer userId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鏌ヨ鍩硅璁板綍
+     * @param userId
+     * @return
+     */
+    List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtos(Integer userId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍
+     * @param page
+     * @param userId
+     * @param year
+     * @return
+     */
+    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍瀵煎嚭
+     * @param userId
+     * @param trainingDate
+     * @return
+     */
+    List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtosByTrainingDate(Integer userId, Integer year);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java
new file mode 100644
index 0000000..bbf2017
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java
@@ -0,0 +1,48 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("cnas_annex")
+@ApiModel("浜哄憳鍩烘湰淇℃伅闄勪欢琛�")
+public class Annex implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "user琛╥d")
+    private Integer userId;
+
+    @ApiModelProperty(value = "璇佷欢鍙�")
+    private String idNumber;
+
+    @ApiModelProperty(value = "鍙戣瘉鍗曚綅")
+    private String issueUnit;
+
+    @ApiModelProperty(value = "鏂囦欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty(value = "绾у埆")
+    private String level;
+
+    @ApiModelProperty(value = "鏈夋晥鏈�")
+    private String periodValidity;
+
+    @ApiModelProperty(value = "娣诲姞鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "澶嶅嵃浠�")
+    private String copy;
+
+    @ApiModelProperty(value = "鍘熶欢")
+    private String original;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java
new file mode 100644
index 0000000..abf3880
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java
@@ -0,0 +1,156 @@
+package com.ruoyi.personnel.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 java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+@Getter
+@Setter
+@TableName("cnas_person_basic_info")
+@ApiModel(value = "PersonBasicInfo瀵硅薄", description = "")
+public class PersonBasicInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("褰撳墠鐘舵��")
+    private String currentState;
+
+    @ApiModelProperty("鑱岀О")
+    @ExcelProperty("鑱岀О")
+    private String professionalTitle;
+
+    @ApiModelProperty("鎬у埆")
+    private String sex;
+
+    @ApiModelProperty("浜哄憳鍒嗙被")
+    private String personnelClassification;
+
+    @ApiModelProperty("鍑虹敓鏃ユ湡")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime dateBirth;
+
+    @ApiModelProperty("韬唤璇佸彿")
+    @ExcelProperty("璇佷欢鍙风爜")
+    private String identityCard;
+
+    @ApiModelProperty("姘戞棌")
+    private String nation;
+
+    @ApiModelProperty("鏀挎不闈㈣矊")
+    private String politicalStatus;
+
+    @ApiModelProperty("鏈�楂樺鍘�")
+    @ExcelProperty("鏈�楂樺鍘�")
+    private String officialAcademicRedentials;
+
+    @ApiModelProperty("姣曚笟鏃堕棿1")
+    @ExcelProperty("姣曚笟鏃堕棿")
+    private LocalDateTime graduationTime1;
+
+    @ApiModelProperty("姣曚笟闄㈡牎1")
+    @ExcelProperty("姣曚笟闄㈡牎")
+    private String graduatedInstitutions1;
+
+    @ApiModelProperty("涓撲笟1")
+    @ExcelProperty("鎵�瀛︿笓涓�")
+    private String major1;
+
+    @ApiModelProperty("姣曚笟鏃堕棿2")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime graduationTime2;
+
+    @ApiModelProperty("姣曚笟闄㈡牎2")
+    private String graduatedInstitutions2;
+
+    @ApiModelProperty("涓撲笟2")
+    private String major2;
+
+    @ApiModelProperty("鎵嬫満鍙�")
+    private String telephone;
+
+    @ApiModelProperty("澶囨敞")
+    private String remarks;
+
+    @ApiModelProperty("鐢ㄦ埛琛紙user锛塱d")
+    private Integer userId;
+
+    @ApiModelProperty("鍏徃鍚嶇О")
+    private String corporateName;
+
+    @ApiModelProperty("宀椾綅鍚嶇О")
+    private String postName;
+
+    @ApiModelProperty("鍏ラ泦鍥㈡椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    @ExcelProperty("鍏ラ泦鍥㈡椂闂�")
+    private LocalDateTime groupTime;
+
+    @ApiModelProperty("鍔冲姩鍏崇郴")
+    private Integer laborRelations;
+
+    @ApiModelProperty("宸ヤ綔鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime workingTime;
+
+    @ApiModelProperty("鍚堝悓鏈夋晥鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime contractLifeTime;
+
+    @ApiModelProperty("绫嶈疮")
+    @ExcelProperty("绫嶈疮")
+    private String nativePlace;
+
+    @ApiModelProperty("璇佷欢鏈夋晥鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime validityPeriod;
+
+    @ApiModelProperty("濠氬Щ鐘跺喌")
+    private Integer maritalStatus;
+
+    @ApiModelProperty("璇佷欢鍦板潃")
+    @ExcelProperty("璇佷欢鍦板潃")
+    private String idAddress;
+
+    @ApiModelProperty("璇佷欢璇︾粏鍦板潃")
+    private String idDetailAddress;
+
+    @ApiModelProperty("鍏ュ厷/鍥㈡椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime dumplingTime;
+
+    @ApiModelProperty("鏈�楂樺浣�")
+    @ExcelProperty("鏈�楂樺浣�")
+    private String highestDegree;
+
+    @ApiModelProperty("鏈�鍚庢洿鏂版椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime lastUpdateTime;
+
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java
new file mode 100644
index 0000000..0b366f8
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java
@@ -0,0 +1,58 @@
+package com.ruoyi.personnel.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 2025-01-09 05:28:55
+ */
+@Getter
+@Setter
+@TableName("cnas_person_basic_info_file")
+@ApiModel(value = "PersonBasicInfoFile瀵硅薄", description = "浜哄憳鍩烘湰淇℃伅闄勪欢")
+public class PersonBasicInfoFile implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "basic_info_file_id", type = IdType.AUTO)
+    private Integer basicInfoFileId;
+
+    @ApiModelProperty("浜哄憳鍩烘湰淇℃伅id")
+    private Integer userId;
+
+    @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-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java
new file mode 100644
index 0000000..2d15afa
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java
@@ -0,0 +1,53 @@
+package com.ruoyi.personnel.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 2025-01-09 05:45:04
+ */
+@Getter
+@Setter
+@TableName("cnas_person_basic_info_work")
+@ApiModel(value = "PersonBasicInfoWork瀵硅薄", description = "浜哄憳鍩烘湰淇℃伅")
+public class PersonBasicInfoWork implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "basic_info_work_id", type = IdType.AUTO)
+    private Integer basicInfoWorkId;
+
+    @ApiModelProperty("浜哄憳id")
+    private Integer userId;
+
+    @ApiModelProperty("宸ヤ綔缁忓巻")
+    private String workExperience;
+
+    @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-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonCommunicationAbility.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonCommunicationAbility.java
new file mode 100644
index 0000000..4df192d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonCommunicationAbility.java
@@ -0,0 +1,61 @@
+package com.ruoyi.personnel.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 java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 娌熼�氳褰�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+@Getter
+@Setter
+@TableName("cnas_person_communication_ability")
+@ApiModel(value = "PersonCommunicationAbility瀵硅薄", description = "娌熼�氳褰�")
+public class PersonCommunicationAbility implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("娌熼�氫汉id")
+    private String userId;
+
+    @ApiModelProperty("娌熼�氭椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime communicationTime;
+
+    @ApiModelProperty("娌熼�氬湴鐐�")
+    private String communicationPlace;
+
+    @ApiModelProperty("娌熼�氬唴瀹�")
+    private String communicationContent;
+
+    @ApiModelProperty("鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鏇存柊浜篿d", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java
new file mode 100644
index 0000000..55536fb
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java
@@ -0,0 +1,78 @@
+package com.ruoyi.personnel.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-10-09 02:07:49
+ */
+@Getter
+@Setter
+@TableName("cnas_person_job_responsibilities")
+@ApiModel(value = "PersonJobResponsibilities瀵硅薄", description = "宀椾綅鑱岃矗")
+public class PersonJobResponsibilities implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("1宀椾綅鍚嶇О")
+    private String postName;
+
+    @ApiModelProperty("1宸ヤ綔鐩爣")
+    private String jobObjective;
+
+    @ApiModelProperty("1宀椾綅鑱岃矗")
+    private String jobResponsibilities;
+
+    @ApiModelProperty("1浠昏亴浜篿d")
+    private String incumbentId;
+
+    @ApiModelProperty("1 鎻愪氦鎿嶄綔浜�")
+    private String submittingOperator;
+
+    @ApiModelProperty("1鎻愪氦鏃ユ湡")
+    private LocalDateTime submittingDate;
+
+    @ApiModelProperty("2 浠昏亴浜� 涓荤id")
+    private Integer supervisorId;
+
+    @ApiModelProperty("2 浠昏亴浜� 鎿嶄綔浜�")
+    private String incumbentOperator;
+
+    @ApiModelProperty("2 浠昏亴浜� 鏃ユ湡")
+    private LocalDateTime incumbentDate;
+
+    @ApiModelProperty("3 涓荤 鎿嶄綔浜�")
+    private String supervisorOperator;
+
+    @ApiModelProperty("3 涓荤 鏃ユ湡")
+    private LocalDateTime supervisorDate;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("褰撳墠鐘舵��")
+    private String currentState;
+
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡 / 鎻愪氦鏃ユ湡", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("褰撳墠璐熻矗浜�")
+    private String currentResponsible;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java
new file mode 100644
index 0000000..b7103f0
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java
@@ -0,0 +1,114 @@
+package com.ruoyi.personnel.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-10-10 11:26:18
+ */
+@Getter
+@Setter
+@TableName("cnas_person_personnel_capacity")
+@ApiModel(value = "PersonPersonnelCapacity瀵硅薄", description = "浜哄憳鑳藉姏")
+public class PersonPersonnelCapacity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("瀛﹀巻")
+    private String academicDegree;
+
+    @ApiModelProperty("瀛﹀巻 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer academicConformNot;
+
+    @ApiModelProperty("瀛﹀巻 澶囨敞")
+    private String academicRemarks;
+
+    @ApiModelProperty("鐩稿叧骞撮檺")
+    private String relatedYears;
+
+    @ApiModelProperty("鐩稿叧骞撮檺  绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer relatedYearsConformNot;
+
+    @ApiModelProperty("鐩稿叧骞撮檺 澶囨敞")
+    private String relatedYearsRemarks;
+
+    @ApiModelProperty("鐩稿叧鍩硅")
+    private String relatedTraining;
+
+    @ApiModelProperty("鐩稿叧鍩硅 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer relatedTrainingConformNot;
+
+    @ApiModelProperty("鐩稿叧鍩硅 澶囨敞")
+    private String relatedTrainingRemarks;
+
+    @ApiModelProperty("鐩稿叧缁忛獙")
+    private String relevantExperience;
+
+    @ApiModelProperty("鐩稿叧缁忛獙 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer relevantExperienceConformNot;
+
+    @ApiModelProperty("鐩稿叧缁忛獙 澶囨敞")
+    private String relevantExperienceRemarks;
+
+    @ApiModelProperty("涓婂矖璇�")
+    private String workLicense;
+
+    @ApiModelProperty("涓婂矖璇� 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer workLicenseConformNot;
+
+    @ApiModelProperty("涓婂矖璇� 澶囨敞")
+    private String workLicenseRemarks;
+
+    @ApiModelProperty("宀椾綅鑱岃矗")
+    private String jobResponsibilities;
+
+    @ApiModelProperty("宀椾綅鑱岃矗 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer jobResponsibilitiesConformNot;
+
+    @ApiModelProperty("宀椾綅鑱岃矗 澶囨敞")
+    private String jobResponsibilitiesRemarks;
+
+    @ApiModelProperty("缁煎悎璇勪环")
+    private String comprehensiveAssessment;
+
+    @ApiModelProperty("2 纭浜� userId涓婚敭")
+    private Integer confirmOperatingPersonnelId;
+
+    @ApiModelProperty("2 纭浜� 鏃ユ湡")
+    private LocalDateTime confirmDate;
+
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓浜�", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鏇存柊浜�", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "浜哄憳濮撳悕 id")
+    private Integer userId;
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java
new file mode 100644
index 0000000..f341b83
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java
@@ -0,0 +1,74 @@
+package com.ruoyi.personnel.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-10-09 10:48:17
+ */
+@Getter
+@Setter
+@TableName("cnas_person_post_authorization_record")
+@ApiModel(value = "PersonPostAuthorizationRecord瀵硅薄", description = "浠昏亴鎺堟潈璁板綍")
+public class PersonPostAuthorizationRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("璇佷功缂栧彿")
+    private String certificateNumber;
+
+    @ApiModelProperty("琚换鑱屼汉鍛榠d")
+    private String userId;
+
+    @ApiModelProperty("浠昏亴宀椾綅")
+    private String post;
+
+    @ApiModelProperty("鎿嶄綔绫诲瀷")
+    private String operationType;
+
+    @ApiModelProperty("鍘熸枃浠跺悕绉�")
+    private String fileName;
+
+    @ApiModelProperty("绯荤粺鐢熸垚鏂囦欢鍚嶇О")
+    private String systemFileName;
+
+    @ApiModelProperty("澶囨敞")
+    private String remarks;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鏇存柊浜篿d",hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鐞嗚鐭ヨ瘑鑰冭瘯鎴愮哗")
+    private String num1;
+
+    @ApiModelProperty("鎿嶄綔鎶�鑳借�冭瘯鎴愮哗")
+    private String num2;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java
new file mode 100644
index 0000000..ab8bea1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java
@@ -0,0 +1,61 @@
+package com.ruoyi.personnel.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-10-08 11:25:02
+ */
+@Getter
+@Setter
+@TableName("cnas_person_reward_punishment_record")
+@ApiModel(value = "PersonRewardPunishmentRecord瀵硅薄", description = "濂栨儵璁板綍")
+public class PersonRewardPunishmentRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("濂栨儵绾у埆")
+    private String rewardPunishLevel;
+
+    @ApiModelProperty("濂栨儵鍚嶇О")
+    private String rewardPunishName;
+
+    @ApiModelProperty("濂栨儵鏃堕棿")
+    private LocalDateTime rewardPunishTime;
+
+    @ApiModelProperty("濂栨儵鍗曚綅")
+    private String rewardPunishWorkUnit;
+
+    @ApiModelProperty("濂栨儵鍐呭")
+    private String rewardPunishContent;
+
+    @ApiModelProperty("鐢ㄦ埛id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓浜�", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java
new file mode 100644
index 0000000..526d947
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java
@@ -0,0 +1,83 @@
+package com.ruoyi.personnel.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-10-11 01:11:49
+ */
+@Getter
+@Setter
+@TableName("cnas_person_training")
+@ApiModel(value = "PersonTraining瀵硅薄", description = "鍩硅璁″垝")
+public class PersonTraining implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty("璁″垝骞翠唤")
+    private String planYear;
+
+    @ApiModelProperty("缂栧埗浜篿d")
+    private Integer compilerId;
+
+    @ApiModelProperty("缂栧埗鏃ユ湡")
+    private LocalDateTime compilationDate;
+
+    @ApiModelProperty("瀹℃牳浜篿d")
+    private Integer reviewerId;
+
+    @ApiModelProperty("瀹℃牳鏃ユ湡")
+    private LocalDateTime auditDate;
+
+    @ApiModelProperty("瀹℃牳鐘舵��")
+    private Integer reviewerStatus;
+
+    @ApiModelProperty("瀹℃牳澶囨敞")
+    private String auditRemarks;
+
+    @ApiModelProperty("鎵瑰噯浜篿d")
+    private Integer approverId;
+
+    @ApiModelProperty("鎵瑰噯澶囨敞")
+    private String approvalRemarks;
+
+    @ApiModelProperty("鎵瑰噯鐘舵��(1锛氭壒鍑嗭紱2锛氫笉鎵瑰噯)")
+    private Integer approvalStatus;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    private LocalDateTime approvalDate;
+
+    @ApiModelProperty("鍒涘缓鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鏇存柊浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java
new file mode 100644
index 0000000..cac8233
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java
@@ -0,0 +1,99 @@
+package com.ruoyi.personnel.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.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍩硅璁″垝璇︽儏
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:46:27
+ */
+@Getter
+@Setter
+@TableName("cnas_person_training_detailed")
+@ApiModel(value = "PersonTrainingDetailed瀵硅薄", description = "鍩硅璁″垝璇︽儏")
+public class PersonTrainingDetailed implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("鍩硅璁″垝")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鍩硅鐩爣")
+    private String trainingObjectives;
+
+    @ApiModelProperty("鍩硅鍐呭")
+    private String trainingContent;
+
+    @ApiModelProperty("鍩硅鏂瑰紡")
+    private String trainingMode;
+
+    @ApiModelProperty("鐘舵��(1锛氬凡瀹屾垚锛�2锛氬緟璇勪环锛�3: 鏈紑濮�)")
+    private Integer state;
+
+    @ApiModelProperty("鍙傚姞瀵硅薄")
+    private String participants;
+
+    @ApiModelProperty("涓惧姙閮ㄩ棬")
+    private String holdingDepartment;
+
+    @ApiModelProperty("鍩硅鍦扮偣")
+    private String placeTraining;
+
+    @ApiModelProperty("鍩硅璁插笀_id")
+    private Integer trainingLecturerId;
+
+    @ApiModelProperty("璁″垝鍩硅鏃ユ湡")
+    private String trainingDate;
+
+    @ApiModelProperty("鍩硅瀹屾垚鏃堕棿")
+    private LocalDate openingTime;
+
+    @ApiModelProperty("璇炬椂")
+    private Integer classHour;
+
+    @ApiModelProperty("澶囨敞")
+    private String remarks;
+
+    @ApiModelProperty("鍩硅璁″垝id")
+    private Integer planId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鏇存柊浜篿d", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鑰冩牳鏂瑰紡")
+    private String assessmentMethod;
+
+    @ApiModelProperty("鏈鍩硅缁煎悎璇勪环")
+    private String comprehensiveAssessment;
+
+    @ApiModelProperty("璇勪环浜�")
+    private Integer assessmentUserId;
+
+    @ApiModelProperty("璇勪环鏃堕棿")
+    private LocalDate assessmentDate;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailedFile.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailedFile.java
new file mode 100644
index 0000000..cb17cdb
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailedFile.java
@@ -0,0 +1,49 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 浜哄憳鍩硅璁″垝璇︽儏闄勪欢琛�(CnasPersonTrainingDetailedFile)$desc
+ *
+ * @author makejava
+ * @since 2024-12-25 14:18:22
+ */
+@Data
+@TableName("cnas_person_training_detailed_file")
+public class PersonTrainingDetailedFile {
+
+    @TableId(type = IdType.AUTO)
+    private Integer detailedFileId;
+
+    @ApiModelProperty("浜哄憳浣犲煿璁鍒掕鎯卛d")
+    private Integer trainingDetailedId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    private Date updateTime;
+
+}
+
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java
new file mode 100644
index 0000000..593941b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java
@@ -0,0 +1,41 @@
+package com.ruoyi.personnel.pojo;
+
+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;
+
+/**
+ * <p>
+ * 鍩硅璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-12 04:50:48
+ */
+@Getter
+@Setter
+@TableName("cnas_person_training_record")
+@ApiModel(value = "PersonTrainingRecord瀵硅薄", description = "鍩硅璁板綍")
+public class PersonTrainingRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "training_record_id", type = IdType.AUTO)
+    private Integer trainingRecordId;
+
+    @ApiModelProperty("鐢ㄦ埛琛ㄦ牸锛坲ser锛変富閿�")
+    private Integer userId;
+
+    @ApiModelProperty("鍩硅璁″垝璇︽儏 - 瀛� id")
+    private Integer courseId;
+
+    @ApiModelProperty("鑰冩牳缁撴灉")
+    private String examinationResults;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java
new file mode 100644
index 0000000..8de7b15
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.pojo.Annex;
+
+public interface AnnexService extends IService<Annex> {
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java
new file mode 100644
index 0000000..1fb5ba6
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:28:55
+ */
+public interface PersonBasicInfoFileService extends IService<PersonBasicInfoFile> {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java
new file mode 100644
index 0000000..fcc4d69
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java
@@ -0,0 +1,45 @@
+package com.ruoyi.personnel.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.common.core.domain.entity.DepartmentDto;
+import com.ruoyi.personnel.dto.PersonBasicInfoDto;
+import com.ruoyi.personnel.dto.UserPageDto;
+import com.ruoyi.personnel.pojo.PersonBasicInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+public interface PersonBasicInfoService extends IService<PersonBasicInfo> {
+
+    List<DepartmentDto> selectCNSAPersonTree();
+
+    Map<String,Object> getCNASPersonnelInfo(Integer userId);
+
+    void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto);
+
+    IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId);
+
+    void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception;
+
+    String exportPersonBasicInfoById(Integer id, HttpServletResponse response);
+
+    /**
+     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板
+     * @param basicInfoId
+     * @param file
+     * @return
+     */
+    boolean uploadBasicInfoFile(Integer basicInfoId, MultipartFile file);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java
new file mode 100644
index 0000000..cfd944f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:45:04
+ */
+public interface PersonBasicInfoWorkService extends IService<PersonBasicInfoWork> {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonCommunicationAbilityService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonCommunicationAbilityService.java
new file mode 100644
index 0000000..a5186be
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonCommunicationAbilityService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonCommunicationAbilityDto;
+import com.ruoyi.personnel.pojo.PersonCommunicationAbility;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 娌熼�氳兘鍔� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+public interface PersonCommunicationAbilityService extends IService<PersonCommunicationAbility> {
+
+    IPage<PersonCommunicationAbilityDto> personPersonCommunicationAbilityPage(Page page,
+                                                                              Integer departLimsId, Integer userId, String userName);
+
+    void exportPersonCommunicationAbility(Integer id, HttpServletResponse response)throws Exception;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java
new file mode 100644
index 0000000..2afa074
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+public interface PersonJobResponsibilitiesService extends IService<PersonJobResponsibilities> {
+
+    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page,
+                                                                        String userId,
+                                                                        String departmentId,
+                                                                        String userName);
+
+    void exportPersonJobResponsibilities(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java
new file mode 100644
index 0000000..dfff72a
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java
@@ -0,0 +1,35 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonPersonnelCapacityDto;
+import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 浜哄憳鑳藉姏 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 11:26:18
+ */
+public interface PersonPersonnelCapacityService extends IService<PersonPersonnelCapacity> {
+
+    IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName);
+
+    /**
+     * 瀵煎嚭浜哄憳鑳藉姏
+     * @param id
+     * @param response
+     */
+    void exportPersonnelCapacity(Integer id, HttpServletResponse response);
+
+    /**
+     * submitConfirmPersonnelCapability
+     * @param personPersonnelCapacity
+     */
+    void submitConfirmPersonnelCapability(PersonPersonnelCapacity personPersonnelCapacity);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java
new file mode 100644
index 0000000..3c23bfe
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+public interface PersonPostAuthorizationRecordService extends IService<PersonPostAuthorizationRecord> {
+
+    IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page,
+                                                                              Integer departLimsId,
+                                                                              Integer userId,
+                                                                              String userName);
+
+    void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java
new file mode 100644
index 0000000..0f2dfdc
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonRewardPunishmentRecordDto;
+import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+public interface PersonRewardPunishmentRecordService extends IService<PersonRewardPunishmentRecord> {
+
+    IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page,
+                                                                Integer userId,
+                                                                String userName,
+                                                                Date startTime,
+                                                                Date endTime,
+                                                                Integer departmentId);
+
+    List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(Integer userId, Integer departmentId, String userName, Date startTime, Date endTime);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingDetailedService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingDetailedService.java
new file mode 100644
index 0000000..f5f52dc
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingDetailedService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonTrainingDetailedDto;
+import com.ruoyi.personnel.excel.PersonTrainingDetailedUpload;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁″垝璇︽儏 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:46:27
+ */
+public interface PersonTrainingDetailedService extends IService<PersonTrainingDetailed> {
+
+    void importExcel(List<PersonTrainingDetailedUpload> list, Integer planId);
+
+    void deleteAnnualPlanDetailTable(String ids);
+
+    IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page,
+                                                                    String trainingLecturerName,
+                                                                    String courseCode, String trainingDate, Integer id, Integer userId);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingRecordService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingRecordService.java
new file mode 100644
index 0000000..265dca6
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingRecordService.java
@@ -0,0 +1,59 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonTrainingRecordDto;
+import com.ruoyi.personnel.dto.PersonTrainingRecordListDto;
+import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto;
+import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
+import com.ruoyi.personnel.pojo.PersonTrainingRecord;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-12 04:50:48
+ */
+public interface PersonTrainingRecordService extends IService<PersonTrainingRecord> {
+
+    List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName);
+
+    void deleteTrainingAndAssessmentRecords(String ids);
+
+    IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page,
+                                                                  String userName, Integer userId, Integer departLimsId);
+
+
+    void claimOfTrainingAndAssessmentRecords(Boolean claimAndClaim, Integer courseId);
+
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍
+     * @param page
+     * @param userId
+     * @param year
+     * @return
+     */
+    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year);
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅璁板綍
+     * @param userId
+     * @param trainingDate
+     * @param response
+     */
+    void exportTrainingRecordAddTrainingDate(Integer userId, Integer trainingDate, HttpServletResponse response);
+
+    /**
+     * 鍩硅鎻愪氦
+     * @param personTrainingRecordSubmitDto
+     */
+    void trainingAndAssessmentRecordsAdded(PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto);
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java
new file mode 100644
index 0000000..046cf24
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java
@@ -0,0 +1,63 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonTrainingDto;
+import com.ruoyi.personnel.pojo.PersonTraining;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+public interface PersonTrainingService extends IService<PersonTraining> {
+
+    IPage<PersonTrainingDto> personTrainingSelect(Page page,
+                                                  String compilerName, String departmentId);
+
+    void personTrainingImport(MultipartFile file, PersonTraining training);
+
+    void personTrainingDelete(Integer id);
+
+    void reviewAnnualPersonnelTraining(PersonTraining training);
+
+    void approveAnnualPersonnelTraining(PersonTraining training);
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅璁″垝
+     * @param id
+     * @param response
+     */
+    void exportPersonTraining(Integer id, HttpServletResponse response);
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍
+     * @param id
+     * @param response
+     */
+    void exportPersonTrainingRecord(Integer id, HttpServletResponse response);
+
+    /**
+     * 浜哄憳鍩硅璇︽儏闄勪欢鏂板
+     * @param trainingDetailedId
+     * @param file
+     * @return
+     */
+    boolean uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file);
+
+    /**
+     * 鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅
+     * @return
+     */
+    List<PersonTrainingDetailed> getThisYearTrainingDetailed();
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java
new file mode 100644
index 0000000..d944b3b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java
@@ -0,0 +1,13 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.personnel.mapper.AnnexMapper;
+import com.ruoyi.personnel.pojo.Annex;
+import com.ruoyi.personnel.service.AnnexService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class AnnexServiceImpl extends ServiceImpl<AnnexMapper, Annex> implements AnnexService {
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java
new file mode 100644
index 0000000..a70f196
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.personnel.mapper.PersonBasicInfoFileMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+import com.ruoyi.personnel.service.PersonBasicInfoFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:28:55
+ */
+@Service
+public class PersonBasicInfoFileServiceImpl extends ServiceImpl<PersonBasicInfoFileMapper, PersonBasicInfoFile> implements PersonBasicInfoFileService {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java
new file mode 100644
index 0000000..0ae552c
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java
@@ -0,0 +1,340 @@
+package com.ruoyi.personnel.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.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.ruoyi.common.core.domain.entity.DepartmentDto;
+import com.ruoyi.common.core.domain.entity.DepartmentLims;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.personnel.dto.PersonBasicInfoDto;
+import com.ruoyi.personnel.dto.PersonBasicInfoWorkDto;
+import com.ruoyi.personnel.dto.UserPageDto;
+import com.ruoyi.personnel.mapper.AnnexMapper;
+import com.ruoyi.personnel.mapper.PersonBasicInfoFileMapper;
+import com.ruoyi.personnel.mapper.PersonBasicInfoMapper;
+import com.ruoyi.personnel.mapper.PersonBasicInfoWorkMapper;
+import com.ruoyi.personnel.pojo.Annex;
+import com.ruoyi.personnel.pojo.PersonBasicInfo;
+import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+import com.ruoyi.personnel.service.PersonBasicInfoService;
+import com.ruoyi.system.mapper.DepartmentLimsMapper;
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+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.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class PersonBasicInfoServiceImpl extends ServiceImpl<PersonBasicInfoMapper, PersonBasicInfo> implements PersonBasicInfoService {
+
+    @Autowired
+    private DepartmentLimsMapper departmentMapper;
+    @Value("${file.path}")
+    private String imgUrl;
+    @Value("${wordUrl}")
+    private String wordUrl;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private AnnexMapper annexMapper;
+    @Resource
+    private PersonBasicInfoFileMapper personBasicInfoFileMapper;
+    @Resource
+    private PersonBasicInfoWorkMapper personBasicInfoWorkMapper;
+
+    @Override
+    public List<DepartmentDto> selectCNSAPersonTree() {
+        List<DepartmentDto> departments = departmentMapper.selectDepartment();
+        List<DepartmentDto> limsUser = baseMapper.selectLimsUser();
+        departments.addAll(limsUser);
+        //鑾峰彇鐖惰妭鐐�
+        return departments.stream().filter(m -> m.getFatherId() == null).peek(
+                (m) -> m.setChildren(getChildren(m, departments))
+        ).collect(Collectors.toList());
+    }
+
+    @Override
+    public Map<String,Object> getCNASPersonnelInfo(Integer userId) {
+        Map<String, Object> map = new HashMap<>();
+        Map<Integer,List<DepartmentLims>>  childrenMap = new HashMap<>();
+        List<DepartmentLims> deptS = departmentMapper.selectList(null);
+        for (DepartmentLims dept : deptS) {
+            if(!Objects.isNull(dept.getFatherId())) {
+                if(!childrenMap.containsKey(dept.getFatherId())) {
+                        childrenMap.put(dept.getFatherId(),new ArrayList<>());
+                }
+                childrenMap.get(dept.getFatherId()).add(dept);
+            }
+        }
+        // 鐖惰妭鐐�
+        List<DepartmentLims> deptF = new ArrayList<>();
+        for (DepartmentLims dept : deptS) {
+            if(Objects.isNull(dept.getFatherId())) {
+                deptF.add(buildTree(dept,childrenMap));
+            }
+        }
+        map.put("department",deptF);
+        map.put("PersonBasicInfoDto",baseMapper.getCNASPersonnelInfo(userId));
+        map.put("annexList",annexMapper.selectList(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId,userId)));
+        return map;
+    }
+
+    private DepartmentLims buildTree(DepartmentLims departmentLims, Map<Integer,List<DepartmentLims>> childrenMap) {
+        if(childrenMap.containsKey(departmentLims.getId())) {
+            departmentLims.setChildren(childrenMap.get(departmentLims.getId()));
+            for (DepartmentLims departmentLims1 : departmentLims.getChildren()) {
+                buildTree(departmentLims1,childrenMap);
+            }
+        }
+        return departmentLims;
+    }
+
+    @Override
+    public void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto) {
+        User user = new User();
+        user.setId(personBasicInfoDto.getUserId());
+        user.setAccount(personBasicInfoDto.getAccount());
+        user.setName(personBasicInfoDto.getName());
+        user.setNameEn(personBasicInfoDto.getNameEn());
+        user.setAge(personBasicInfoDto.getAge());
+        user.setPhone(personBasicInfoDto.getPhone());
+        user.setEmail(personBasicInfoDto.getEmail());
+        user.setSignatureUrl(personBasicInfoDto.getSignatureUrl());
+        user.setPictureUrl(personBasicInfoDto.getPictureUrl());
+        user.setDepartLimsId(personBasicInfoDto.getDepartLimsId());
+        userMapper.updateById(user);
+        PersonBasicInfo personBasicInfo = JSONObject.parseObject(JSON.toJSONString(personBasicInfoDto), PersonBasicInfo.class);
+        PersonBasicInfo one = baseMapper.selectOne(new LambdaQueryWrapper<PersonBasicInfo>()
+                .eq(PersonBasicInfo::getUserId, personBasicInfoDto.getUserId()));
+        if(Objects.isNull(one)) {
+            baseMapper.insert(personBasicInfo);
+        }else {
+            baseMapper.updateById(personBasicInfo);
+        }
+    }
+
+    @Override
+    public IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId) {
+        return baseMapper.selectPersonBasecInfoAndUser(page, name, departmentId);
+    }
+
+    @Override
+    public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception {
+        ArrayList<PersonBasicInfoDto> data = new ArrayList<>();
+        List<User> list = userMapper.selectList(null);
+        for (User user : list) {
+            PersonBasicInfoDto personBasicInfoDto = new PersonBasicInfoDto();
+            PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId()));
+            if (ObjectUtils.isNotEmpty(personBasicInfo)) {
+                BeanUtils.copyProperties(personBasicInfo, personBasicInfoDto);
+            }
+            personBasicInfoDto.setName(user.getName());
+            personBasicInfoDto.setAccount(user.getAccount());
+            personBasicInfoDto.setPhone(ObjectUtils.isNotEmpty(user.getPhone()) ? user.getPhone() : " ");
+            data.add(personBasicInfoDto);
+        }
+        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(PersonBasicInfoDto.class).build();
+            excelWriter.write(data, mainSheet);
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    @Override
+    public String exportPersonBasicInfoById(Integer id, HttpServletResponse response) {
+        Map<String, Object> userMap = baseMapper.selectexportPersonBasic(id);
+        User user = userMapper.selectById(id);
+        PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId()));
+        if (ObjectUtils.isEmpty(personBasicInfo)){
+            throw new ErrorException("璇ョ敤鎴风殑鍩烘湰淇℃伅娌℃湁褰曞叆,鏆傛棤娉曞鍑�");
+        }
+        // 璇佷欢
+        List<Annex> annexList = annexMapper.selectList(Wrappers.<Annex>lambdaQuery()
+                .eq(Annex::getUserId, id));
+        // 宸ヤ綔缁忓巻
+        List<PersonBasicInfoWork> personBasicInfoWorks = personBasicInfoWorkMapper.selectList(Wrappers.<PersonBasicInfoWork>lambdaQuery()
+                .eq(PersonBasicInfoWork::getUserId, id));
+
+        List<PersonBasicInfoWorkDto> workList = personBasicInfoWorks.stream().map(basicInfoWork -> {
+            PersonBasicInfoWorkDto personBasicInfoWorkDto = new PersonBasicInfoWorkDto();
+            personBasicInfoWorkDto.setWorkExperience(basicInfoWork.getWorkExperience());
+            personBasicInfoWorkDto.setFill("涓昏宸ヤ綔缁忓巻\nMain work experience鈭�1");
+            return personBasicInfoWorkDto;
+        }).collect(Collectors.toList());
+
+        // 妫�鏌ュ垪琛ㄩ暱搴﹀苟濉厖绌哄璞�
+        while (annexList.size() < 10) {
+            annexList.add(new Annex());
+        }
+
+        // 妫�鏌ュ垪琛ㄩ暱搴﹀苟濉厖绌哄璞�
+        while (workList.size() < 4) {
+            workList.add(new PersonBasicInfoWorkDto());
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/person-basic-info.docx");
+        Configure configure = Configure.builder()
+                .bind("annexList", new HackLoopTableRenderPolicy())
+                .bind("workList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("user", userMap);
+                    put("annexList", annexList);
+                    put("workList", workList);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    userMap.get("name") + "浜哄憳妗f", "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("瀵煎嚭澶辫触");
+        }
+
+        return null;
+    }
+
+    /**
+     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板
+     * @param userId
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean uploadBasicInfoFile(Integer userId, MultipartFile file) {
+        if (userId == null) {
+            throw new ErrorException("缂哄皯浜哄憳id");
+        }
+
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        PersonBasicInfoFile personBasicInfoFile = new PersonBasicInfoFile();
+        personBasicInfoFile.setUserId(userId);
+        personBasicInfoFile.setFileName(filename);
+        if (contentType != null && contentType.startsWith("image/")) {
+            // 鏄浘鐗�
+            path = imgUrl;
+            personBasicInfoFile.setType(1);
+        } else {
+            // 鏄枃浠�
+            path = wordUrl;
+            personBasicInfoFile.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));
+            personBasicInfoFile.setFileUrl(pathName);
+            personBasicInfoFileMapper.insert(personBasicInfoFile);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("闄勪欢涓婁紶閿欒");
+            return false;
+        }
+    }
+
+    /**
+     * 閫掑綊鏌ヨ瀛愯妭鐐�
+     * @param root  鏍硅妭鐐�
+     * @param all   鎵�鏈夎妭鐐�
+     * @return 鏍硅妭鐐逛俊鎭�
+     */
+    private List<DepartmentDto> getChildren(DepartmentDto root, List<DepartmentDto> all) {
+        if (ObjectUtils.isNotEmpty(root.getId())) {
+            return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek(
+                    (m) -> m.setChildren(getChildren(m, all))
+            ).collect(Collectors.toList());
+        } else {
+            return Collections.emptyList();
+        }
+    }
+
+    // 姘村钩鍚堝苟鍗曞厓鏍�
+    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-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java
new file mode 100644
index 0000000..3ed8882
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.personnel.mapper.PersonBasicInfoWorkMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+import com.ruoyi.personnel.service.PersonBasicInfoWorkService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:45:04
+ */
+@Service
+public class PersonBasicInfoWorkServiceImpl extends ServiceImpl<PersonBasicInfoWorkMapper, PersonBasicInfoWork> implements PersonBasicInfoWorkService {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonCommunicationAbilityServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonCommunicationAbilityServiceImpl.java
new file mode 100644
index 0000000..2c1a227
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonCommunicationAbilityServiceImpl.java
@@ -0,0 +1,113 @@
+package com.ruoyi.personnel.service.impl;
+
+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.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.personnel.dto.PersonCommunicationAbilityDto;
+import com.ruoyi.personnel.mapper.PersonCommunicationAbilityMapper;
+import com.ruoyi.personnel.pojo.PersonCommunicationAbility;
+import com.ruoyi.personnel.service.PersonCommunicationAbilityService;
+import com.ruoyi.system.mapper.UserMapper;
+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-10-09 12:00:57
+ */
+@Service
+public class PersonCommunicationAbilityServiceImpl extends ServiceImpl<PersonCommunicationAbilityMapper, PersonCommunicationAbility> implements PersonCommunicationAbilityService {
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<PersonCommunicationAbilityDto> personPersonCommunicationAbilityPage(Page page, Integer departLimsId, Integer userId, String userName) {
+        IPage<PersonCommunicationAbilityDto> personCommunicationAbilityDtoIPage = baseMapper.personPersonCommunicationAbilityPage(page, departLimsId, userId, userName);
+        List<PersonCommunicationAbilityDto> collect = personCommunicationAbilityDtoIPage.getRecords().stream().map(personCommunicationAbilityDto -> {
+            if (ObjectUtils.isNotEmpty(personCommunicationAbilityDto.getUserId())) {
+                List<String> account = new ArrayList<>();
+                List<String> name = new ArrayList<>();
+                for (String s : personCommunicationAbilityDto.getUserId().split(",")) {
+                    User user = userMapper.selectById(Integer.parseInt(s));
+                    account.add(user.getAccount());
+                    name.add(user.getName());
+                }
+                personCommunicationAbilityDto.setAccount(account.stream().collect(Collectors.joining(",")));
+                personCommunicationAbilityDto.setUserName(name.stream().collect(Collectors.joining(",")));
+            }
+            return personCommunicationAbilityDto;  // 杩欓噷鍙互瀵硅繑鍥炵殑鏁版嵁杩涜澶勭悊锛屽娣诲姞涓�浜涙柊鐨勫睘鎬ф垨杞崲绛夈��
+        }).collect(Collectors.toList());
+        personCommunicationAbilityDtoIPage.setRecords(collect);
+        return personCommunicationAbilityDtoIPage;
+    }
+
+    @Override
+    public void exportPersonCommunicationAbility(Integer id, HttpServletResponse response) throws Exception {
+        PersonCommunicationAbility personCommunicationAbility = baseMapper.selectById(id);
+        //娌熼�氫汉
+        String collect = " ";
+        if (ObjectUtils.isNotEmpty(personCommunicationAbility.getUserId())) {
+            List<String> name = new ArrayList<>();
+            for (String s : personCommunicationAbility.getUserId().split(",")) {
+                User user = userMapper.selectById(Integer.parseInt(s));
+                name.add(user.getName());
+            }
+            collect = name.stream().collect(Collectors.joining(","));
+        }
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+
+        //鏃堕棿
+        String communicationTime = "";
+        if (ObjectUtils.isNotEmpty(personCommunicationAbility.getCommunicationTime())) {
+            communicationTime = personCommunicationAbility.getCommunicationTime().format(formatter);
+        }
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/communication-deal.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String finalCollect = collect;
+        String finalCommunicationTime = communicationTime;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("userName", finalCollect);
+                    put("communicationTime", finalCommunicationTime);
+                    put("communicationPlace", personCommunicationAbility.getCommunicationPlace());
+                    put("communicationContent", personCommunicationAbility.getCommunicationContent());
+                }});
+
+        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-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java
new file mode 100644
index 0000000..d55a3f0
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java
@@ -0,0 +1,113 @@
+package com.ruoyi.personnel.service.impl;
+
+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.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.mapper.PersonJobResponsibilitiesMapper;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+import com.ruoyi.personnel.service.PersonJobResponsibilitiesService;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+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.HashMap;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+@Service
+@AllArgsConstructor
+public class PersonJobResponsibilitiesServiceImpl extends ServiceImpl<PersonJobResponsibilitiesMapper, PersonJobResponsibilities> implements PersonJobResponsibilitiesService {
+
+    @Resource
+    private UserMapper userMapper;
+
+
+    @Override
+    public IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
+        return baseMapper.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
+    }
+
+    @Override
+    public void exportPersonJobResponsibilities(Integer id, HttpServletResponse response) {
+        PersonJobResponsibilities personJobResponsibilities = baseMapper.selectById(id);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+        //宀椾綅鍚嶇О
+        String name = personJobResponsibilities.getPostName();
+        //鎵�灞為儴闂�
+        String departLims = userMapper.selectUserDepartmentLimsName(Integer.parseInt(personJobResponsibilities.getIncumbentId()));
+        //宸ヤ綔鐩爣
+        String objective = personJobResponsibilities.getJobObjective();
+        //宀椾綅鑱岃矗
+        String responsibilities = personJobResponsibilities.getJobResponsibilities();
+        //浠昏亴浜�
+        User user = userMapper.selectById(Integer.parseInt(personJobResponsibilities.getIncumbentId()));
+        String incumbent = user.getName();
+        //浠昏亴鏃堕棿
+        String incumbentDate = "";
+        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getIncumbentDate())) {
+            incumbentDate = personJobResponsibilities.getIncumbentDate().format(formatter);
+        }
+        //涓荤
+        String supervisor = "";
+        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getSupervisorId())) {
+            supervisor = userMapper.selectById(personJobResponsibilities.getSupervisorId()).getName();
+        }
+        //涓荤鏃堕棿
+        String supervisorDate = "";
+        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getSupervisorDate())) {
+            supervisorDate = personJobResponsibilities.getSupervisorDate().format(formatter);
+        }
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/explain-deal.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String finalIncumbentDate = incumbentDate;
+        String finalSupervisor = supervisor;
+        String finalSupervisorDate = supervisorDate;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("name", name);
+                    put("account", user.getAccount());
+                    put("departLims", departLims);
+                    put("objective", objective);
+                    put("responsibilities", responsibilities);
+                    put("incumbent", incumbent);
+                    put("incumbentDate", finalIncumbentDate);
+                    put("supervisor", finalSupervisor);
+                    put("supervisorDate", finalSupervisorDate);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    name + "鐨勪换鑱屽矖浣嶈鏄庝功", "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-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPersonnelCapacityServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPersonnelCapacityServiceImpl.java
new file mode 100644
index 0000000..0c056f1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPersonnelCapacityServiceImpl.java
@@ -0,0 +1,158 @@
+package com.ruoyi.personnel.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.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.personnel.dto.PersonPersonnelCapacityDto;
+import com.ruoyi.personnel.dto.PersonPersonnelCapacityExportDto;
+import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
+import com.ruoyi.personnel.mapper.PersonPersonnelCapacityMapper;
+import com.ruoyi.personnel.service.PersonPersonnelCapacityService;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+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.util.HashMap;
+
+/**
+ * <p>
+ * 浜哄憳鑳藉姏 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 11:26:18
+ */
+@Service
+public class PersonPersonnelCapacityServiceImpl extends ServiceImpl<PersonPersonnelCapacityMapper, PersonPersonnelCapacity> implements PersonPersonnelCapacityService {
+
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private InformationNotificationService informationNotificationService;
+
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Override
+    public IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName) {
+        return baseMapper.personPersonnelCapacityPage(page, departLimsId, userId, userName);
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鑳藉姏
+     * @param id
+     * @param response
+     */
+    @Override
+    public void exportPersonnelCapacity(Integer id, HttpServletResponse response) {
+        PersonPersonnelCapacityExportDto capacityExportDto = baseMapper.selectExportPersonnelCapacity(id);
+
+        // 纭浜�
+        String confirmUrl = null;
+        if (capacityExportDto.getConfirmOperatingPersonnelId() != null) {
+            confirmUrl = userMapper.selectById(capacityExportDto.getConfirmOperatingPersonnelId()).getSignatureUrl();
+            if (StringUtils.isBlank(confirmUrl)) {
+                throw new ErrorException("缂哄皯纭浜虹鍚�");
+            }
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/personnel-capacity.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String finalConfirmUrl = confirmUrl;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("capacity", capacityExportDto);
+                    put("confirmUrl", StringUtils.isNotBlank(finalConfirmUrl) ? Pictures.ofLocal(imgUrl + "/" + finalConfirmUrl).create() : null);
+                    put("confirmDateUrl", capacityExportDto.getConfirmDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(capacityExportDto.getConfirmDate())).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 personPersonnelCapacity
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void submitConfirmPersonnelCapability(PersonPersonnelCapacity personPersonnelCapacity) {
+        if (personPersonnelCapacity.getConfirmOperatingPersonnelId() == null) {
+            throw new ErrorException("缂哄皯纭浜�");
+        }
+        User formUser = userMapper.selectById(personPersonnelCapacity.getUserId());
+
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        // 娑堟伅鍙戦��
+        InformationNotification info = new InformationNotification();
+        // 鍙戦�佷汉
+        info.setCreateUser(user.getName());
+        info.setMessageType("6");
+        info.setTheme("CNAS浜哄憳鑳藉姏纭閫氱煡");
+        info.setContent(formUser.getName() + "鐨勪汉鍛樿兘鍔涘緟纭");
+        info.setSenderId(userId);
+        // 鎺ユ敹浜�
+        info.setConsigneeId(personPersonnelCapacity.getConfirmOperatingPersonnelId());
+        info.setJumpPath("a6-personnel");
+        informationNotificationService.addInformationNotification(info);
+        this.saveOrUpdate(personPersonnelCapacity);
+
+        // 鍙戦�佷紒涓氬井淇¢�氱煡
+        threadPoolTaskExecutor.execute(() -> {
+            // 鏌ヨ鎺ユ敹浜�
+            User personnel = userMapper.selectById(personPersonnelCapacity.getConfirmOperatingPersonnelId());
+
+            String message = "";
+            message += "CNAS浜哄憳鑳藉姏纭閫氱煡";
+            message += "\n璇峰幓璧勬簮绠$悊-浜哄憳-浜哄憳鑳藉姏濉啓";
+            message += "\n" + formUser.getName() + "鐨勪汉鍛樿兘鍔涘緟纭";
+            //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+            try {
+                WxCpUtils.inform(personnel.getAccount(), message, null);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        });
+
+    }
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
new file mode 100644
index 0000000..68f2961
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
@@ -0,0 +1,132 @@
+package com.ruoyi.personnel.service.impl;
+
+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.FilePictureRenderData;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.mapper.PersonPostAuthorizationRecordMapper;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+import com.ruoyi.personnel.service.PersonPostAuthorizationRecordService;
+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.util.HashMap;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+@Service
+public class PersonPostAuthorizationRecordServiceImpl extends ServiceImpl<PersonPostAuthorizationRecordMapper, PersonPostAuthorizationRecord> implements PersonPostAuthorizationRecordService {
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Override
+    public IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page, Integer departLimsId, Integer userId, String userName) {
+        return baseMapper.personPostAuthorizationRecordPage(page, departLimsId, userId, userName);
+    }
+
+    @Override
+    public void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response) {
+        PersonPostAuthorizationRecord personPostAuthorizationRecord = baseMapper.selectById(id);
+        //濮撳悕
+        User user = userMapper.selectById(personPostAuthorizationRecord.getUserId());
+        String name = user.getName();
+        //todo: 浜哄憳浠昏亴鎺堟潈璁板綍濮撳悕鑻辨枃
+//        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
+//        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+//        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+//        StringBuilder pinyinBuilder = new StringBuilder();
+//        for (int i = 0; i < name.length(); i++) {
+//            char c = name.charAt(i);
+//            // 鍒ゆ柇鏄惁鏄眽瀛�
+//            if (Character.toString(c).matches("[\\u4E00-\\u9FFF]")) {
+//                // 鑾峰彇姹夊瓧鐨勬嫾闊虫暟缁�
+//                String[] pinyinArray = new String[0];
+//                try {
+//                    pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
+//                } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
+//
+//                }
+//                if (pinyinArray!= null && pinyinArray.length > 0) {
+//                    pinyinBuilder.append(pinyinArray[0]);
+//                }
+//            } else {
+//                pinyinBuilder.append(c);
+//            }
+//        }
+//        String nameEn = pinyinBuilder.toString();
+        String nameEn = user.getNameEn();
+        //鐞嗚鐭ヨ瘑鑰冭瘯鎴愮哗
+        String num1=personPostAuthorizationRecord.getNum1();
+        //鎿嶄綔鎶�鑳借�冭瘯鎴愮哗
+        String num2=personPostAuthorizationRecord.getNum2();
+        //璇佷功缂栧彿
+        String code = personPostAuthorizationRecord.getCertificateNumber();
+        //鍙戣瘉鏃堕棿
+        LocalDateTime createTime = personPostAuthorizationRecord.getCreateTime();
+        String year = createTime.getYear() + "";
+        String mon = createTime.getMonth().getValue() + "";
+        String day = createTime.getDayOfMonth() + "";
+        //涓汉鐓х墖
+        if (ObjectUtils.isEmpty(user.getPictureUrl())) {
+            throw new ErrorException(name+"鐨勪釜浜虹収鐗囨病鏈変笂浼�");
+        }
+        String pictureUrl = user.getPictureUrl();
+
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/credentials-deal.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("name", name);
+                    put("nameEn", nameEn);
+                    put("num1", num1);
+                    put("num2", num2);
+                    put("code", code);
+                    put("year", year);
+                    put("mon", mon);
+                    put("day", day);
+                    put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + pictureUrl));
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    name+"鐨勫矖浣嶈亴涓氳祫鏍兼寮�", "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-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java
new file mode 100644
index 0000000..9393bbd
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java
@@ -0,0 +1,36 @@
+package com.ruoyi.personnel.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.personnel.dto.PersonRewardPunishmentRecordDto;
+import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
+import com.ruoyi.personnel.mapper.PersonRewardPunishmentRecordMapper;
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+import com.ruoyi.personnel.service.PersonRewardPunishmentRecordService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+@Service
+public class PersonRewardPunishmentRecordServiceImpl extends ServiceImpl<PersonRewardPunishmentRecordMapper, PersonRewardPunishmentRecord> implements PersonRewardPunishmentRecordService {
+
+    @Override
+    public IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page, Integer userId, String userName, Date startTime, Date endTime, Integer departmentId) {
+        return baseMapper.rewardPunishmentPage(page, userId, userName, startTime, endTime, departmentId);
+    }
+
+    @Override
+    public List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(Integer userId, Integer departmentId, String userName, Date startTime, Date endTime) {
+        return baseMapper.rewardPunishmentExport(userId, departmentId, userName, startTime, endTime);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingDetailedServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingDetailedServiceImpl.java
new file mode 100644
index 0000000..3eaf942
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingDetailedServiceImpl.java
@@ -0,0 +1,85 @@
+package com.ruoyi.personnel.service.impl;
+
+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.core.domain.entity.User;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.personnel.dto.PersonTrainingDetailedDto;
+import com.ruoyi.personnel.excel.PersonTrainingDetailedUpload;
+import com.ruoyi.personnel.mapper.PersonTrainingDetailedMapper;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import com.ruoyi.personnel.service.PersonTrainingDetailedService;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁″垝璇︽儏 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:46:27
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+@AllArgsConstructor
+public class PersonTrainingDetailedServiceImpl extends ServiceImpl<PersonTrainingDetailedMapper, PersonTrainingDetailed> implements PersonTrainingDetailedService {
+
+
+    private UserMapper userMapper;
+
+    @Override
+    public void importExcel(List<PersonTrainingDetailedUpload> list, Integer planId) {
+        List<PersonTrainingDetailed> personTrainingDetailedList = new ArrayList<>();
+        list.forEach(i -> {
+            PersonTrainingDetailed personTrainingDetailed = new PersonTrainingDetailed();
+            BeanUtils.copyProperties(i, personTrainingDetailed);
+
+            // 鍖归厤璁插笀
+            User user = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                    .eq(User::getName, i.getTrainingLecturerName()));
+            if (ObjectUtils.isEmpty(user)) {
+                throw new ErrorException("鏈壘鍒拌璁插笀锛�" + i.getTrainingLecturerName());
+            }
+            personTrainingDetailed.setTrainingLecturerId(user.getId());
+            personTrainingDetailed.setPlanId(planId);
+            personTrainingDetailed.setState(3);
+
+            personTrainingDetailed.setTrainingDate(i.getTrainingDate());
+
+
+            personTrainingDetailedList.add(personTrainingDetailed);
+        });
+        // 鎵归噺鏂板
+        if (CollectionUtils.isNotEmpty(personTrainingDetailedList)) {
+            baseMapper.insertBatchSomeColumn(personTrainingDetailedList);
+        }
+    }
+
+    @Override
+    public void deleteAnnualPlanDetailTable(String ids) {
+        String[] split = ids.split(",");
+        if (split.length > 0) {
+            for (String s : split) {
+                baseMapper.deleteById(s);
+            }
+        }
+    }
+
+    @Override
+    public IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page, String trainingLecturerName, String courseCode, String trainingDate, Integer id, Integer userId) {
+        return baseMapper.queryTheAnnualPlanDetailsTable(page, trainingLecturerName, courseCode, trainingDate, id, userId, null);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java
new file mode 100644
index 0000000..4b11bb5
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java
@@ -0,0 +1,177 @@
+package com.ruoyi.personnel.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.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.personnel.dto.PersonTrainingRecordDto;
+import com.ruoyi.personnel.dto.PersonTrainingRecordListDto;
+import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto;
+import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
+import com.ruoyi.personnel.mapper.PersonTrainingRecordMapper;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import com.ruoyi.personnel.pojo.PersonTrainingRecord;
+import com.ruoyi.personnel.service.PersonTrainingDetailedService;
+import com.ruoyi.personnel.service.PersonTrainingRecordService;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+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.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-12 04:50:48
+ */
+@Transactional(rollbackFor = Exception.class)
+@Service
+public class PersonTrainingRecordServiceImpl extends ServiceImpl<PersonTrainingRecordMapper, PersonTrainingRecord> implements PersonTrainingRecordService {
+
+    @Autowired
+    private PersonTrainingDetailedService personTrainingDetailedService;
+    @Resource
+    private InformationNotificationService informationNotificationService;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName) {
+        return baseMapper.trainingAndAssessmentRecordsPage(trainingDetailedId, userName);
+    }
+
+    @Override
+    public void deleteTrainingAndAssessmentRecords(String ids) {
+        String[] split = ids.split(",");
+        if (split.length > 0) {
+            for (String s : split) {
+                baseMapper.deleteById(s);
+            }
+        }
+    }
+
+    @Override
+    public IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId) {
+        return baseMapper.personnelTrainingPersonnel(page, userName, userId, departLimsId);
+    }
+
+    @Override
+    public void claimOfTrainingAndAssessmentRecords(Boolean claimAndClaim, Integer courseId) {
+
+    }
+
+
+    @Override
+    public IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year) {
+        return baseMapper.queryPersonnelDetailsOfUserIdAndYear(page, userId, year);
+    }
+
+    @Override
+    public void exportTrainingRecordAddTrainingDate(Integer userId, Integer trainingDate, HttpServletResponse response) {
+        // 鏌ヨ浜哄憳浜轰俊鎭�
+        PersonTrainingRecordListDto trainingRecordListDto = baseMapper.selectUserTraining(userId);
+
+        // 鏌ヨ鍩硅璁板綍
+        List<TrainingRecordPersonDetailedDto> personDetailedDtos = baseMapper.selectPersonDetailedDtosByTrainingDate(userId, trainingDate);
+
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/training-record.docx");
+        Configure configure = Configure.builder()
+                .bind("personnelDetailsLisat", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("traning", trainingRecordListDto);
+                    put("personnelDetailsLisat", personDetailedDtos);
+                }});
+        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 personTrainingRecordSubmitDto
+     */
+    @Override
+    public void trainingAndAssessmentRecordsAdded(PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) {
+        personTrainingDetailedService.update(Wrappers.<PersonTrainingDetailed>lambdaUpdate()
+                .eq(PersonTrainingDetailed::getId, personTrainingRecordSubmitDto.getTrainingDetailedId())
+                .set(PersonTrainingDetailed::getAssessmentMethod, personTrainingRecordSubmitDto.getAssessmentMethod())
+                .set(PersonTrainingDetailed::getPlaceTraining, personTrainingRecordSubmitDto.getPlaceTraining())
+                .set(PersonTrainingDetailed::getOpeningTime, personTrainingRecordSubmitDto.getOpeningTime())
+                .set(PersonTrainingDetailed::getAssessmentUserId, personTrainingRecordSubmitDto.getAssessmentUserId())
+                .set(PersonTrainingDetailed::getState, personTrainingRecordSubmitDto.getState()));
+
+        // 鍙戦�佹秷鎭�氱煡
+        if (personTrainingRecordSubmitDto.getState().equals(2)) {
+            PersonTrainingDetailed personPersonnelCapacity = personTrainingDetailedService.getById(personTrainingRecordSubmitDto.getTrainingDetailedId());
+
+            Integer userId = SecurityUtils.getUserId().intValue();
+            User user = userMapper.selectById(userId);
+            // 娑堟伅鍙戦��
+            InformationNotification info = new InformationNotification();
+            // 鍙戦�佷汉
+            info.setCreateUser(user.getName());
+            info.setMessageType("6");
+            info.setTheme("CNAS浜哄憳鍩硅璁″垝寰呰瘎浠�");
+            info.setContent("鍩硅鍐呭:" + personPersonnelCapacity.getTrainingContent() + "鐨勪汉鍛樺煿璁緟璇勪环");
+            info.setSenderId(userId);
+            // 鎺ユ敹浜�
+            info.setConsigneeId(personTrainingRecordSubmitDto.getAssessmentUserId());
+            info.setJumpPath("a6-personnel");
+            informationNotificationService.addInformationNotification(info);
+
+            // 鍙戦�佷紒涓氬井淇¢�氱煡
+            threadPoolTaskExecutor.execute(() -> {
+                // 鏌ヨ鎺ユ敹浜�
+                User personnel = userMapper.selectById(personTrainingRecordSubmitDto.getAssessmentUserId());
+
+                String message = "";
+                message += "CNAS浜哄憳鍩硅璁″垝寰呰瘎浠�";
+                message += "\n璇峰幓璧勬簮绠$悊-浜哄憳-浜哄憳鍩硅璁″垝";
+                message += "\n" + "鍩硅鍐呭:" + personPersonnelCapacity.getTrainingContent() + "鐨勪汉鍛樺煿璁緟璇勪环";
+                //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                try {
+                    WxCpUtils.inform(personnel.getAccount(), message, null);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+    }
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingServiceImpl.java
new file mode 100644
index 0000000..3463126
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingServiceImpl.java
@@ -0,0 +1,429 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.personnel.dto.PersonTrainingDetailedDto;
+import com.ruoyi.personnel.dto.PersonTrainingDto;
+import com.ruoyi.personnel.dto.PersonTrainingRecordDto;
+import com.ruoyi.personnel.dto.TrainingRecordExportDto;
+import com.ruoyi.personnel.excel.PersonTrainingDetailedListener;
+import com.ruoyi.personnel.excel.PersonTrainingDetailedUpload;
+import com.ruoyi.personnel.mapper.PersonTrainingDetailedFileMapper;
+import com.ruoyi.personnel.mapper.PersonTrainingDetailedMapper;
+import com.ruoyi.personnel.mapper.PersonTrainingMapper;
+import com.ruoyi.personnel.mapper.PersonTrainingRecordMapper;
+import com.ruoyi.personnel.pojo.PersonTraining;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailedFile;
+import com.ruoyi.personnel.service.PersonTrainingDetailedService;
+import com.ruoyi.personnel.service.PersonTrainingService;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+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.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.Optional;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class PersonTrainingServiceImpl extends ServiceImpl<PersonTrainingMapper, PersonTraining> implements PersonTrainingService {
+
+    @Autowired
+    private PersonTrainingDetailedService personTrainingDetailedService;
+    @Autowired
+    private UserMapper userMapper;
+    @Autowired
+    private PersonTrainingDetailedMapper personTrainingDetailedMapper;
+    @Autowired
+    private PersonTrainingRecordMapper personTrainingRecordMapper;
+    @Autowired
+    private PersonTrainingDetailedFileMapper personTrainingDetailedFileMapper;
+    @Resource
+    private InformationNotificationService informationNotificationService;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Override
+    public IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departmentId) {
+
+        return baseMapper.personTrainingSelect(page, compilerName, departmentId);
+    }
+
+    @Override
+    public void personTrainingImport(MultipartFile file, PersonTraining training) {
+
+        Integer userId = SecurityUtils.getUserId().intValue();
+        // 骞村害璁″垝鐖剁骇鏂板鏁版嵁
+        PersonTraining personSupervisePlan = new PersonTraining();
+        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
+        personSupervisePlan.setFileName(fileName);
+        personSupervisePlan.setPlanYear(training.getPlanYear());
+        personSupervisePlan.setCompilerId(userId);
+        personSupervisePlan.setReviewerId(training.getReviewerId());
+        personSupervisePlan.setCompilationDate(LocalDateTime.now());
+        baseMapper.insert(personSupervisePlan);
+        User user = userMapper.selectById(userId);
+        // 娑堟伅鍙戦��
+        InformationNotification info = new InformationNotification();
+        // 鍙戦�佷汉
+        info.setCreateUser(user.getName());
+        info.setMessageType("6");
+        info.setTheme("CNAS鍩硅璁″垝瀹℃牳閫氱煡");
+        info.setContent("鎮ㄦ湁涓�鏉″煿璁鍒掑緟瀹℃牳");
+        info.setSenderId(userId);
+        // 鎺ユ敹浜�
+        info.setConsigneeId(training.getApproverId());
+        info.setJumpPath("a6-personnel");
+        informationNotificationService.addInformationNotification(info);
+
+        // 鍙戦�佷紒涓氬井淇¢�氱煡
+        threadPoolTaskExecutor.execute(() -> {
+            // 鏌ヨ鎺ユ敹浜�
+            User personnel = userMapper.selectById(training.getApproverId());
+
+            String message = "";
+            message += "CNAS鍩硅璁″垝瀹℃牳閫氱煡";
+            message += "\n璇峰幓璧勬簮绠$悊-浜哄憳-鍩硅璁″垝濉啓";
+            message += "\n" + fileName + "鐨勫煿璁鍒掑緟瀹℃牳";
+            //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+            try {
+                WxCpUtils.inform(personnel.getAccount(), message, null);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        });
+
+        // 骞村害璁″垝璇︽儏 鏂板
+        try {
+            PersonTrainingDetailedListener personSupervisePlanDetailsListener = new PersonTrainingDetailedListener(personTrainingDetailedService);
+            personSupervisePlanDetailsListener.setPlanId(personSupervisePlan.getId());
+            EasyExcel.read(file.getInputStream(), PersonTrainingDetailedUpload.class, personSupervisePlanDetailsListener).sheet().doRead();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void personTrainingDelete(Integer id) {
+        personTrainingDetailedService.remove(Wrappers.<PersonTrainingDetailed>lambdaQuery()
+                .eq(PersonTrainingDetailed::getPlanId, id));
+        baseMapper.deleteById(id);
+    }
+
+    @Override
+    public void reviewAnnualPersonnelTraining(PersonTraining training) {
+        PersonTraining personTraining = new PersonTraining();
+        personTraining.setId(training.getId());
+        personTraining.setApproverId(training.getApproverId());// 娣诲姞鎵瑰噯浜�
+        personTraining.setAuditDate(LocalDateTime.now());
+        personTraining.setAuditRemarks(training.getAuditRemarks());
+        personTraining.setReviewerStatus(training.getReviewerStatus());
+
+        PersonTraining old = baseMapper.selectById(training.getId());
+
+        // 娑堟伅鍙戦��
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        InformationNotification info = new InformationNotification();
+        // 鍙戦�佷汉
+        info.setCreateUser(user.getName());
+        info.setMessageType("6");
+        info.setTheme("CNAS鍩硅璁″垝瀹℃牳閫氱煡");
+        info.setContent("鎮ㄦ湁涓�鏉″煿璁鍒掑緟鎵瑰噯");
+        info.setSenderId(userId);
+        // 鎺ユ敹浜�
+        info.setConsigneeId(training.getApproverId());
+        info.setJumpPath("a6-personnel");
+        informationNotificationService.addInformationNotification(info);
+
+        // 鍙戦�佷紒涓氬井淇¢�氱煡
+        threadPoolTaskExecutor.execute(() -> {
+            // 鏌ヨ鎺ユ敹浜�
+            User personnel = userMapper.selectById(training.getApproverId());
+
+            String message = "";
+            message += "CNAS鍩硅璁″垝鎵瑰噯閫氱煡";
+            message += "\n璇峰幓璧勬簮绠$悊-浜哄憳-鍩硅璁″垝濉啓";
+            message += "\n" + old.getFileName() + "鐨勫煿璁鍒掑緟鎵瑰噯";
+            //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+            try {
+                WxCpUtils.inform(personnel.getAccount(), message, null);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        });
+
+        baseMapper.updateById(personTraining);
+    }
+
+    @Override
+    public void approveAnnualPersonnelTraining(PersonTraining training) {
+        LambdaUpdateWrapper<PersonTraining> wrapper = Wrappers.<PersonTraining>lambdaUpdate()
+                .eq(PersonTraining::getId, training.getId())
+                .set(PersonTraining::getApprovalDate, LocalDateTime.now())
+                .set(PersonTraining::getApprovalRemarks, training.getApprovalRemarks())
+                .set(PersonTraining::getApprovalStatus, training.getApprovalStatus());
+        baseMapper.update(new PersonTraining(), wrapper);
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅璁″垝
+     * @param id
+     * @param response
+     */
+    @Override
+    public void exportPersonTraining(Integer id, HttpServletResponse response) {
+
+        // 鏌ヨ璇︽儏
+        PersonTraining personTraining = baseMapper.selectById(id);
+
+        //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+        String writeUrl = userMapper.selectById(personTraining.getCompilerId()).getSignatureUrl();
+        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+
+        //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃
+        String examineUrl = null;
+        if (personTraining.getReviewerId() != null) {
+            examineUrl = userMapper.selectById(personTraining.getReviewerId()).getSignatureUrl();
+            if (StringUtils.isBlank(examineUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+        String ratifyUrl = null;
+        if (personTraining.getApproverId() != null) {
+            ratifyUrl = userMapper.selectById(personTraining.getApproverId()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        // 鏌ヨ璇︽儏
+        List<PersonTrainingDetailedDto> detailedDtos = personTrainingDetailedMapper.selectTrainingList(id);
+
+        int index = 1;
+        for (PersonTrainingDetailedDto detailedDto : detailedDtos) {
+            detailedDto.setTrainingDateString(detailedDto.getTrainingDate());
+            detailedDto.setIndex(index);
+            index++;
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/person-training.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("year", personTraining.getPlanYear());
+                    put("trainingDetailedList", detailedDtos);
+                    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", personTraining.getCompilationDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getCompilationDate())).create() : null);
+                    put("examineDateUrl", personTraining.getAuditDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getAuditDate())).create() : null);
+                    put("ratifyDateUrl", personTraining.getApprovalDate() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getApprovalDate())).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 id
+     * @param response
+     */
+    @Override
+    public void exportPersonTrainingRecord(Integer id, HttpServletResponse response) {
+        // 鏌ヨ浜哄憳鍩硅鏄庣粏
+        PersonTrainingDetailedDto detailedDto = personTrainingDetailedMapper.selectTrainingDetail(id);
+
+        // 鏌ヨ鍩硅鐨勪汉鍛�
+        List<PersonTrainingRecordDto> recordDtos = personTrainingRecordMapper.selectListByTrainingDetailedId(id);
+
+        List<TrainingRecordExportDto> exportDtoList = new ArrayList<>();
+        TrainingRecordExportDto exportDto = new TrainingRecordExportDto();
+
+        int count = 0;
+        for (PersonTrainingRecordDto recordDto : recordDtos) {
+            switch (count) {
+                case 0:
+                    exportDto.setUserName1(recordDto.getUserName());
+                    exportDto.setDepartment1(recordDto.getDepartment());
+                    exportDto.setExaminationResults1(recordDto.getExaminationResults());
+                    count ++;
+                    break;
+                case 1:
+                    exportDto.setUserName2(recordDto.getUserName());
+                    exportDto.setDepartment2(recordDto.getDepartment());
+                    exportDto.setExaminationResults2(recordDto.getExaminationResults());
+                    exportDtoList.add(exportDto);
+                    exportDto = new TrainingRecordExportDto();
+                    count = 0;
+                    break;
+            }
+        }
+        exportDtoList.add(exportDto);
+
+        // 璐ㄩ噺璐熻矗浜�
+        String assessmentUserUrl = null;
+        if (detailedDto.getAssessmentUserId() != null) {
+            assessmentUserUrl = userMapper.selectById(detailedDto.getAssessmentUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(assessmentUserUrl)) {
+                throw new ErrorException("鎵句笉鍒拌瘎浠蜂汉鐨勭鍚�");
+            }
+        }
+
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/person-training-record.docx");
+        Configure configure = Configure.builder()
+                .bind("trainingRecordsList", new HackLoopTableRenderPolicy())
+                .build();
+        String finalAssessmentUserUrl = assessmentUserUrl;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("trainingDetail", detailedDto);
+                    put("trainingRecordsList", exportDtoList);
+                    put("assessmentUserUrl", StringUtils.isNotBlank(finalAssessmentUserUrl) ? Pictures.ofLocal(imgUrl + "/" + finalAssessmentUserUrl).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 trainingDetailedId
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file) {
+        if (trainingDetailedId == null) {
+            throw new ErrorException("缂哄皯楠屾敹id");
+        }
+
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        PersonTrainingDetailedFile detailedFile = new PersonTrainingDetailedFile();
+        detailedFile.setTrainingDetailedId(trainingDetailedId);
+        detailedFile.setFileName(filename);
+        if (contentType != null && contentType.startsWith("image/")) {
+            // 鏄浘鐗�
+            path = imgUrl;
+            detailedFile.setType(1);
+        } else {
+            // 鏄枃浠�
+            path = wordUrl;
+            detailedFile.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));
+            detailedFile.setFileUrl(pathName);
+            personTrainingDetailedFileMapper.insert(detailedFile);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("闄勪欢涓婁紶閿欒");
+            return false;
+        }
+    }
+
+    /**
+     * 鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅
+     * @return
+     */
+    @Override
+    public List<PersonTrainingDetailed> getThisYearTrainingDetailed() {
+        return personTrainingDetailedMapper.getThisYearTrainingDetailed();
+    }
+}
diff --git a/cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml
new file mode 100644
index 0000000..206013d
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml
@@ -0,0 +1,65 @@
+<?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.personnel.mapper.PersonBasicInfoMapper">
+
+    <select id="selectLimsUser" resultType="com.ruoyi.common.core.domain.entity.DepartmentDto">
+        SELECT u.id userId, u.name, SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1) AS fatherId
+        FROM user u
+        where u.is_custom = 0
+          and u.depart_lims_id is not null
+          and u.depart_lims_id != ''
+    </select>
+
+    <select id="getCNASPersonnelInfo" resultType="com.ruoyi.personnel.dto.PersonBasicInfoDto">
+        SELECT *
+        FROM user u
+                 left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+        where u.id = #{userId}
+    </select>
+
+    <select id="selectPersonBasecInfoAndUser" resultType="java.util.Map">
+        select
+            u.id  userId,
+            u.`name`  name,
+            u.account account,
+            DATE_FORMAT(cpbi.group_time, '%Y-%m-%d') groupTime,
+            cpbi.native_place nativePlace,
+            cpbi.identity_card identityCard,
+            cpbi.id_address idAddress,
+            u.phone telephone,
+            cpbi.graduated_institutions1 graduatedInstitutions1,
+            cpbi.major1 major1,
+            DATE_FORMAT(cpbi.graduation_time1, '%Y-%m-%d')  graduationTime1,
+            cpbi.official_academic_redentials officialAcademicRedentials,
+            cpbi.highest_degree highestDegree,
+            cpbi.professional_title professionalTitle
+        from user u
+                 left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+                 left join user u1 on u1.id = u.create_user
+        <where>
+            FIND_IN_SET(#{departmentId},u.depart_lims_id)
+            <if test="name != null and name != ''">
+                and u.name like concat('%',#{name},'%')
+            </if>
+        </where>
+    </select>
+
+    <!-- 瀵煎嚭鏌ヨ浜哄憳淇℃伅 -->
+    <select id="selectexportPersonBasic" resultType="java.util.Map">
+        select DATE_FORMAT(cpbi.last_update_time, '%Y骞�%m鏈�%d鏃�') lastUpdateTimeString,
+               u.account,
+               u.`name`,
+               cpbi.sex,
+               cpbi.post_name postName,
+               u.age,
+               DATE_FORMAT(cpbi.working_time, '%Y骞�%m鏈�')   workingTimeString,
+               cpbi.major1,
+               DATE_FORMAT(cpbi.graduation_time1, '%Y骞�%m鏈�')   graduationTime1string,
+               cpbi.official_academic_redentials officialAcademicRedentials,
+               cpbi.graduated_institutions1 graduatedInstitutions1,
+               cpbi.remarks
+        from user u
+                 left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+        where u.id = #{userId}
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml
new file mode 100644
index 0000000..2ea0c72
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.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.ruoyi.personnel.mapper.PersonCommunicationAbilityMapper">
+
+
+    <select id="personPersonCommunicationAbilityPage" resultType="com.ruoyi.personnel.dto.PersonCommunicationAbilityDto">
+        select cpca.*, us.name create_user_name
+        from cnas_person_communication_ability cpca
+        left join user us on cpca.create_user = us.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and FIND_IN_SET(#{userId},cpca.user_id)
+            </if>
+            <if test="departLimsId != null and departLimsId != ''">
+                and FIND_IN_SET(#{departLimsId},us.depart_lims_id)
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml
new file mode 100644
index 0000000..ace613b
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml
@@ -0,0 +1,24 @@
+<?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.personnel.mapper.PersonJobResponsibilitiesMapper">
+
+
+    <select id="personJobResponsibilitiesSelect" resultType="com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto">
+        select cpt.*, u.name incumbent_name, su.name supervisor_name, dl.name depart_lims_name, u.account
+        from cnas_person_job_responsibilities cpt
+        left join user u on cpt.incumbent_id = u.id
+        left join user su on cpt.supervisor_id = su.id
+        left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1)
+        <where>
+            <if test="userId != null and userId != ''">
+                and cpt.incumbent_id = #{userId}
+            </if>
+            <if test="departmentId != null and departmentId != ''">
+                and FIND_IN_SET(#{departmentId}, u.depart_lims_id)
+            </if>
+            <if test="userName != null and userName != ''">
+                and u.name like concat('%', #{userName}, '%')
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml
new file mode 100644
index 0000000..96e0358
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml
@@ -0,0 +1,118 @@
+<?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.personnel.mapper.PersonPersonnelCapacityMapper">
+
+    <select id="personPersonnelCapacityPage" resultType="com.ruoyi.personnel.dto.PersonPersonnelCapacityDto">
+        select cppc.*,
+        u2.name confirm_operating_personnel_name,
+        u3.name user_name,
+        cpbi.post_name,
+        ecp.responsibilities,
+        cpbi.professional_title,
+        TRIM(',' FROM CONCAT(cpbi.major1, ',', cpbi.major2)) AS major
+        from cnas_person_personnel_capacity cppc
+        left join user u2 on cppc.confirm_operating_personnel_id = u2.id
+        left join user u3 on cppc.user_id = u3.id
+        -- 鍙栧矖浣�
+        left join cnas_person_basic_info cpbi on cpbi.user_id = cppc.user_id
+        -- 鍙栦汉鍛樿兘鍔涚殑宀椾綅鑱岃矗
+        left join (SELECT GROUP_CONCAT(e.label) responsibilities, cppc.id
+        from cnas_person_personnel_capacity cppc
+        left join enums e on FIND_IN_SET(e.value, cppc.job_responsibilities)
+        where e.category = '宀椾綅鑱岃矗'
+        GROUP BY cppc.id) ecp on ecp.id = cppc.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cppc.user_id = #{userId}
+            </if>
+            <if test="departLimsId != null and departLimsId != ''">
+                and FIND_IN_SET(#{departLimsId}, u3.depart_lims_id)
+            </if>
+            <if test="userName != null and userName != ''">
+                and u3.name like concat('%', #{userName}, '%')
+            </if>
+        </where>
+    </select>
+
+    <!-- 鏌ヨ浜哄憳鑳藉姏鎺ュ彛 -->
+    <select id="selectExportPersonnelCapacity"
+            resultType="com.ruoyi.personnel.dto.PersonPersonnelCapacityExportDto">
+        select cppc.*,
+               cpbi.post_name,
+               u1.name   userName,
+               cpbi.official_academic_redentials,
+               cpbi.major1,
+               cpbi.professional_title,
+               p.place_work,
+               TRIM(',' FROM CONCAT(cpbi.major1, ',', cpbi.major2)) AS major,
+               case when cppc.academic_conform_not = 1 then '鈽�'
+                    else '鈻�' end academicConformNot1,-- 瀛﹀巻
+               case when cppc.academic_conform_not = 2 then '鈽�'
+                    else '鈻�' end academicConformNot2,
+               case when cppc.academic_conform_not = 3 then '鈽�'
+                    else '鈻�' end academicConformNot3,
+               case when cppc.related_years_conform_not = 1 then '鈽�'
+                    else '鈻�' end relatedYearsConformNot1,-- 鐩稿叧骞撮檺
+               case when cppc.related_years_conform_not = 2 then '鈽�'
+                    else '鈻�' end relatedYearsConformNot2,
+               case when cppc.related_years_conform_not = 3 then '鈽�'
+                    else '鈻�' end relatedYearsConformNot3,
+               case when cppc.related_training_conform_not = 1 then '鈽�'
+                    else '鈻�' end relatedTrainingConformNot1,-- 鐩稿叧鍩硅
+               case when cppc.related_training_conform_not = 2 then '鈽�'
+                    else '鈻�' end relatedTrainingConformNot2,
+               case when cppc.related_training_conform_not = 3 then '鈽�'
+                    else '鈻�' end relatedTrainingConformNot3,
+               case when cppc.relevant_experience_conform_not = 1 then '鈽�'
+                    else '鈻�' end relevantExperienceConformNot1,-- 鐩稿叧缁忛獙
+               case when cppc.relevant_experience_conform_not = 2 then '鈽�'
+                    else '鈻�' end relevantExperienceConformNot2,
+               case when cppc.relevant_experience_conform_not = 3 then '鈽�'
+                    else '鈻�' end relevantExperienceConformNot3,
+               case when cppc.work_license_conform_not = 1 then '鈽�'
+                    else '鈻�' end workLicenseConformNot1,-- 涓婂矖璇�
+               case when cppc.work_license_conform_not = 2 then '鈽�'
+                    else '鈻�' end workLicenseConformNot2,
+               case when cppc.work_license_conform_not = 3 then '鈽�'
+                    else '鈻�' end workLicenseConformNot3,
+               case when cppc.job_responsibilities_conform_not = 1 then '鈽�'
+                    else '鈻�' end jobResponsibilitiesConformNot1,-- 宀椾綅鑱岃矗
+               case when cppc.job_responsibilities_conform_not = 2 then '鈽�'
+                    else '鈻�' end jobResponsibilitiesConformNot2,
+               case when cppc.job_responsibilities_conform_not = 3 then '鈽�'
+                    else '鈻�' end jobResponsibilitiesConformNot3,
+               case when cppc.comprehensive_assessment = 'Qualified this position' then '鈽�'
+                    else '鈻�' end comprehensiveAssessment1,-- 缁煎悎璇勪环
+               case when cppc.comprehensive_assessment = 'You can work while training' then '鈽�'
+                    else '鈻�' end comprehensiveAssessment2,
+               case when cppc.comprehensive_assessment = 'Iconpetent for the position' then '鈽�'
+                    else '鈻�' end comprehensiveAssessment3,
+               case when find_in_set(1, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities1,
+               case when find_in_set(2, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities2,
+               case when find_in_set(3, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities3,
+               case when find_in_set(4, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities4,
+               case when find_in_set(5, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities5,
+               case when find_in_set(6, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities6,
+               case when find_in_set(7, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities7,
+               case when find_in_set(8, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities8,
+               case when find_in_set(9, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities9,
+               case when find_in_set(10, cppc.job_responsibilities) then '鈽�'
+                    else '鈻�' end jobResponsibilities10
+        from cnas_person_personnel_capacity cppc
+                 left join user u1 on cppc.user_id = u1.id
+                 left join cnas_person_basic_info cpbi on cpbi.user_id = cppc.user_id
+                 left join (select GROUP_CONCAT(cptr.work_experience) place_work, cptr.user_id
+                            from cnas_person_basic_info_work cptr
+                            GROUP BY cptr.user_id) p on u1.id = p.user_id
+        where cppc.id = #{id}
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml
new file mode 100644
index 0000000..bb3ef16
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.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.ruoyi.personnel.mapper.PersonPostAuthorizationRecordMapper">
+
+
+    <select id="personPostAuthorizationRecordPage" resultType="com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto">
+        select cppar.*, us.name create_user_name, u.account account, u.name user_name
+        from cnas_person_post_authorization_record cppar
+        left join user u on cppar.user_id = u.id
+        left join user us on cppar.create_user = us.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cppar.user_id = #{userId}
+            </if>
+            <if test="departLimsId != null and departLimsId != ''">
+                and FIND_IN_SET(#{departLimsId},u.depart_lims_id)
+            </if>
+            <if test="userName != null and userName != ''">
+                and u.name like concat('%', #{userName}, '%')
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml
new file mode 100644
index 0000000..d92a163
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml
@@ -0,0 +1,47 @@
+<?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.personnel.mapper.PersonRewardPunishmentRecordMapper">
+
+
+    <select id="rewardPunishmentPage" resultType="com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto">
+        select cprpr.*, us.name create_user_name, u.account account, u.name user_name
+        from cnas_person_reward_punishment_record cprpr
+        left join user u on cprpr.user_id = u.id
+        left join user us on cprpr.create_user = us.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cprpr.user_id = #{userId}
+            </if>
+            <if test="userName != null and userName != ''">
+                and u.name like concat('%', #{userName}, '%')
+            </if>
+            <if test="startTime != null and endTime != null">
+                AND DATE(cprpr.reward_punish_time) BETWEEN #{startTime} AND #{endTime}
+            </if>
+            <if test="departmentId != null and departmentId != ''">
+                and FIND_IN_SET(#{departmentId}, u.depart_lims_id)
+            </if>
+        </where>
+    </select>
+
+    <select id="rewardPunishmentExport" resultType="com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel">
+        select cprpr.*, us.name create_user_name, u.account account, u.name user_name
+        from cnas_person_reward_punishment_record cprpr
+        left join user u on cprpr.user_id = u.id
+        left join user us on cprpr.create_user = us.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cprpr.user_id = #{userId}
+            </if>
+            <if test="departmentId != null and departmentId != ''">
+                and FIND_IN_SET(#{departmentId},u.depart_lims_id)
+            </if>
+            <if test="userName != null and userName != ''">
+                and u.name like concat('%', #{userName}, '%')
+            </if>
+            <if test="startTime != null and endTime != null">
+                AND DATE(cprpr.reward_punish_time) BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml
new file mode 100644
index 0000000..147b493
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml
@@ -0,0 +1,46 @@
+<?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.personnel.mapper.PersonTrainingMapper">
+
+    <!-- 鏍规嵁鍒涘缓浜虹殑閮ㄩ棬绛涢�夋暟鎹紝鍙槸鍒涘缓浜哄彲鑳芥湭鍒嗛厤閮ㄩ棬涔熼渶瑕佹煡鐪� -->
+    <select id="personTrainingSelect" resultType="com.ruoyi.personnel.dto.PersonTrainingDto">
+        SELECT
+        cpt.*,
+        u1.name compiler_name,
+        u2.name reviewer_name,
+        u3.name approver_name,
+        u4.name create_user_name
+        FROM
+        cnas_person_training cpt
+        LEFT JOIN user u1 ON cpt.compiler_id = u1.id
+        LEFT JOIN user u2 ON cpt.reviewer_id = u2.id
+        LEFT JOIN user u3 ON cpt.approver_id = u3.id
+        LEFT JOIN user u4 ON cpt.create_user = u4.id
+        <where>
+            <if test="departLimsId != null and departLimsId != ''">
+                and FIND_IN_SET(#{departLimsId}, u4.depart_lims_id)
+            </if>
+            <if test="compilerName != null and compilerName != ''">
+                and u4.name like concat('%', #{compilerName}, '%')
+            </if>
+        </where>
+        union
+        SELECT
+        cpt.*,
+        u1.name compiler_name,
+        u2.name reviewer_name,
+        u3.name approver_name,
+        u4.name create_user_name
+        FROM
+        cnas_person_training cpt
+        LEFT JOIN user u1 ON cpt.compiler_id = u1.id
+        LEFT JOIN user u2 ON cpt.reviewer_id = u2.id
+        LEFT JOIN user u3 ON cpt.approver_id = u3.id
+        LEFT JOIN user u4 ON cpt.create_user = u4.id
+        WHERE
+        u4.depart_lims_id is not null and length(u4.depart_lims_id) = 0
+        <if test="compilerName != null and compilerName != ''">
+            and u4.name like concat('%', #{compilerName}, '%')
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml
new file mode 100644
index 0000000..c57dd3d
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml
@@ -0,0 +1,126 @@
+<?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.personnel.mapper.PersonTrainingRecordMapper">
+
+    <select id="trainingAndAssessmentRecordsPage" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordDto">
+        select cptr.*, u.account, u.name user_name, u.phone, r.name role_name
+        from cnas_person_training_record cptr
+                 left join user u on u.id = cptr.user_id
+                 left join role r on r.id = u.role_id
+        where cptr.course_id = #{trainingDetailedId}
+        <if test="userName != null and userName != ''">
+            and u.name like concat('%', #{userName}, '%')
+        </if>
+    </select>
+
+    <select id="personnelTrainingPersonnel" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordListDto">
+        select u.name, u.account, dl.name depart_lims_name, cpbi.professional_title,
+        cpbi.official_academic_redentials, u.id user_id
+        from user u
+        left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+        left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1)
+        where u.is_custom = 0
+        <if test="userName != '' and userName != null and userName != 'null'">
+            and u.name like concat('%', #{userName}, '%')
+        </if>
+        <if test="userId != null and userId != ''">
+            and u.id = #{userId}
+        </if>
+        <if test="departLimsId != null and departLimsId != ''">
+            and FIND_IN_SET(#{departLimsId}, u.depart_lims_id)
+        </if>
+    </select>
+
+    <select id="queryPersonnelDetails" resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto">
+        select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks
+        from cnas_person_training_record cptr
+                 inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cptr.user_id = #{userId}
+            </if>
+        </where>
+    </select>
+
+    <!-- 鏍规嵁璇︽儏id鏌ヨ鍩硅淇℃伅 -->
+    <select id="selectListByTrainingDetailedId" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordDto">
+        select cptr.*,
+               u.name  userName,
+               dl.name department
+        from cnas_person_training_record cptr
+                 left join user u on u.id = cptr.user_id
+                 left join department_lims dl on find_in_set(dl.id, u.depart_lims_id) and dl.id != 1
+        where cptr.course_id = #{trainingDetailedId}
+    </select>
+
+    <!-- 鏍规嵁id鏌ヨ浜哄憳淇℃伅 -->
+    <select id="selectUserTraining" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordListDto">
+        select u.name,
+               u.account,
+               dl.name                                    depart_lims_name,
+               cpbi.professional_title,
+               cpbi.official_academic_redentials,
+               cpbi.unit_time,
+               cpbi.major1,
+               u.id                                       user_id,
+               DATE_FORMAT(cpbi.unit_time, '%Y-%m-%d') AS unitTimeSting
+        from user u
+                 left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+                 left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1)
+        where u.is_custom = 0
+        and u.id = #{userId}
+    </select>
+
+    <!-- 鏍规嵁鐢ㄦ埛id鏌ヨ浜哄憳璁板綍 -->
+    <select id="selectPersonDetailedDtos" resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto">
+        select cptd.training_date,
+               cptd.training_content,
+               cptd.class_hour,
+               cptr.examination_results,
+               cptd.remarks,
+               DATE_FORMAT(cptd.training_date, '%Y-%m-%d') AS trainingDateString
+        from cnas_person_training_record cptr
+                 inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
+            and cptr.user_id = #{userId}
+        <where>
+            <if test="year!= null and year!= ''">
+                and YEAR(cptd.training_date) = ${year}
+            </if>
+        </where>
+    </select>
+
+    <!--鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍-->
+    <select id="queryPersonnelDetailsOfUserIdAndYear"
+            resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto">
+        select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks
+        from cnas_person_training_record cptr
+        inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cptr.user_id = #{userId}
+            </if>
+            <if test="year!= null and year!= ''">
+                and YEAR(cptd.training_date) = ${year}
+            </if>
+        </where>
+    </select>
+
+    <!-- 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍瀵煎嚭 -->
+    <select id="selectPersonDetailedDtosByTrainingDate"
+            resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto">
+        select cptd.training_date,
+        cptd.training_content,
+        cptd.class_hour,
+        cptr.examination_results,
+        cptd.remarks,
+        DATE_FORMAT(cptd.training_date, '%Y-%m-%d') AS trainingDateString
+        from cnas_person_training_record cptr
+        inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
+        and cptr.user_id = #{userId}
+        <where>
+            <if test="year!= null and year!= ''">
+                and YEAR(cptd.training_date) = ${year}
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/static/communication-deal.docx b/cnas-personnel/src/main/resources/static/communication-deal.docx
new file mode 100644
index 0000000..9045072
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/communication-deal.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/credentials-deal.docx b/cnas-personnel/src/main/resources/static/credentials-deal.docx
new file mode 100644
index 0000000..2fda5fd
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/credentials-deal.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/explain-deal.docx b/cnas-personnel/src/main/resources/static/explain-deal.docx
new file mode 100644
index 0000000..7333bec
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/explain-deal.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/person-basic-info.docx b/cnas-personnel/src/main/resources/static/person-basic-info.docx
new file mode 100644
index 0000000..6d1739a
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/person-basic-info.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/person-training-record.docx b/cnas-personnel/src/main/resources/static/person-training-record.docx
new file mode 100644
index 0000000..3bbf0bc
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/person-training-record.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/person-training.docx b/cnas-personnel/src/main/resources/static/person-training.docx
new file mode 100644
index 0000000..0a6bf24
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/person-training.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/personnel-capacity.docx b/cnas-personnel/src/main/resources/static/personnel-capacity.docx
new file mode 100644
index 0000000..e7ad3b9
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/personnel-capacity.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/super-vise-plan.docx b/cnas-personnel/src/main/resources/static/super-vise-plan.docx
new file mode 100644
index 0000000..8e5a56f
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/super-vise-plan.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/supervision-control-sheet.docx b/cnas-personnel/src/main/resources/static/supervision-control-sheet.docx
new file mode 100644
index 0000000..dc398e3
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/supervision-control-sheet.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx b/cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx
new file mode 100644
index 0000000..16775b0
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/supervision-record.docx b/cnas-personnel/src/main/resources/static/supervision-record.docx
new file mode 100644
index 0000000..ede4555
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/supervision-record.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/training-record.docx b/cnas-personnel/src/main/resources/static/training-record.docx
new file mode 100644
index 0000000..1e6955d
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/training-record.docx
Binary files differ
diff --git a/cnas-process/pom.xml b/cnas-process/pom.xml
index 621b5fb..56bfde2 100644
--- a/cnas-process/pom.xml
+++ b/cnas-process/pom.xml
@@ -25,6 +25,10 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>inspect-server</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>cnas-device</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/InconsistentDistributionController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/InconsistentDistributionController.java
new file mode 100644
index 0000000..c561ddd
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/InconsistentDistributionController.java
@@ -0,0 +1,94 @@
+package com.ruoyi.process.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.process.dto.InconsistentDistributionDto;
+import com.ruoyi.process.pojo.InconsistentDistribution;
+import com.ruoyi.process.service.InconsistentDistributionService;
+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-15 09:53:20
+ */
+@Api(tags = "涓嶇鍚堥」鐨勫垎甯�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/inconsistentDistribution")
+public class InconsistentDistributionController {
+
+    private InconsistentDistributionService inconsistentDistributionService;
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冨垎椤垫煡璇�
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "涓嶇鍚堥」鐨勫垎甯冨垎椤垫煡璇�")
+    @GetMapping("/pageInconsistentDistribution")
+    public Result<IPage<InconsistentDistributionDto>> pageInconsistentDistribution(Page page, InconsistentDistribution inconsistentDistribution) throws Exception {
+        return Result.success(inconsistentDistributionService.pageInconsistentDistribution(page, inconsistentDistribution));
+    }
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冩柊澧�
+     * @return
+     */
+    @ApiOperation(value = "涓嶇鍚堥」鐨勫垎甯冩柊澧�")
+    @PostMapping("/addInconsistentDistribution")
+    public Result addInconsistentDistribution(@RequestBody InconsistentDistributionDto inconsistentDistribution){
+        return Result.success(inconsistentDistributionService.addInconsistentDistribution(inconsistentDistribution));
+    }
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冧慨鏀�
+     * @return
+     */
+    @ApiOperation(value = "涓嶇鍚堥」鐨勫垎甯冧慨鏀�")
+    @PostMapping("/updateInconsistentDistribution")
+    public Result updateInconsistentDistribution(@RequestBody InconsistentDistributionDto inconsistentDistribution){
+        return Result.success(inconsistentDistributionService.updateInconsistentDistribution(inconsistentDistribution));
+    }
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冨垹闄�
+     * @return
+     */
+    @ApiOperation(value = "涓嶇鍚堥」鐨勫垎甯冨垹闄�")
+    @DeleteMapping("/delInconsistentDistribution")
+    public Result delInconsistentDistribution(Integer distributionId){
+        return Result.success(inconsistentDistributionService.delInconsistentDistribution(distributionId));
+    }
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冩煡鐪嬭鎯�
+     * @return
+     */
+    @ApiOperation(value = "涓嶇鍚堥」鐨勫垎甯冩煡鐪嬭鎯�")
+    @GetMapping("/getInconsistentDistributionOne")
+    public Result<InconsistentDistributionDto> getInconsistentDistributionOne(Integer distributionId){
+        return Result.success(inconsistentDistributionService.getInconsistentDistributionOne(distributionId));
+    }
+
+    /**
+     * 瀵煎嚭涓嶇鍚堥」鐨勫垎甯�
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭涓嶇鍚堥」鐨勫垎甯�")
+    @GetMapping("/exportInconsistentDistribution")
+    public void exportInconsistentDistribution(Integer distributionId, HttpServletResponse response){
+        inconsistentDistributionService.exportInconsistentDistribution(distributionId, response);
+    }
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java
new file mode 100644
index 0000000..47bf3f2
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java
@@ -0,0 +1,128 @@
+package com.ruoyi.process.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.inspect.pojo.InsOrder;
+import com.ruoyi.process.dto.InspectionOrderDto;
+import com.ruoyi.process.pojo.InspectionOrder;
+import com.ruoyi.process.service.InspectionOrderService;
+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;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+@Api(tags = "妫�楠屽鎵樺崟")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/inspectionOrder")
+public class InspectionOrderController {
+
+    private InspectionOrderService inspectionOrderService;
+
+    /**
+     * 濮旀墭鍗曟楠屽垎椤垫煡璇�
+     * @return
+     */
+    @ApiOperation(value = "濮旀墭鍗曟楠屽垎椤垫煡璇�")
+    @GetMapping("/pageInspectionOrder")
+    public Result<IPage<InspectionOrderDto>> pageInspectionOrder(InspectionOrder inspectionOrder,Page page) throws Exception {
+        return Result.success(inspectionOrderService.pageInspectionOrder(page, inspectionOrder));
+    }
+
+    /**
+     * 濮旀墭鍗曟楠屾柊澧�
+     * @return
+     */
+
+    @ApiOperation(value = "濮旀墭鍗曟楠屾柊澧�")
+    @PostMapping("/addInspectionOrder")
+    public Result addInspectionOrder(@RequestBody InspectionOrderDto InspectionOrder){
+        return Result.success(inspectionOrderService.addInspectionOrder(InspectionOrder));
+    }
+
+    /**
+     * 濮旀墭鍗曟楠屼慨鏀�
+     * @return
+     */
+    @ApiOperation(value = "濮旀墭鍗曟楠屼慨鏀�")
+    @PostMapping("/updateInspectionOrder")
+    public Result updateInspectionOrder(@RequestBody InspectionOrderDto InspectionOrder){
+        return Result.success(inspectionOrderService.updateInspectionOrder(InspectionOrder));
+    }
+
+    /**
+     * 濮旀墭鍗曟楠屽垹闄�
+     * @return
+     */
+    @ApiOperation(value = "濮旀墭鍗曟楠屽垹闄�")
+    @DeleteMapping("/delInspectionOrder")
+    public Result delInspectionOrder(Integer inspectionOrderId){
+        return Result.success(inspectionOrderService.delInspectionOrder(inspectionOrderId));
+    }
+
+    /**
+     * 濮旀墭鍗曟楠屾煡鐪嬭鎯�
+     * @return
+     */
+    @ApiOperation(value = "濮旀墭鍗曟楠屾煡鐪嬭鎯�")
+    @GetMapping("/getInspectionOrderOne")
+    public Result<InspectionOrderDto> getInspectionOrderOne(Integer inspectionOrderId){
+        return Result.success(inspectionOrderService.getInspectionOrderOne(inspectionOrderId));
+    }
+
+    /**
+     * 濮旀墭鍗曟楠屾煡鐪嬭鎯�
+     * @return
+     */
+    @ApiOperation(value = "鏍规嵁鎴愬搧璁㈠崟鏌ヨ濮旀墭鍗曡鎯�")
+    @GetMapping("/getInspectionOrderByInsOderId")
+    public Result<InspectionOrderDto> getInspectionOrderByInsOderId(Integer insOrderId){
+        return Result.success(inspectionOrderService.getInspectionOrderByInsOderId(insOrderId));
+    }
+
+    /**
+     * 濮旀墭鍗曟煡璇㈡垚鍝佽鍗�
+     * @return
+     */
+    @ApiOperation(value = "濮旀墭鍗曟煡璇㈡垚鍝佽鍗�")
+    @PostMapping("/getInsOrderOnInspection")
+    public Result<IPage<InsOrder>> getInsOrderOnInspection(@RequestBody Map<String, Object> data) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        InsOrder insOrder = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), InsOrder.class);
+        return Result.success(inspectionOrderService.getInsOrderOnInspection(page, insOrder));
+    }
+
+    /**
+     * 濮旀墭鍗曟垚鍝佹姤鍛婁笂浼�
+     * @return
+     */
+    @ApiOperation(value = "濮旀墭鍗曟垚鍝佹姤鍛婁笂浼�")
+    @PostMapping("/uploadInspectionOrderFile")
+    public Result uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId) {
+        return Result.success(inspectionOrderService.uploadInspectionOrderFile(file, inspectionOrderId));
+    }
+
+    /**
+     * 瀵煎嚭妫�楠屽鎵樺崟
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭妫�楠屽鎵樺崟")
+    @GetMapping("/exportInspectionOrder")
+    public void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response){
+        inspectionOrderService.exportInspectionOrder(inspectionOrderId, response);
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessComplainController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessComplainController.java
new file mode 100644
index 0000000..5c060ec
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessComplainController.java
@@ -0,0 +1,68 @@
+package com.ruoyi.process.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.process.pojo.ProcessComplain;
+import com.ruoyi.process.service.ProcessComplainService;
+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;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鎶曡瘔 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 09:29:11
+ */
+@RestController
+@RequestMapping("/processComplain")
+@Api(tags = "鎶曡瘔")
+public class ProcessComplainController {
+
+    @Resource
+    private ProcessComplainService processComplainService;
+
+    @ApiOperation(value = "鎶曡瘔鎯呭喌姹囨�昏〃")
+    @GetMapping("/pageProcessComplain")
+    public Result pageProcessComplain( ProcessComplain processComplain,Page page) throws Exception {
+        return Result.success(processComplainService.pageProcessComplain(page, processComplain));
+    }
+
+    @ApiOperation(value = "鏂板鎶曡瘔")
+    @PostMapping("/addProcessComplain")
+    public Result addProcessComplain(@RequestBody ProcessComplain processComplain ) {
+        return Result.success(processComplainService.addProcessComplain(processComplain));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鎶曡瘔")
+    @DeleteMapping("/delProcessComplain")
+    public Result delProcessComplain(Long id) {
+        return Result.success(processComplainService.removeById(id));
+    }
+
+    @ApiOperation(value = "鎶曡瘔璇︽儏")
+    @PostMapping("/getProcessComplain")
+    public Result getProcessComplain(Long id) {
+        return Result.success(processComplainService.getProcessComplain(id));
+    }
+
+    @ApiOperation(value = "澶勭悊鎶曡瘔")
+    @PostMapping("/doProcessComplain")
+    public Result doProcessComplain(@RequestBody ProcessComplain processComplain) {
+        return Result.success(processComplainService.doProcessComplain(processComplain));
+    }
+
+    @ApiOperation(value = "瀵煎嚭鍒楄〃")
+    @PostMapping("/exportProcessComplain")
+    public void exportProcessComplain(@RequestBody Map<String, Object> data,HttpServletResponse response) throws Exception {
+        ProcessComplain processComplain = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), ProcessComplain.class);
+        processComplainService.exportProcessComplain(processComplain,response);
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessDealController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessDealController.java
new file mode 100644
index 0000000..a178f1b
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessDealController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.process.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.process.pojo.ProcessDeal;
+import com.ruoyi.process.service.ProcessDealService;
+import io.swagger.annotations.Api;
+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-02 02:50:19
+ */
+@RestController
+@RequestMapping("/processDeal")
+@Api(tags = "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+public class ProcessDealController {
+
+    @Resource
+    private ProcessDealService processDealService;
+
+    @ApiOperation(value = "鏌ヨ妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃鎯�")
+    @PostMapping("/pageProcessDeal")
+    public Result pageProcessDeal(ProcessDeal processDeal, Page page) throws Exception {
+        return Result.success(processDealService.pageProcessDeal(page, processDeal));
+    }
+
+    @ApiOperation(value = "鏂板妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+    @PostMapping("/addProcessDeal")
+    public Result addProcessDeal(@RequestBody ProcessDeal processDeal) {
+        return Result.success(processDealService.addProcessDeal(processDeal));
+    }
+
+    @ApiOperation(value = "鍒犻櫎妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+    @DeleteMapping("/delProcessDeal")
+    public Result delProcessDeal(Integer id) {
+        return Result.success(processDealService.delProcessDeal(id));
+    }
+
+    @ApiOperation(value = "淇敼妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+    @PostMapping("/doProcessDeal")
+    public Result doProcessDeal(@RequestBody ProcessDeal processDeal) {
+        return Result.success(processDealService.doProcessDeal(processDeal));
+    }
+
+    @ApiOperation(value = "鏌ョ湅妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+    @PostMapping("/getProcessDeal")
+    public Result getProcessDeal(Integer id) {
+        return Result.success(processDealService.getById(id));
+    }
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessEvaluateController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessEvaluateController.java
new file mode 100644
index 0000000..e00885d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessEvaluateController.java
@@ -0,0 +1,62 @@
+package com.ruoyi.process.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.process.pojo.ProcessEvaluate;
+import com.ruoyi.process.service.ProcessEvaluateService;
+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-02 01:10:43
+ */
+@RestController
+@RequestMapping("/processEvaluate")
+@Api(tags = "娴嬮噺涓嶇‘瀹氬害鐨勮瘎浠�")
+public class ProcessEvaluateController {
+
+    @Resource
+    private ProcessEvaluateService processEvaluateService;
+
+    @ApiOperation(value = "鏌ヨ娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹氬垪琛�")
+    @PostMapping("/pageProcessEvaluate")
+    public Result pageProcessEvaluate(ProcessEvaluate processEvaluate,Page page) throws Exception {
+        return Result.success(processEvaluateService.pageProcessEvaluate(page, processEvaluate));
+    }
+
+    @ApiOperation(value = "鏂板娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�")
+    @PostMapping("/addProcessEvaluate")
+    public Result addProcessEvaluate(MultipartFile file){
+        return Result.success(processEvaluateService.addProcessEvaluate(file));
+    }
+
+    @ApiOperation(value = "璇勪环")
+    @PostMapping("/doProcessEvaluate")
+    public Result doProcessEvaluate(@RequestBody ProcessEvaluate processEvaluate){
+        return Result.success(processEvaluateService.doProcessEvaluate(processEvaluate));
+    }
+
+    @ApiOperation(value = "鍒犻櫎娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�")
+    @DeleteMapping("/delProcessEvaluate")
+    public Result delProcessEvaluate(Long id){
+        return Result.success(processEvaluateService.removeById(id));
+    }
+
+    @ApiOperation(value = "瀵煎嚭娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�")
+    @GetMapping("/exportProcessEvaluate")
+    public void exportProcessEvaluate(ProcessEvaluate processEvaluate, HttpServletResponse response) throws Exception{
+        processEvaluateService.exportProcessEvaluate(processEvaluate,response);
+    }
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java
new file mode 100644
index 0000000..9539d5a
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java
@@ -0,0 +1,128 @@
+package com.ruoyi.process.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.process.dto.ProcessMethodSearchNewArchivedDto;
+import com.ruoyi.process.dto.ProcessMethodSearchNewBackupsDto;
+import com.ruoyi.process.pojo.ProcessMethodSearchNew;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
+import com.ruoyi.process.service.ProcessMethodSearchNewService;
+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;
+
+
+/**
+ * 鏍囧噯鏌ユ柊
+ *
+ * @author zhuo
+ * @since 2024-11-04
+ */
+@Api(tags = "鏍囧噯鏌ユ柊")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/processMethodSearchNew")
+public class ProcessMethodSearchNewController {
+
+    private ProcessMethodSearchNewService processMethodSearchNewService;
+
+    /**
+     * 鏂板鏍囧噯鏌ユ柊
+     * @param processMethodSearchNewList
+     * @return
+     */
+    @ApiOperation(value = "鏂板鏍囧噯鏌ユ柊")
+    @PostMapping("/addMethodSearchNew")
+    public Result addMethodSearchNew(@RequestBody List<ProcessMethodSearchNew> processMethodSearchNewList ) {
+        return Result.success(processMethodSearchNewService.addMethodSearchNew(processMethodSearchNewList));
+    }
+
+    /**
+     * 淇敼鏍囧噯鏌ユ柊
+     * @param processMethodSearchNew
+     * @return
+     */
+    @ApiOperation(value = "淇敼鏍囧噯鏌ユ柊")
+    @PostMapping("/updateMethodSearchNew")
+    public Result updateMethodSearchNew(@RequestBody ProcessMethodSearchNew processMethodSearchNew ) {
+        return Result.success(processMethodSearchNewService.updateById(processMethodSearchNew));
+    }
+
+    /**
+     * 鏍囧噯鏌ユ柊鍒楄〃
+     */
+    @ApiOperation(value = "鏍囧噯鏌ユ柊鍒楄〃")
+    @GetMapping("/pageMethodSearchNew")
+    public Result<IPage<ProcessMethodSearchNew>> pageMethodSearchNew(ProcessMethodSearchNewBackupsDto processMethodSearchNew,Page page) throws Exception {
+        return Result.success(processMethodSearchNewService.pageMethodSearchNew(page, processMethodSearchNew));
+    }
+
+    @ApiOperation(value = "鏍囧噯鏌ユ柊瀵煎嚭")
+    @GetMapping("/exportMethodSearchNew")
+    public void exportMethodSearchNew(Integer archivedId, HttpServletResponse response) throws Exception {
+        processMethodSearchNewService.exportMethodSearchNew(archivedId, response);
+    }
+
+    /**
+     * 瀵煎叆鏍囧噯鏌ユ柊
+     * @return
+     */
+    @ApiOperation(value = "瀵煎叆鏍囧噯鏌ユ柊")
+    @GetMapping("/importMethodSearchNew")
+    public Result importMethodSearchNew(MultipartFile file){
+        return Result.success(processMethodSearchNewService.importMethodSearchNew(file));
+    }
+
+    /**
+     * 鏂板瀛樻。
+     * @param archived
+     * @return
+     */
+    @ApiOperation(value = "鏂板瀛樻。")
+    @PostMapping("/addSearchNewArchived")
+    public Result addSearchNewApprovalProcess(@RequestBody ProcessMethodSearchNewArchived archived) {
+        return Result.success(processMethodSearchNewService.addSearchNewArchived(archived));
+    }
+
+    /**
+     * 鏂板瀛樻。
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ瀛樻。")
+    @GetMapping("/pageSearchNewArchived")
+    public Result<IPage<ProcessMethodSearchNewArchivedDto>> pageSearchNewArchived(ProcessMethodSearchNewArchivedDto archived,Page page) throws Exception {
+        return Result.success(processMethodSearchNewService.pageSearchNewArchived(page, archived));
+    }
+
+    /**
+     * 鏍囧噯鏌ユ柊鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ瀛樻。澶囦唤鍒楄〃")
+    @GetMapping("/pageSearchNewBackups")
+    public Result<IPage<ProcessMethodSearchNewBackups>> pageSearchNewBackups(ProcessMethodSearchNewBackups backups,Page page) throws Exception {
+        return Result.success(processMethodSearchNewService.pageSearchNewBackups(page, backups));
+    }
+
+
+    /**
+     * 瀛樻。鎵瑰噯
+     * @return
+     */
+    @ApiOperation(value = "瀛樻。鎵瑰噯")
+    @PostMapping("/ratifySearchNewArchivedr")
+    public Result ratifySearchNewArchivedr(@RequestBody ProcessMethodSearchNewArchived archived) {
+        return Result.success(processMethodSearchNewService.ratifySearchNewArchivedr(archived));
+    }
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodVerifyController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodVerifyController.java
new file mode 100644
index 0000000..4fa44bc
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodVerifyController.java
@@ -0,0 +1,156 @@
+package com.ruoyi.process.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.process.dto.ProcessMethodVerifyDto;
+import com.ruoyi.process.pojo.ProcessMethodVerify;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
+import com.ruoyi.process.service.ProcessMethodVerifyMethodFileService;
+import com.ruoyi.process.service.ProcessMethodVerifyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+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.util.List;
+import java.util.Map;
+
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@RestController
+@RequestMapping("/processMethodVerify")
+@Api(tags = "鏍囧噯鏂规硶楠岃瘉")
+@AllArgsConstructor
+public class ProcessMethodVerifyController {
+
+    @Resource
+    private ProcessMethodVerifyService processMethodVerifyService;
+
+    @Resource
+    private ProcessMethodVerifyMethodFileService processMethodVerifyMethodFileService;
+
+
+
+    /**
+     * 鏍囧噯鏌ユ柊鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鏍囧噯鏂规硶鏇存柊楠岃瘉鍒楄〃")
+    @PostMapping("/pagesMethodVerify")
+    public Result<IPage<ProcessMethodVerify>> pagesMethodVerify(ProcessMethodVerifyDto methodVerifyDto,Page page) throws Exception {
+        return Result.success(processMethodVerifyService.pagesMethodVerify(page, methodVerifyDto));
+    }
+
+    /**
+     * 鏂板鏍囧噯鏂规硶楠岃瘉
+     * @param methodVerifyDto
+     * @return
+     */
+    @ApiOperation(value = "鏂板鏍囧噯鏂规硶楠岃瘉")
+    @PostMapping("/addMethodVerify")
+    public Result addMethodVerify(@RequestBody ProcessMethodVerifyDto methodVerifyDto ) {
+        return Result.success(processMethodVerifyService.addMethodSearchNew(methodVerifyDto));
+    }
+
+    /**
+     * 鏌ヨ鏍囧噯鏂规硶楠岃瘉璇︽儏
+     * @param methodVerifyId
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鏍囧噯鏂规硶楠岃瘉璇︽儏")
+    @GetMapping("/getMethodVerifyOne")
+    public Result<ProcessMethodVerifyDto> getMethodVerifyOne(Integer methodVerifyId) {
+        return Result.success(processMethodVerifyService.getMethodVerifyOne(methodVerifyId));
+    }
+
+
+    /**
+     * 淇敼鏍囧噯鏂规硶楠岃瘉
+     * @param methodVerifyDto
+     * @return
+     */
+    @ApiOperation(value = "淇敼鏍囧噯鏂规硶楠岃瘉")
+    @PostMapping("/updateMethodVerify")
+    public Result updateMethodVerify(@RequestBody ProcessMethodVerifyDto methodVerifyDto ) {
+        return Result.success(processMethodVerifyService.updateMethodVerify(methodVerifyDto));
+    }
+
+    /**
+     * 鍒犻櫎鏍囧噯鏂规硶鏇存柊楠岃瘉
+     * @param methodVerifyId
+     * @return
+     */
+    @ApiOperation(value = "鍒犻櫎鏍囧噯鏂规硶鏇存柊楠岃瘉")
+    @DeleteMapping("/delMethodVerify")
+    public Result delMethodVerify(Integer methodVerifyId){
+        return Result.success(processMethodVerifyService.delMethodVerify(methodVerifyId));
+    }
+
+    /**
+     * 瀵煎嚭鏍囧噯鏂规硶鏇存柊楠岃瘉
+     * @param methodVerifyId 鏍囧噯鏂规硶楠岃瘉id
+     */
+    @ApiOperation(value = "瀵煎嚭鏍囧噯鏂规硶鏇存柊楠岃瘉")
+    @GetMapping("/exportMethodVerify")
+    public void exportMethodVerify(Integer methodVerifyId, HttpServletResponse response){
+        processMethodVerifyService.exportMethodVerify(methodVerifyId, response);
+    }
+
+    /**
+     * 楠岃瘉纭
+     * @param methodVerifyId
+     * @return
+     */
+    @ApiOperation(value = "楠岃瘉纭")
+    @GetMapping("/methodVerifyAffirm")
+    public Result methodVerifyAffirm(Integer methodVerifyId) {
+        return Result.success(processMethodVerifyService.methodVerifyAffirm(methodVerifyId));
+    }
+
+    /**
+     * 鏂规硶楠岃瘉鏂板鍘熷璁板綍
+     * @param methodVerifyId
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "鏂规硶楠岃瘉鏂板鍘熷璁板綍")
+    @PostMapping("/uploadVerifyMethodFile")
+    public Result<?> uploadVerifyMethodFile(Integer methodVerifyId, MultipartFile file) {
+        return Result.success(processMethodVerifyService.uploadVerifyMethodFile(methodVerifyId, file));
+    }
+
+
+    /**
+     * 鏍囧噯鏂规硶鏇存柊楠岃瘉鍘熷璁板綍鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鏍囧噯鏂规硶鏇存柊楠岃瘉鍘熷璁板綍鍒楄〃")
+    @GetMapping("/getVerifyMethodFileList")
+    public Result<List<ProcessMethodVerifyMethodFile>> getVerifyMethodFileList(Integer methodVerifyId){
+        return Result.success(processMethodVerifyService.getVerifyMethodFileList(methodVerifyId));
+    }
+
+    /**
+     * 鏍囧噯鏂规硶鍒犻櫎楠岃瘉鍘熷璁板綍鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鏍囧噯鏂规硶鍒犻櫎楠岃瘉鍘熷璁板綍鍒楄〃")
+    @GetMapping("/delVerifyMethodFileList")
+    public Result delVerifyMethodFileList(Integer methodFileId){
+        return Result.success(processMethodVerifyMethodFileService.removeById(methodFileId));
+    }
+
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessReportController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessReportController.java
new file mode 100644
index 0000000..a657183
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessReportController.java
@@ -0,0 +1,70 @@
+package com.ruoyi.process.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.process.dto.ProcessReportDto;
+import com.ruoyi.process.pojo.ProcessReport;
+import com.ruoyi.process.service.ProcessReportService;
+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.Map;
+
+/**
+ * <p>
+ * 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-05 08:58:39
+ */
+@RestController
+@RequestMapping("/processReport")
+@Api(tags = "妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃")
+public class ProcessReportController {
+
+    @Resource
+    private ProcessReportService processReportService;
+
+    @ApiOperation(value = "鏌ヨ妫�楠屾姤鍛婂彂鏀剧櫥璁板垪琛�")
+    @PostMapping("/pageProcessReport")
+    public Result pageProcessReport(ProcessReport processReport , Page page) throws Exception {
+        return Result.success(processReportService.pageProcessReport(page, processReport));
+    }
+
+    @ApiOperation(value = "鏂板妫�楠屾姤鍛婂彂鏀剧櫥璁�")
+    @PostMapping("/addProcessReport")
+    public Result  addProcessReport(@RequestBody ProcessReport processReport) {
+        return Result.success(processReportService.save(processReport));
+    }
+
+    @ApiOperation(value = "鍒犻櫎妫�楠屾姤鍛婂彂鏀剧櫥璁�")
+    @PostMapping("/delProcessReport")
+    public Result delProcessReport(Long id) {
+        return Result.success(processReportService.removeById(id));
+    }
+
+    @ApiOperation(value = "鏌ョ湅妫�楠屾姤鍛婂彂鏀剧櫥璁拌鎯�")
+    @PostMapping("/getProcessReport")
+    public Result getProcessReport(Long id)  {
+        return Result.success(processReportService.getById(id));
+    }
+
+    @ApiOperation(value = "淇敼妫�楠屾姤鍛婂彂鏀剧櫥璁�")
+    @PostMapping("/doProcessReport")
+    public Result doProcessReport(@RequestBody ProcessReport processReport) {
+        return Result.success(processReportService.updateById(processReport));
+    }
+
+    @ApiOperation(value = "瀵煎嚭妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃")
+    @PostMapping("/exportProcessReport")
+    public Result exportProcessReport(@RequestBody ProcessReportDto processReportDto) {
+        return Result.success(processReportService.exportProcessReport(processReportDto.getIds()));
+    }
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessSampleController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessSampleController.java
new file mode 100644
index 0000000..572b43d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessSampleController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.process.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.process.pojo.ProcessSample;
+import com.ruoyi.process.service.ProcessSampleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-12 05:02:49
+ */
+@RestController
+@RequestMapping("/processSample")
+@Api(tags = "鏍峰搧鎺ユ敹")
+public class ProcessSampleController {
+
+    @Resource
+    private ProcessSampleService processSampleService;
+
+    @ApiOperation(value = "鏌ヨ鏍峰搧鎺ユ敹璇︽儏")
+    @GetMapping("/pageProcessSample")
+    public Result pageProcessSample(ProcessSample processSample, Page page) throws Exception {
+        return Result.success(processSampleService.pageProcessSample(page, processSample));
+    }
+
+    @ApiOperation(value = "鏂板鏍峰搧鎺ユ敹璇︽儏")
+    @PostMapping("/addProcessSample")
+    public Result addProcessSample(@RequestBody ProcessSample processSample) {
+        return Result.success(processSampleService.addProcessSample(processSample));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏍峰搧鎺ユ敹")
+    @DeleteMapping("/delProcessSample")
+    public Result delProcessSample(Integer id) {
+        return Result.success(processSampleService.delProcessSample(id));
+    }
+
+    @ApiOperation(value = "淇敼鏍峰搧鎺ユ敹")
+    @PostMapping("/doProcessSample")
+    public Result doProcessSample(@RequestBody ProcessSample processSample) {
+        return Result.success(processSampleService.doProcessSample(processSample));
+    }
+
+    @ApiOperation(value = "鏌ョ湅鏍峰搧鎺ユ敹")
+    @GetMapping("/getProcessSample")
+    public Result getProcessSample(Integer id) {
+        return Result.success(processSampleService.getById(id));
+    }
+
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotalSampleController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotalSampleController.java
new file mode 100644
index 0000000..8af7003
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotalSampleController.java
@@ -0,0 +1,54 @@
+package com.ruoyi.process.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.process.pojo.ProcessTotalSample;
+import com.ruoyi.process.service.ProcessTotalSampleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹鎬昏〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-12 05:02:58
+ */
+@RestController
+@RequestMapping("/processTotalSample")
+@Api(tags = "鏍峰搧鎺ユ敹鎬昏〃")
+public class ProcessTotalSampleController {
+
+    @Resource
+    private ProcessTotalSampleService processTotalSampleService;
+
+    @ApiOperation(value = "鏌ヨ鏍峰搧鎺ユ敹鍒楄〃")
+    @GetMapping("/pageProcessTotalSample")
+    public Result pageProcessTotalSample(ProcessTotalSample processTotalSample,Page page) throws Exception {
+        return Result.success(processTotalSampleService.pageProcessTotalSample(page, processTotalSample));
+    }
+
+    @ApiOperation(value = "鎻愪氦鏍峰搧鎺ユ敹")
+    @PostMapping("/submitProcessTotalSample")
+    public Result submitProcessTotalSample(Integer id) {
+        return Result.success(processTotalSampleService.submitProcessTotalSample(id));
+    }
+
+    @ApiOperation(value = "瀹℃牳鏍峰搧鎺ユ敹")
+    @PostMapping("/checkProcessTotalSample")
+    public Result checkProcessTotalSample(Integer id, String state) {
+        return Result.success(processTotalSampleService.checkProcessTotalSample(id, state));
+    }
+
+    @ApiOperation(value = "鎵瑰噯鏍峰搧鎺ユ敹")
+    @PostMapping("/ratifyProcessTotalSample")
+    public Result ratifyProcessTotalSample(Integer id,String state) {
+        return Result.success(processTotalSampleService.ratifyProcessTotalSample(id,state));
+    }
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotaldealController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotaldealController.java
new file mode 100644
index 0000000..88826c0
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotaldealController.java
@@ -0,0 +1,55 @@
+package com.ruoyi.process.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.process.pojo.ProcessTotaldeal;
+import com.ruoyi.process.service.ProcessTotaldealService;
+import io.swagger.annotations.Api;
+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-02 03:59:09
+ */
+@RestController
+@RequestMapping("/processTotaldeal")
+@Api(tags = "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+public class ProcessTotaldealController {
+
+    @Resource
+    private ProcessTotaldealService processTotaldealService;
+
+    @ApiOperation(value = "鏌ヨ妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃垪琛�")
+    @GetMapping("/pageProcessTotaldeal")
+    public Result pageProcessTotaldeal(ProcessTotaldeal processTotaldeal , Page page) throws Exception {
+        return Result.success(processTotaldealService.pageProcessTotaldeal(page, processTotaldeal));
+    }
+
+    @ApiOperation(value = "鎻愪氦妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+    @PostMapping("/submitProcessTotaldeal")
+    public Result submitProcessTotaldeal(Integer id) {
+        return Result.success(processTotaldealService.submitProcessTotaldeal(id));
+    }
+
+    @ApiOperation(value = "瀹℃牳妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+    @PostMapping("/checkProcessTotaldeal")
+    public Result checkProcessTotaldeal(Integer id, String state) {
+        return Result.success(processTotaldealService.checkProcessTotaldeal(id, state));
+    }
+
+    @ApiOperation(value = "鎵瑰噯妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+    @PostMapping("/ratifyProcessTotaldeal")
+    public Result ratifyProcessTotaldeal(Integer id,String state) {
+        return Result.success(processTotaldealService.ratifyProcessTotaldeal(id,state));
+    }
+
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java
new file mode 100644
index 0000000..b47ab14
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java
@@ -0,0 +1,295 @@
+package com.ruoyi.process.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.framework.exception.ErrorException;
+import com.ruoyi.process.dto.QualityMonitorDto;
+import com.ruoyi.process.mapper.QualityMonitorDetailsEvaluateFileMapper;
+import com.ruoyi.process.pojo.*;
+import com.ruoyi.process.service.QualityMonitorDetailsService;
+import com.ruoyi.process.service.QualityMonitorService;
+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.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Api(tags = "璐ㄩ噺鐩戞帶璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/qualityMonitor")
+public class QualityMonitorController {
+
+    @Resource
+    private QualityMonitorService qualityMonitorService;
+
+    @Resource
+    private QualityMonitorDetailsService qualityMonitorDetailsService;
+
+    @Resource
+    private QualityMonitorDetailsEvaluateFileMapper qualityMonitorDetailsEvaluateFileMapper;
+
+    /**
+     * 瀵煎叆鐩戞帶璁″垝
+     * @return
+     */
+    @ApiOperation(value = "瀵煎叆鐩戞帶璁″垝")
+    @PostMapping("/importQualityMonitor")
+    public Result importQualityMonitor(MultipartFile file, QualityMonitor qualityMonitor) {
+        return Result.success(qualityMonitorService.importQualityMonitor(file, qualityMonitor));
+    }
+
+    /**
+     * 鐩戞帶璁″垝瀹℃牳
+     * @return
+     */
+    @ApiOperation(value = "鐩戞帶璁″垝瀹℃牳")
+    @PostMapping("/examineQualityMonitor")
+    public Result examineQualityMonitor(@RequestBody QualityMonitor qualityMonitor) {
+        return Result.success(qualityMonitorService.examineQualityMonitor(qualityMonitor));
+    }
+
+    /**
+     * 鐩戞帶璁″垝鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "鐩戞帶璁″垝鍒犻櫎")
+    @GetMapping("/delQualitySupervise")
+    public Result delQualitySupervise(Integer qualityMonitorId) {
+        return Result.success(qualityMonitorService.removeById(qualityMonitorId));
+    }
+
+    /**
+     * 鐩戞帶璁″垝鎵瑰噯
+     * @return
+     */
+    @ApiOperation(value = "鐩戞帶璁″垝鎵瑰噯")
+    @PostMapping("/ratifyQualityMonitor")
+    public Result ratifyQualityMonitor(@RequestBody QualityMonitor qualityMonitor) {
+        return Result.success(qualityMonitorService.ratifyQualityMonitor(qualityMonitor));
+    }
+
+
+    /**
+     * 鐩戞帶璁″垝鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鐩戞帶璁″垝鍒楄〃")
+    @GetMapping("/pageQualityMonitor")
+    public Result<IPage<QualityMonitorDto>> pageQualityMonitor(QualityMonitor qualityMonitor,Page page) throws Exception {
+        return Result.success(qualityMonitorService.pageQualityMonitor(page, qualityMonitor));
+    }
+
+    /**
+     * 鐩戞帶璁″垝璇︽儏鍒楄〃
+     * @param data
+     * @return
+     */
+    @ApiOperation(value = "鐩戞帶璁″垝璇︽儏鍒楄〃")
+    @GetMapping("/pageQualityMonitorDetail")
+    public Result<IPage<QualityMonitorDetails>> pageQualityMonitorDetail(QualityMonitorDetails qualityMonitorDetails,Page page) throws Exception {
+        return Result.success(qualityMonitorService.pageQualityMonitorDetail(page, qualityMonitorDetails));
+    }
+
+    /**
+     * 鏂板鐩戞帶璁″垝璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戞帶璁″垝璇︽儏")
+    @PostMapping("/addQualityMonitorDetail")
+    public Result addQualityMonitorDetail(@RequestBody QualityMonitorDetails qualityMonitorDetails) {
+        if (qualityMonitorDetails.getQualityMonitorId() == null) {
+            throw new ErrorException("缂哄皯鐩戞帶璁″垝涓昏〃id");
+        }
+        return Result.success(qualityMonitorDetailsService.save(qualityMonitorDetails));
+    }
+
+    /**
+     * 淇敼鐩戞帶璁″垝璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "淇敼鐩戞帶璁″垝璇︽儏")
+    @PostMapping("/updateQualityMonitorDetail")
+    public Result updateQualityMonitorDetail(@RequestBody QualityMonitorDetails qualityMonitorDetails) {
+        return Result.success(qualityMonitorDetailsService.updateById(qualityMonitorDetails));
+    }
+
+    /**
+     * 鍒犻櫎鐩戞帶璁″垝璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "鍒犻櫎鐩戞帶璁″垝璇︽儏")
+    @DeleteMapping("/delQualityMonitorDetail")
+    public Result delQualityMonitorDetail(Integer qualityMonitorDetailsId) {
+        return Result.success(qualityMonitorDetailsService.removeById(qualityMonitorDetailsId));
+    }
+
+    /**
+     * 瀵煎嚭鐩戞帶璁″垝
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鐩戞帶璁″垝")
+    @GetMapping("/exportQualityMonitorDetail")
+    public void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response) {
+        qualityMonitorService.exportQualityMonitorDetail(qualityMonitorId, response);
+    }
+
+
+    /************************************************************  瀹炴柦  *******************************************************************/
+
+    /**
+     * 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅")
+    @GetMapping("/getQualityMonitorRatify")
+    public Result<QualityMonitorDetailsRatify> getQualityMonitorRatify(Integer qualityMonitorDetailsId) {
+        return Result.success(qualityMonitorService.getQualityMonitorRatify(qualityMonitorDetailsId));
+    }
+
+    /**
+     * 鏂板鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅")
+    @PostMapping("/addQualityMonitorRatify")
+    public Result addQualityMonitorRatify(@RequestBody QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
+        return Result.success(qualityMonitorService.addQualityMonitorRatify(qualityMonitorDetailsRatify));
+    }
+
+    /**
+     * 鐩戞帶璁″垝璇︽儏鎻愪氦鎵瑰噯鎰忚
+     * @return
+     */
+    @ApiOperation(value = "鐩戞帶璁″垝璇︽儏鎻愪氦鎵瑰噯鎰忚")
+    @PostMapping("/addQualityMonitorRatifyOpinion")
+    public Result addQualityMonitorRatifyOpinion(@RequestBody QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
+        return Result.success(qualityMonitorService.addQualityMonitorRatifyOpinion(qualityMonitorDetailsRatify));
+    }
+
+    /**
+     * 瀵煎嚭鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+     * @param qualityMonitorDetailsId 鐩戞帶璁″垝璇︽儏瀹炴柦id
+     */
+    @ApiOperation(value = "瀵煎嚭鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅")
+    @GetMapping("/exportQualityMonitorRatify")
+    public void exportQualityMonitorRatify(Integer qualityMonitorDetailsId, HttpServletResponse response){
+        qualityMonitorService.exportQualityMonitorRatify(qualityMonitorDetailsId, response);
+    }
+
+    /************************************************************  璇勪环  *******************************************************************/
+
+    /**
+     * 鏌ヨ鐩戞帶璇勪环
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戞帶璇勪环")
+    @GetMapping("/getQualityMonitorEvaluate")
+    public Result<QualityMonitorDetailsEvaluate> getQualityMonitorEvaluate(Integer qualityMonitorDetailsId) {
+        return Result.success(qualityMonitorService.getQualityMonitorEvaluate(qualityMonitorDetailsId));
+    }
+
+    /**
+     * 鏂板鐩戞帶璇勪环
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戞帶璇勪环")
+    @PostMapping("/addQualityMonitorEvaluate")
+    public Result addQualityMonitorEvaluate(@RequestBody QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
+        return Result.success(qualityMonitorService.addQualityMonitorEvaluate(qualityMonitorDetailsEvaluate));
+    }
+
+    /**
+     * 瀵煎嚭鐩戞帶璇勪环
+     * @param qualityMonitorDetailsId 鐩戞帶璇勪环id
+     */
+    @ApiOperation(value = "瀵煎嚭鐩戞帶璇勪环")
+    @GetMapping("/exportQualityMonitorEvaluate")
+    public void exportQualityMonitorEvaluate(Integer qualityMonitorDetailsId, HttpServletResponse response){
+        qualityMonitorService.exportQualityMonitorEvaluate(qualityMonitorDetailsId, response);
+    }
+
+    /**
+     * 鐩戞帶璇勪环鎵瑰噯鎰忚
+     * @return
+     */
+    @ApiOperation(value = "鐩戞帶璇勪环鎵瑰噯鎰忚")
+    @PostMapping("/addMonitorEvaluateOpinion")
+    public Result addMonitorEvaluateOpinion(@RequestBody QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
+        return Result.success(qualityMonitorService.addMonitorEvaluateOpinion(qualityMonitorDetailsEvaluate));
+    }
+
+
+    /**
+     * 鏂板鐩戞帶璇勪环闄勪欢琛�
+     * @param detailsEvaluateId
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戞帶璇勪环闄勪欢琛�")
+    @PostMapping("/uploadEvaluateFile")
+    public Result<?> uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file) {
+        return Result.success(qualityMonitorService.uploadEvaluateFile(detailsEvaluateId, file));
+    }
+
+
+    /**
+     * 鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃")
+    @GetMapping("/getEvaluateFileList")
+    public Result<List<QualityMonitorDetailsEvaluateFile>> getEvaluateFileList(Integer detailsEvaluateId) {
+        return Result.success(qualityMonitorService.getEvaluateFileList(detailsEvaluateId));
+    }
+
+    /**
+     * 鍒犻櫎鐩戞帶璇勪环闄勪欢琛�
+     * @return
+     */
+    @ApiOperation(value = "鍒犻櫎鐩戞帶璇勪环闄勪欢琛�")
+    @GetMapping("/delVerifyEvaluateFileList")
+    public Result delVerifyMethodFileList(Integer evaluateFileId) {
+        return Result.success(qualityMonitorDetailsEvaluateFileMapper.deleteById(evaluateFileId));
+    }
+
+    /******************************************************** 瀹屾垚鎶ュ憡 ***************************************************************/
+
+    /**
+     * 涓婁紶鐩戞帶瀹屾垚鎶ュ憡
+     * @param file
+     * @param qualityMonitorDetailsId
+     * @return
+     */
+    @ApiOperation(value = "涓婁紶鐩戞帶瀹屾垚鎶ュ憡")
+    @PostMapping("/uploadFinishReport")
+    public Result uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId) {
+        return Result.success(qualityMonitorService.uploadFinishReport(file, qualityMonitorDetailsId));
+    }
+
+
+    /**
+     * 鐩戞帶璁″垝鎵瑰噯
+     * @return
+     */
+    @ApiOperation(value = "鎵瑰噯瀹屾垚鎶ュ憡")
+    @PostMapping("/ratifyFinishReport")
+    public Result ratifyFinishReport(@RequestBody QualityMonitorDetails qualityMonitorDetails) {
+        return Result.success(qualityMonitorService.ratifyFinishReport(qualityMonitorDetails));
+    }
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseController.java
new file mode 100644
index 0000000..b2da7ec
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseController.java
@@ -0,0 +1,353 @@
+package com.ruoyi.process.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.framework.exception.ErrorException;
+import com.ruoyi.process.dto.QualitySuperviseDetailsDto;
+import com.ruoyi.process.mapper.QualitySuperviseDetailsCorrectMapper;
+import com.ruoyi.process.pojo.*;
+import com.ruoyi.process.service.QualitySuperviseDetailsService;
+import com.ruoyi.process.service.QualitySuperviseService;
+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.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 璐ㄩ噺鐩戠潱涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Api(tags = "璐ㄩ噺鐩戠潱璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/qualitySupervise")
+public class QualitySuperviseController {
+
+    @Resource
+    private QualitySuperviseService qualitySuperviseService;
+    @Resource
+    private QualitySuperviseDetailsService qualitySuperviseDetailsService;
+    @Resource
+    private QualitySuperviseDetailsCorrectMapper qualitySuperviseDetailsCorrectMapper;
+
+    /**
+     * 瀵煎叆鐩戠潱璁″垝
+     * @return
+     */
+    @ApiOperation(value = "瀵煎叆鐩戠潱璁″垝")
+    @PostMapping("/importQualitySupervise")
+    public Result importQualitySupervise(MultipartFile file, QualitySupervise qualitySupervise){
+        return Result.success(qualitySuperviseService.importQualitySupervise(file, qualitySupervise));
+    }
+
+    /**
+     * 鐩戠潱璁″垝鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鐩戠潱璁″垝鍒楄〃")
+    @GetMapping("/pageQualitySupervise")
+    public Result<IPage<QualitySupervise>> pageQualitySupervise(QualitySupervise qualitySupervise ,Page page) throws Exception {
+        return Result.success(qualitySuperviseService.pageQualitySupervise(page, qualitySupervise));
+    }
+
+    /**
+     * 鐩戠潱璁″垝鎵瑰噯
+     * @return
+     */
+    @ApiOperation(value = "鐩戠潱璁″垝鎵瑰噯")
+    @PostMapping("/ratifyQualitySupervise")
+    public Result ratifyQualitySupervise(@RequestBody QualitySupervise qualitySupervise){
+        return Result.success(qualitySuperviseService.ratifyQualitySupervise(qualitySupervise));
+    }
+
+    /**
+     * 鐩戠潱璁″垝鍒犻櫎
+     * @return
+     */
+    @ApiOperation(value = "鐩戠潱璁″垝鍒犻櫎")
+    @DeleteMapping("/delQualitySupervise")
+    public Result delQualitySupervise(Integer superviseId){
+        return Result.success(qualitySuperviseService.removeById(superviseId));
+    }
+
+    /**
+     * 鐩戠潱璁″垝璇︽儏鍒楄〃
+     * @param data
+     * @return
+     */
+    @ApiOperation(value = "鐩戠潱璁″垝璇︽儏鍒楄〃")
+    @PostMapping("/pageQualitySuperviseDetail")
+    public Result<IPage<QualitySuperviseDetailsDto>> pageQualitySuperviseDetail(QualitySuperviseDetailsDto qualitySuperviseDetails,Page page) throws Exception {
+        return Result.success(qualitySuperviseService.pageQualitySuperviseDetail(page, qualitySuperviseDetails));
+    }
+
+    /**
+     * 鏂板鐩戠潱璁″垝璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戠潱璁″垝璇︽儏")
+    @PostMapping("/addQualitySuperviseDetail")
+    public Result addQualitySuperviseDetail(@RequestBody QualitySuperviseDetails qualitySuperviseDetails){
+        if (qualitySuperviseDetails.getSuperviseId() == null) {
+            throw new ErrorException("缂哄皯鐩戠潱璁″垝涓昏〃id");
+        }
+        return Result.success(qualitySuperviseDetailsService.save(qualitySuperviseDetails));
+    }
+
+    /**
+     * 淇敼鐩戠潱璁″垝璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "淇敼鐩戠潱璁″垝璇︽儏")
+    @PostMapping("/updateQualitySuperviseDetail")
+    public Result updateQualitySuperviseDetail(@RequestBody QualitySuperviseDetails qualitySuperviseDetails){
+        return Result.success(qualitySuperviseDetailsService.updateById(qualitySuperviseDetails));
+    }
+
+    /**
+     * 鍒犻櫎鐩戠潱璁″垝璇︽儏
+     * @return
+     */
+    @ApiOperation(value = "鍒犻櫎鐩戠潱璁″垝璇︽儏")
+    @GetMapping("/delQualitySuperviseDetail")
+    public Result delQualitySuperviseDetail(Integer superviseDetailsId){
+        return Result.success(qualitySuperviseDetailsService.removeById(superviseDetailsId));
+    }
+
+    /**
+     * 鏌ヨ璇ヨ鍒掔洃鐫e憳
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ璇ヨ鍒掔洃鐫e憳")
+    @GetMapping("/getRecordUser")
+    public Result getRecordUser(Integer superviseDetailsId){
+        return Result.success(qualitySuperviseService.getRecordUser(superviseDetailsId));
+    }
+
+
+    /**
+     * 瀵煎嚭鐩戠潱璁″垝
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鐩戠潱璁″垝")
+    @GetMapping("/exportQualitySupervise")
+    public void exportQualitySupervise(Integer superviseId, HttpServletResponse response){
+        qualitySuperviseService.exportQualitySupervise(superviseId, response);
+    }
+
+
+    /************************************************* 璁板綍 *********************************************************/
+
+    /**
+     * 鏌ヨ鐩戠潱璁板綍淇℃伅
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戠潱璁板綍淇℃伅")
+    @GetMapping("/getSuperviseDetailRecord")
+    public Result<QualitySuperviseDetailsRecord> getSuperviseDetailRecord(Integer superviseDetailsId){
+        return Result.success(qualitySuperviseService.getSuperviseDetailRecord(superviseDetailsId));
+    }
+
+    /**
+     * 鏂板鐩戠潱璁板綍淇℃伅
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戠潱璁板綍淇℃伅")
+    @PostMapping("/addSuperviseDetailRecord")
+    public Result addSuperviseDetailRecord(@RequestBody QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord){
+        return Result.success(qualitySuperviseService.addSuperviseDetailRecord(qualitySuperviseDetailsRecord));
+    }
+
+    /**
+     * 鐩戠潱璁板綍鎵瑰噯
+     * @return
+     */
+    @ApiOperation(value = "鐩戠潱璁板綍鎵瑰噯")
+    @PostMapping("/addSuperviseRecordOpinion")
+    public Result addSuperviseRecordOpinion(@RequestBody QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord){
+        return Result.success(qualitySuperviseService.addSuperviseRecordOpinion(qualitySuperviseDetailsRecord));
+    }
+
+    /**
+     * 瀵煎嚭璐ㄩ噺鐩戠潱璇︽儏璁板綍琛�
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鐩戠潱璁板綍琛�")
+    @GetMapping("/exportSuperviseDetailRecord")
+    public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response){
+        qualitySuperviseService.exportSuperviseDetailRecord(superviseDetailsId, response);
+    }
+
+    /*************************************************  涓嶅悎鏍煎伐浣滄帶鍒跺崟 ********************************************************/
+
+
+    /**
+     * 鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+    @PostMapping("/addSuperviseDetailAccording")
+    public Result addSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
+        return Result.success(qualitySuperviseService.addSuperviseDetailAccording(qualitySuperviseDetailsAccording));
+    }
+
+    /**
+     * 鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�(瑁呭娴佺▼)
+     * @return
+     */
+    @ApiOperation(value = "(瑁呭娴佺▼)鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+    @PostMapping("/addEquipSuperviseDetailAccording")
+    public Result addEquipSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
+        return Result.success(qualitySuperviseService.addEquipSuperviseDetailAccording(qualitySuperviseDetailsAccording));
+    }
+
+    /**
+     * (瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @return
+     */
+    @ApiOperation(value = "(瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+    @PostMapping("/approverEquipSuperviseDetailAccording")
+    public Result approverEquipSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
+        return Result.success(qualitySuperviseService.approverEquipSuperviseDetailAccording(qualitySuperviseDetailsAccording));
+    }
+
+    /**
+     * 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+    @GetMapping("/getSuperviseDetailAccording")
+    public Result<QualitySuperviseDetailsAccording> getSuperviseDetailAccording(Integer superviseDetailsId){
+        return Result.success(qualitySuperviseService.getSuperviseDetailAccording(superviseDetailsId));
+    }
+
+    /**
+     * 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭垪琛�
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭垪琛�")
+    @GetMapping("/pageSuperviseDetailAccording")
+    public Result<IPage<QualitySuperviseDetailsAccording>> pageSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording,Page page) throws Exception {
+        return Result.success(qualitySuperviseService.pageSuperviseDetailAccording(page, detailsAccording));
+    }
+
+    /**
+     * 瀵煎嚭鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+    @GetMapping("/superviseDetailAccordingExport")
+    public void superviseDetailAccordingExport(@RequestParam("superviseDetailsId") Integer id, HttpServletResponse response){
+        qualitySuperviseService.superviseDetailAccordingExport(id, response);
+    }
+
+
+
+    /*************************************************  绾犳鎺柦澶勭悊鍗� ********************************************************/
+
+
+    /**
+     * 鏂板鐩戠潱绾犳澶勭悊淇℃伅
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戠潱绾犳澶勭悊")
+    @PostMapping("/addSuperviseDetailCorrect")
+    public Result addSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
+        return Result.success(qualitySuperviseService.addSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
+    }
+
+    /**
+     * (瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊淇℃伅
+     * @return
+     */
+    @ApiOperation(value = "(瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊")
+    @PostMapping("/addEquipSuperviseDetailCorrect")
+    public Result addEquipSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
+        return Result.success(qualitySuperviseService.addEquipSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
+    }
+
+    /**
+     * (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊
+     * @return
+     */
+    @ApiOperation(value = "(瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊")
+    @PostMapping("/approveEquipSuperviseDetailCorrect")
+    public Result approveEquipSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
+        return Result.success(qualitySuperviseService.approveEquipSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
+    }
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳澶勭悊
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戠潱绾犳澶勭悊")
+    @GetMapping("/getSuperviseDetailCorrect")
+    public Result<QualitySuperviseDetailsCorrect> getSuperviseDetailCorrect(Integer superviseDetailsId){
+        return Result.success(qualitySuperviseService.getSuperviseDetailCorrect(superviseDetailsId));
+    }
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃")
+    @GetMapping("/pageSuperviseDetailCorrect")
+    public Result<IPage<QualitySuperviseDetailsCorrect>> pageSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect,Page page) throws Exception {
+        return Result.success(qualitySuperviseService.pageSuperviseDetailCorrect(page, detailsCorrect));
+    }
+
+    /**
+     * 鏂板鐩戠潱绾犳鎺柦闄勪欢
+     * @param superviseDetailsCorrectId
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "鏂板鐩戠潱绾犳鎺柦闄勪欢")
+    @PostMapping("/uploadSuperviseDetailCorrectFile")
+    public Result<?> uploadSuperviseDetailCorrectFile(Integer superviseDetailsCorrectId, MultipartFile file) {
+        return Result.success(qualitySuperviseService.uploadSuperviseDetailCorrectFile(superviseDetailsCorrectId, file));
+    }
+
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳鎺柦闄勪欢
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐩戠潱绾犳鎺柦闄勪欢")
+    @GetMapping("/getSuperviseDetailCorrectFileList")
+    public Result<List<QualitySuperviseDetailsCorrectFile>> getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId){
+        return Result.success(qualitySuperviseService.getSuperviseDetailCorrectFileList(superviseDetailsCorrectId));
+    }
+
+    /**
+     * 鍒犻櫎鐩戠潱绾犳鎺柦闄勪欢
+     * @return
+     */
+    @ApiOperation(value = "鍒犻櫎鐩戠潱绾犳鎺柦闄勪欢")
+    @DeleteMapping("/delSuperviseDetailCorrectFile")
+    public Result delSuperviseDetailCorrectFile(Integer superviseDetailsCorrectFileId){
+        return Result.success(qualitySuperviseDetailsCorrectMapper.deleteById(superviseDetailsCorrectFileId));
+    }
+
+    /**
+     * 瀵煎嚭鐩戠潱绾犳鎺柦
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭鐩戠潱绾犳鎺柦")
+    @GetMapping("/exportSuperviseDetaillCorrect")
+    public void exportSuperviseDetaillCorrect(Integer superviseDetailsCorrectId, HttpServletResponse response){
+        qualitySuperviseService.exportSuperviseDetaillCorrect(superviseDetailsCorrectId, response);
+    }
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ImageDemoData.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ImageDemoData.java
new file mode 100644
index 0000000..c0ba3ab
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ImageDemoData.java
@@ -0,0 +1,43 @@
+package com.ruoyi.process.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.converters.string.StringImageConverter;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+@ContentRowHeight(100)  // 琛岄珮
+@ColumnWidth(100 / 8)  // 鍒楀
+public class ImageDemoData {
+    private File file;
+    private InputStream inputStream;
+    /**
+     * 濡傛灉string绫诲瀷 蹇呴』鎸囧畾杞崲鍣紝string榛樿杞崲鎴恠tring
+     */
+    @ExcelProperty(converter = StringImageConverter.class)
+    private String string;
+    private byte[] byteArray;
+    /**
+     * 鏍规嵁url瀵煎嚭
+     *
+     * @since 2.1.1
+     */
+    private URL url;
+
+    /**
+     * 鏍规嵁鏂囦欢瀵煎嚭 骞惰缃鍑虹殑浣嶇疆銆�
+     *
+     * @since 3.0.0-beta1
+     */
+    private WriteCellData<Void> writeCellDataFile;
+}
\ No newline at end of file
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionDto.java
new file mode 100644
index 0000000..e362930
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionDto.java
@@ -0,0 +1,28 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.InconsistentDistribution;
+import com.ruoyi.process.pojo.InconsistentDistributionDetail;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/15
+ */
+@Data
+public class InconsistentDistributionDto extends InconsistentDistribution {
+
+    @ApiModelProperty("鍒嗗竷璇︽儏")
+    private List<InconsistentDistributionDetail> distributionDetailList;
+
+    @ApiModelProperty("鍗犳瘮瀵硅薄")
+    private InconsistentDistributionProportionDto distributionProportion;
+
+    @ApiModelProperty("鍒涘缓浜哄悕绉�")
+    private String createUserName;
+
+    @ApiModelProperty("淇敼浜哄悕绉�")
+    private String updateUserName;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java
new file mode 100644
index 0000000..a606db5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java
@@ -0,0 +1,45 @@
+package com.ruoyi.process.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 鍗犳瘮瀵硅薄
+ *
+ * @Author zhuo
+ * @Date 2024/11/15
+ */
+
+@Data
+public class InconsistentDistributionProportionDto {
+
+    @ApiModelProperty("绔犺妭鍙�")
+    private String chapterNumber;
+
+    @ApiModelProperty("瑕佺礌")
+    private String essentials;
+
+    @ApiModelProperty("涓讳换")
+    private BigDecimal director;
+
+    @ApiModelProperty("鎶�鏈礋璐d汉")
+    private BigDecimal technology;
+
+    @ApiModelProperty("璐ㄩ噺璐熻矗浜�")
+    private BigDecimal quality;
+
+    @ApiModelProperty("缁煎悎瀹�")
+    private BigDecimal comprehensive;
+
+    @ApiModelProperty("璇曢獙瀹�")
+    private BigDecimal testing;
+
+    @ApiModelProperty("鍚堣")
+    private Integer total;
+
+    @ApiModelProperty("鍗犳瘮")
+    private BigDecimal proportion;
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderDto.java
new file mode 100644
index 0000000..8e2af66
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.InspectionOrder;
+import com.ruoyi.process.pojo.InspectionOrderDetail;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/9
+ */
+@Data
+public class InspectionOrderDto extends InspectionOrder {
+
+    @ApiModelProperty("濮旀墭妫�楠屽崟璇︽儏")
+    private List<InspectionOrderDetail> orderDetailList;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderExportDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderExportDto.java
new file mode 100644
index 0000000..5c698f8
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderExportDto.java
@@ -0,0 +1,51 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.InspectionOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-10 鏄熸湡浜�
+ * Description:
+ */
+@Data
+public class InspectionOrderExportDto extends InspectionOrder {
+    @ApiModelProperty("鐣欐牱:1 鏄�")
+    private String isLeave1 = "鈻�";
+
+    @ApiModelProperty("鐣欐牱:0 鍚�")
+    private String isLeave2 = "鈻�";
+
+    @ApiModelProperty("鎶ュ憡鍙戦�佹柟寮� 1锛氳嚜鍙�")
+    private String send1 = "鈻�";
+
+    @ApiModelProperty("鎶ュ憡鍙戦�佹柟寮� 0锛氬叾浠�")
+    private String send0 = "鈻�";
+
+    @ApiModelProperty("鏍峰搧澶勭悊鏂瑰紡 1锛氬疄楠屽澶勭悊")
+    private String processing1 = "鈻�";
+
+    @ApiModelProperty("鏍峰搧澶勭悊鏂瑰紡 0锛氬鎵樺崟浣嶅彇鍥�")
+    private String processing0 = "鈻�";
+
+    @ApiModelProperty("鍒ゆ柇瑙勫垯 1锛氳�冭檻涓嶇‘瀹氬害")
+    private String criterionRule1 = "鈻�";
+
+    @ApiModelProperty("鍒ゆ柇瑙勫垯 0锛氫笉鑰冭檻涓嶇‘瀹氬害")
+    private String criterionRule0 = "鈻�";
+
+    @ApiModelProperty("濮旀墭鏃堕棿 瀛楃涓叉牸寮忥細yyyy骞碝M鏈坉d")
+    private String commissionDateString;
+
+    @ApiModelProperty("鎺ユ敹鏃ユ湡 瀛楃涓叉牸寮忥細yyyy骞碝M鏈坉d")
+    private String receiptDataString;
+
+    @ApiModelProperty("棰嗘牱鏃ユ湡 瀛楃涓叉牸寮忥細yyyy骞碝M鏈坉d")
+    private String sampleDataString;
+
+    @ApiModelProperty("绾﹀畾鏃堕棿 瀛楃涓叉牸寮忥細yyyy骞碝M鏈坉d")
+    private String appointedString;
+
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessComplainDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessComplainDto.java
new file mode 100644
index 0000000..f33a281
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessComplainDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.ProcessComplain;
+import lombok.Data;
+
+@Data
+//鎶曡瘔璇︽儏
+public class ProcessComplainDto extends ProcessComplain {
+
+    private String phone;
+
+    private String email;
+
+    private String problemRecordsUserName;
+
+    private String dutyOwnershipUserName;
+
+    private String causeAnalysisUserName;
+
+    private String correctiveActionUserName;
+
+    private String correctiveActionConfirmationUserName;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewArchivedDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewArchivedDto.java
new file mode 100644
index 0000000..8808abf
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewArchivedDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/25
+ */
+@Data
+public class ProcessMethodSearchNewArchivedDto extends ProcessMethodSearchNewArchived {
+
+    @ApiModelProperty("缂栧埗浜�")
+    private String writeName;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private String ratifyName;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewBackupsDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewBackupsDto.java
new file mode 100644
index 0000000..e1a0db7
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewBackupsDto.java
@@ -0,0 +1,62 @@
+package com.ruoyi.process.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/4
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class ProcessMethodSearchNewBackupsDto extends ProcessMethodSearchNewBackups {
+
+    @ApiModelProperty("寮�濮嬫椂闂�")
+    private String beginDate;
+
+    @ApiModelProperty("缁撴潫鏃堕棿")
+    private String endDate;
+
+    @ApiModelProperty("缂栧埗浜篿d")
+    private Integer writeUserId;
+
+    @ApiModelProperty("鎵瑰噯浜篿d")
+    private Integer ratifyUserId;
+
+    @ApiModelProperty("缂栧埗浜烘棩鏈�")
+    private String writeDate;
+
+    @ApiModelProperty("鎵瑰噯浜烘棩鏈�")
+    private String ratifyDate;
+
+    @ExcelProperty(value = {"鏄惁鏈夋洿鏂版爣鍑�", "鏄惁鏈夋洿鏂版爣鍑�"}, index = 4)
+    @ApiModelProperty("鏄惁鏈夋洿鏂版爣鍑�")
+    private String isNewStandardString;
+
+    @ExcelProperty(value = {"鏌ユ柊璁板綍", "鏍囧噯缃�"}, index = 7)
+    @ApiModelProperty("鏍囧噯缃�")
+    private String standardNet;
+
+    @ExcelProperty(value = {"鏌ユ柊璁板綍", "濮旀墭鎯呮姤鎵�"}, index = 8)
+    @ApiModelProperty("濮旀墭鎯呮姤鎵�")
+    private String informationOffices;
+
+    @ExcelProperty(value = {"鏌ユ柊璁板綍", "鏍囧噯涔﹀簵"}, index = 9)
+    @ApiModelProperty("鏍囧噯涔﹀簵")
+    private String standardBookstore;
+
+    @ExcelProperty(value = {"鏌ユ柊璁板綍", "鍏朵粬"}, index = 10)
+    @ApiModelProperty("鍏朵粬")
+    private String other;
+
+    @ExcelProperty(value = {"澶囨敞", "澶囨敞"}, index = 11)
+    @ApiModelProperty("澶囨敞")
+    private String remarkString;
+
+    @ExcelProperty(value = {"搴忓彿", "搴忓彿"}, index = 0)
+    @ApiModelProperty("搴忓彿")
+    private Integer index;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyCalibrationsFileDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyCalibrationsFileDto.java
new file mode 100644
index 0000000..3d5e292
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyCalibrationsFileDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.ProcessMethodVerifyCalibrationsFile;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/12
+ */
+@Data
+public class ProcessMethodVerifyCalibrationsFileDto extends ProcessMethodVerifyCalibrationsFile {
+
+    @ApiModelProperty("璁惧鍚嶇О")
+    private String deviceName;
+
+    @ApiModelProperty("璁惧缂栧彿")
+    private String managementNumber;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyDto.java
new file mode 100644
index 0000000..ba7464d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyDto.java
@@ -0,0 +1,30 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.ProcessMethodVerify;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMachineAttachment;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
+import com.ruoyi.process.pojo.ProcessMethodVerifyWorkFile;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/5
+ */
+@Data
+public class ProcessMethodVerifyDto extends ProcessMethodVerify {
+
+    @ApiModelProperty("璁惧闄勪欢")
+    private List<ProcessMethodVerifyMachineAttachment> machineAttachmentList;
+
+    @ApiModelProperty("鍘熷璁板綍闄勪欢")
+    private List<ProcessMethodVerifyMethodFile> methodFileList;
+
+    @ApiModelProperty("涓婂矖璇�")
+    private List<ProcessMethodVerifyWorkFile> workFileList;
+
+    @ApiModelProperty("鏍″噯璇佷功")
+    private List<ProcessMethodVerifyCalibrationsFileDto> calibrationsFileList;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyExportWordDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyExportWordDto.java
new file mode 100644
index 0000000..5d344cf
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyExportWordDto.java
@@ -0,0 +1,40 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.ProcessMethodVerify;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-19 鏄熸湡鍥� 15:55:46
+ * Description:
+ */
+@Data
+public class ProcessMethodVerifyExportWordDto extends ProcessMethodVerify {
+    @ApiModelProperty("(浜�)鏄惁婊¤冻 1婊¤冻 0涓嶆弧瓒�")
+    private String personIsSatisfiedStr;
+
+    @ApiModelProperty("(鏈�)鏄惁婊¤冻")
+    private String machineIsSatisfiedStr;
+
+    @ApiModelProperty("(鏂�)鏄惁婊¤冻")
+    private String materialIsSatisfiedStr;
+
+    @ApiModelProperty("(娉�)鏄惁婊¤冻")
+    private String methodIsSatisfiedStr;
+
+    @ApiModelProperty("(鐜�)鏄惁婊¤冻")
+    private String environmentIsSatisfiedStr;
+
+    @ApiModelProperty("(娴嬮噺婧簮鎬�)鏄惁婊¤冻")
+    private String traceabilityIsSatisfiedStr;
+
+    @ApiModelProperty("(鏍峰搧绠$悊闇�姹�)鏄惁婊¤冻")
+    private String managementIsSatisfiedStr;
+
+    @ApiModelProperty("(鍏朵粬)鏄惁婊¤冻")
+    private String otherIsSatisfiedStr;
+
+    @ApiModelProperty("纭鏃堕棿")
+    private String confirmDateStr;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessReportDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessReportDto.java
new file mode 100644
index 0000000..d54e1fd
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessReportDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.process.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+//瀵煎嚭
+public class ProcessReportDto {
+
+    private List<Integer> ids;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsEvaluateDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsEvaluateDto.java
new file mode 100644
index 0000000..ecc2d34
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsEvaluateDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.QualityMonitorDetailsEvaluate;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-20 鏄熸湡浜� 9:08:38
+ * Description:
+ */
+@Data
+public class QualityMonitorDetailsEvaluateDto extends QualityMonitorDetailsEvaluate {
+    @ApiModelProperty("鎵瑰噯鏃堕棿")
+    private String ratifyTimeStr;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDto.java
new file mode 100644
index 0000000..fc72e14
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.QualityMonitor;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/6
+ */
+@Data
+public class QualityMonitorDto extends QualityMonitor {
+
+    @ApiModelProperty("缂栧埗浜�")
+    private String writeName;
+
+    @ApiModelProperty("瀹℃牳浜�")
+    private String examineName;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private String ratifyName;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsAccordingDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsAccordingDto.java
new file mode 100644
index 0000000..b5bd565
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsAccordingDto.java
@@ -0,0 +1,63 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.QualitySuperviseDetailsAccording;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-11 鏄熸湡涓� 16:26:41
+ * Description:
+ */
+@Data
+public class QualitySuperviseDetailsAccordingDto extends QualitySuperviseDetailsAccording {
+
+    @ApiModelProperty("1鍙戠幇閮ㄩ棬-鏃ユ湡")
+    private String discovererDateString;
+
+    @ApiModelProperty("3璐d换閮ㄩ棬 鏃ユ湡")
+    private String responsibleDepartmentDateString;
+
+    @ApiModelProperty("4绾犳鎺柦 鏃ユ湡")
+    private String correctiveMeasureDateString;
+
+    @ApiModelProperty("5璐ㄩ噺璐熻矗浜烘棩鏈�")
+    private String qualitySupervisorDateString;
+
+    @ApiModelProperty("0琚洃鐫f椂闂� 鏃ユ湡")
+    private String supervisedTimeString;
+
+    @ApiModelProperty("4绾犳鎺柦澶勭悊鍗曡窡韪�(鏄�)")
+    private String correctiveMeasureFollowTracksYes = "鈻�";
+    @ApiModelProperty("4绾犳鎺柦澶勭悊鍗曡窡韪�(鍚�)")
+    private String correctiveMeasureFollowTracksNo = "鈻�";
+
+
+    @ApiModelProperty("5鏄惁閫氱煡瀹㈡埛(鏄�)")
+    private String whetherInformCustomerYes = "鈻�";
+    @ApiModelProperty("5鏄惁閫氱煡瀹㈡埛(鍚�)")
+    private String whetherInformCustomerNo = "鈻�";
+
+
+    @ApiModelProperty("5鏄惁鎭㈠宸ヤ綔(1锛氭槸锛�2锛氬惁)")
+    private String whetherResumeWorkYes = "鈻�";
+    @ApiModelProperty("5鏄惁鎭㈠宸ヤ綔(1锛氭槸锛�2锛氬惁)")
+    private String whetherResumeWorkNo = "鈻�";
+
+    @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞0(绠$悊璇勫)")
+    private String discoveryApproach0 = "鈻�";
+    @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞1(鍐呴儴瀹℃牳)")
+    private String discoveryApproach1 = "鈻�";
+    @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞2(妫�娴嬭繃绋嬫帶鍒�)")
+    private String discoveryApproach2 = "鈻�";
+    @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞3(鍐呴儴璐ㄩ噺鎺у埗)")
+    private String discoveryApproach3 = "鈻�";
+    @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞4(鍐呴儴鐩戠潱)")
+    private String discoveryApproach4 = "鈻�";
+    @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞5(澶栭儴璇勫/妫�鏌�)")
+    private String discoveryApproach5 = "鈻�";
+    @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞6(椤惧鎶曡瘔/鎰忚鍙嶉)")
+    private String discoveryApproach6 = "鈻�";
+    @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞7(鍏朵粬)")
+    private String discoveryApproach7 = "鈻�";
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsCorrectDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsCorrectDto.java
new file mode 100644
index 0000000..775c729
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsCorrectDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.QualitySuperviseDetailsCorrect;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/2
+ */
+@Data
+public class QualitySuperviseDetailsCorrectDto extends QualitySuperviseDetailsCorrect {
+
+    @ApiModelProperty("鎻愬嚭鏃堕棿")
+    private String raiseTimeString;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽鏃堕棿")
+    private String causeTimeString;
+
+    @ApiModelProperty("绾犳鏃堕棿")
+    private String correctTimeString;
+
+    @ApiModelProperty("楠岃瘉鏃堕棿")
+    private String validationTimeString;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java
new file mode 100644
index 0000000..6e3854d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.QualitySuperviseDetails;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/7
+ */
+@Data
+public class QualitySuperviseDetailsDto extends QualitySuperviseDetails {
+
+    @ApiModelProperty("鏄惁绗﹀悎,0 涓嶇鍚�, 1绗﹀悎")
+    private Integer isAccording;
+
+    @ApiModelProperty("2鏄惁绾犳澶勭悊, 0鍚�, 1鏄�")
+    private Integer isCorrect;
+
+    @ApiModelProperty("璐ㄩ噺鐩戠潱璇︽儏绾犳澶勭悊id")
+    private Integer superviseDetailsCorrectId;
+
+    @ApiModelProperty("鐩戠潱鍘熷洜绫诲瀷, 1:瀹氭湡鐩戠潱, 2:鍔ㄦ�佺洃鐫�")
+    private Integer causeType;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/SampleItemDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/SampleItemDto.java
new file mode 100644
index 0000000..096641b
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/SampleItemDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.process.dto;
+
+import lombok.Data;
+
+@Data
+//瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫鐨勬牱鍝佽鎯�
+public class SampleItemDto {
+
+    //鏍峰搧缂栧彿
+    private String code;
+
+    //鏍峰搧鍨嬪彿
+    private String model;
+
+    //璇曢獙椤圭洰
+    private String product;
+
+    //妫�楠屼緷鎹�
+    private String standardMethodList;
+
+    //澶囨敞
+    private String remark;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/excel/QualityMonitorDetailsUpload.java b/cnas-process/src/main/java/com/ruoyi/process/excel/QualityMonitorDetailsUpload.java
new file mode 100644
index 0000000..d6489af
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/excel/QualityMonitorDetailsUpload.java
@@ -0,0 +1,33 @@
+package com.ruoyi.process.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/8
+ */
+@Data
+public class QualityMonitorDetailsUpload {
+
+    @ExcelProperty("鐩戞帶鐩殑")
+    private String monitorPurpose;
+
+    @ExcelProperty("璁″垝寮�灞曟椂闂�")
+    private String plannedTime;
+
+    @ExcelProperty("鐩戞帶椤圭洰")
+    private String monitorProject;
+
+    @ExcelProperty("鍙傚姞鍗曚綅锛堜汉鍛橈級")
+    private String participant;
+
+    @ExcelProperty("棰勭畻锛堝厓锛�")
+    private String budget;
+
+    @ExcelProperty("缁勭粐浜哄憳")
+    private String organization;
+
+    @ExcelProperty("鐩戞帶鏂瑰紡")
+    private String monitorWay;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/excel/QualitySuperviseDetailsUpload.java b/cnas-process/src/main/java/com/ruoyi/process/excel/QualitySuperviseDetailsUpload.java
new file mode 100644
index 0000000..4a0aeb5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/excel/QualitySuperviseDetailsUpload.java
@@ -0,0 +1,30 @@
+package com.ruoyi.process.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/8
+ */
+@Data
+public class QualitySuperviseDetailsUpload {
+
+    @ExcelProperty("鐩戠潱鏃ユ湡")
+    private String superviseTime;
+
+    @ExcelProperty("鐩戠潱鐩殑")
+    private String supervisePurpose;
+
+    @ExcelProperty("鐩戞帶椤圭洰")
+    private String superviseProject;
+
+    @ExcelProperty("琚洃鐫d汉鍛�")
+    private String supervisee;
+
+    @ExcelProperty("鐩戠潱鍘熷洜")
+    private String superviseReason;
+
+    @ExcelProperty("澶囨敞")
+    private String remark;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionDetailMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionDetailMapper.java
new file mode 100644
index 0000000..8c31339
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionDetailMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.InconsistentDistributionDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯冭鎯� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 09:53:33
+ */
+@Mapper
+public interface InconsistentDistributionDetailMapper extends BaseMapper<InconsistentDistributionDetail> {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionMapper.java
new file mode 100644
index 0000000..d2fff19
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionMapper.java
@@ -0,0 +1,30 @@
+package com.ruoyi.process.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.process.dto.InconsistentDistributionDto;
+import com.ruoyi.process.pojo.InconsistentDistribution;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 09:53:20
+ */
+@Mapper
+public interface InconsistentDistributionMapper extends BaseMapper<InconsistentDistribution> {
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鏌ヨ
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<InconsistentDistributionDto> pageInconsistentDistribution(Page page, @Param("ew") QueryWrapper<InconsistentDistribution> ew);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderDetailMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderDetailMapper.java
new file mode 100644
index 0000000..3163136
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderDetailMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.InspectionOrderDetail;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+public interface InspectionOrderDetailMapper extends BaseMapper<InspectionOrderDetail> {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderMapper.java
new file mode 100644
index 0000000..0ab8bb3
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderMapper.java
@@ -0,0 +1,37 @@
+package com.ruoyi.process.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.InsOrder;
+import com.ruoyi.process.dto.InspectionOrderDto;
+import com.ruoyi.process.pojo.InspectionOrder;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+public interface InspectionOrderMapper extends BaseMapper<InspectionOrder> {
+
+    /**
+     * 妫�楠屽鎵樺崟鍒嗛〉鏌ヨ
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<InspectionOrderDto> pageInspectionOrder(Page page, @Param("ew") QueryWrapper<InspectionOrder> ew);
+
+    /**
+     * 濮旀墭鍗曟煡璇㈡垚鍝佽鍗�
+     * @param page
+     * @param insOrderQueryWrapper
+     * @return
+     */
+    IPage<InsOrder> getInsOrderOnInspection(Page page, @Param("ew") QueryWrapper<InsOrder> insOrderQueryWrapper);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessComplainMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessComplainMapper.java
new file mode 100644
index 0000000..8a025dd
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessComplainMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.process.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.process.dto.ProcessComplainDto;
+import com.ruoyi.process.pojo.ProcessComplain;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鎶曡瘔 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 09:29:11
+ */
+public interface ProcessComplainMapper extends BaseMapper<ProcessComplain> {
+
+    IPage<ProcessComplain> pageProcessComplain(@Param("page") Page page, @Param("ew") QueryWrapper<ProcessComplain> queryWrappers);
+
+    ProcessComplainDto getProcessComplain(Long id);
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessDealMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessDealMapper.java
new file mode 100644
index 0000000..49bfb8b
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessDealMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.process.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.process.pojo.ProcessDeal;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 02:50:19
+ */
+public interface ProcessDealMapper extends BaseMapper<ProcessDeal> {
+
+    IPage<ProcessDeal> pageProcessDeal(Page page, @Param("ew") QueryWrapper<ProcessDeal> queryWrappers);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessEvaluateMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessEvaluateMapper.java
new file mode 100644
index 0000000..c3f46ec
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessEvaluateMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.process.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.process.pojo.ProcessEvaluate;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 娴嬮噺涓嶇‘瀹氬害鐨勮瘎浠� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 01:10:43
+ */
+public interface ProcessEvaluateMapper extends BaseMapper<ProcessEvaluate> {
+
+    IPage<ProcessEvaluate> pageProcessEvaluate(Page page, @Param("ew") QueryWrapper<ProcessEvaluate> queryWrappers);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewArchivedMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewArchivedMapper.java
new file mode 100644
index 0000000..5a03a47
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewArchivedMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.process.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.process.dto.ProcessMethodSearchNewArchivedDto;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍囧噯鏌ユ柊瀛樻。琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-25 05:28:42
+ */
+public interface ProcessMethodSearchNewArchivedMapper extends BaseMapper<ProcessMethodSearchNewArchived> {
+
+    /**
+     * 鏌ヨ瀛樻。
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<ProcessMethodSearchNewArchivedDto> pageSearchNewArchived(Page page, @Param("ew") QueryWrapper<ProcessMethodSearchNewArchivedDto> ew);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewBackupsMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewBackupsMapper.java
new file mode 100644
index 0000000..9c9ebf7
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewBackupsMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.process.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.process.pojo.ProcessMethodSearchNewBackups;
+
+/**
+ * <p>
+ * 鏍囧噯鏌ユ柊澶囦唤琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-25 05:29:02
+ */
+public interface ProcessMethodSearchNewBackupsMapper extends BaseMapper<ProcessMethodSearchNewBackups> {
+
+    /**
+     * 鏌ヨ瀛樻。澶囦唤鍒楄〃
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<ProcessMethodSearchNewBackups> pageSearchNewBackups(Page page, QueryWrapper<ProcessMethodSearchNewBackups> ew);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java
new file mode 100644
index 0000000..e82cfc7
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java
@@ -0,0 +1,32 @@
+package com.ruoyi.process.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.process.dto.ProcessMethodSearchNewBackupsDto;
+import com.ruoyi.process.pojo.ProcessMethodSearchNew;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鏍囧噯鏌ユ柊
+ *
+ * @author zhuo
+ * @since 2024-11-04
+ */
+@Mapper
+public interface ProcessMethodSearchNewMapper extends BaseMapper<ProcessMethodSearchNew> {
+
+    /**
+     * 鏍囧噯鏌ユ柊鍒嗛〉鏌ヨ
+     * @param page
+     * @param processMethodSearchNewDtoQueryWrapper
+     * @param beginDate
+     * @param endDate
+     * @return
+     */
+    IPage<ProcessMethodSearchNew> pageMethodSearchNew(@Param("page") Page page, @Param("ew") QueryWrapper<ProcessMethodSearchNewBackupsDto> processMethodSearchNewDtoQueryWrapper, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyCalibrationsFileMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyCalibrationsFileMapper.java
new file mode 100644
index 0000000..1c495e3
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyCalibrationsFileMapper.java
@@ -0,0 +1,34 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.dto.ProcessMethodVerifyCalibrationsFileDto;
+import com.ruoyi.process.pojo.ProcessMethodVerifyCalibrationsFile;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉璁惧鏍″噯闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-12
+ */
+@Mapper
+public interface ProcessMethodVerifyCalibrationsFileMapper extends BaseMapper<ProcessMethodVerifyCalibrationsFile> {
+
+    /**
+     * 鏌ヨ鏍″噯璇佷功闄勪欢琛�
+     * @param methodVerifyId
+     * @return
+     */
+    List<ProcessMethodVerifyCalibrationsFileDto> selectCalibrationsFileList(@Param("methodVerifyId") Integer methodVerifyId);
+
+    /**
+     * 璁惧id鏌ヨ鏍″噯璇佷功
+     * @param deviceId
+     * @return
+     */
+    String selectCalibrationsFile(@Param("deviceId") Integer deviceId);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMachineAttachmentMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMachineAttachmentMapper.java
new file mode 100644
index 0000000..5ef9293
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMachineAttachmentMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMachineAttachment;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉璁惧闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@Mapper
+public interface ProcessMethodVerifyMachineAttachmentMapper extends BaseMapper<ProcessMethodVerifyMachineAttachment> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMapper.java
new file mode 100644
index 0000000..1c0131b
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.process.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.process.dto.ProcessMethodVerifyDto;
+import com.ruoyi.process.pojo.ProcessMethodVerify;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@Mapper
+public interface ProcessMethodVerifyMapper extends BaseMapper<ProcessMethodVerify> {
+
+    /**
+     * 鏍囧噯鏂规硶鍙樻洿, 楠岃瘉
+     * @param page
+     * @param processMethodVerifyDtoQueryWrapper
+     * @return
+     */
+    IPage<ProcessMethodVerify> pagesMethodVerify(Page page, @Param("ew") QueryWrapper<ProcessMethodVerifyDto> processMethodVerifyDtoQueryWrapper);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMethodFileMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMethodFileMapper.java
new file mode 100644
index 0000000..b7dd2ee
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMethodFileMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@Mapper
+public interface ProcessMethodVerifyMethodFileMapper extends BaseMapper<ProcessMethodVerifyMethodFile> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyWorkFileMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyWorkFileMapper.java
new file mode 100644
index 0000000..b103cb5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyWorkFileMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.ProcessMethodVerifyWorkFile;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉涓婂矖璇侀檮浠惰〃
+ *
+ * @author zhuo
+ * @since 2024-11-12
+ */
+@Mapper
+public interface ProcessMethodVerifyWorkFileMapper extends BaseMapper<ProcessMethodVerifyWorkFile> {
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鏌ヨ涓婂矖璇�
+     * @param userId
+     * @return
+     */
+    String selectWorkFile(@Param("userId") Integer userId);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessReportMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessReportMapper.java
new file mode 100644
index 0000000..86e6aaf
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessReportMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.process.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.process.pojo.ProcessReport;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-05 08:58:39
+ */
+public interface ProcessReportMapper extends BaseMapper<ProcessReport> {
+
+    IPage<ProcessReport> pageProcessReport(Page page, @Param("ew") QueryWrapper<ProcessReport> queryWrappers);
+
+    List<ProcessReport> getIds(List<Integer> ids);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessSampleMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessSampleMapper.java
new file mode 100644
index 0000000..417fa05
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessSampleMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.process.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.process.pojo.ProcessSample;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-12 05:02:49
+ */
+public interface ProcessSampleMapper extends BaseMapper<ProcessSample> {
+
+    IPage<ProcessSample> pageProcessSample(@Param("page") Page page, @Param("ew") QueryWrapper<ProcessSample> ew);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotalSampleMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotalSampleMapper.java
new file mode 100644
index 0000000..a4786fe
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotalSampleMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.process.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.process.pojo.ProcessTotalSample;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹鎬昏〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-12 05:02:58
+ */
+public interface ProcessTotalSampleMapper extends BaseMapper<ProcessTotalSample> {
+
+    IPage<ProcessTotalSample> pageProcessTotalSample(Page page, @Param("ew") QueryWrapper<ProcessTotalSample> ew);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotaldealMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotaldealMapper.java
new file mode 100644
index 0000000..ddc0997
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotaldealMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.process.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.process.pojo.ProcessTotaldeal;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�昏〃(鍘嗗彶) Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 03:59:09
+ */
+public interface ProcessTotaldealMapper extends BaseMapper<ProcessTotaldeal> {
+
+    IPage<ProcessTotaldeal> pageProcessTotaldeal(Page page, @Param("ew") QueryWrapper<ProcessTotaldeal> queryWrappers);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateFileMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateFileMapper.java
new file mode 100644
index 0000000..c7c6e98
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateFileMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.QualityMonitorDetailsEvaluateFile;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Mapper
+public interface QualityMonitorDetailsEvaluateFileMapper extends BaseMapper<QualityMonitorDetailsEvaluateFile> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateMapper.java
new file mode 100644
index 0000000..92fdd63
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.QualityMonitorDetailsEvaluate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Mapper
+public interface QualityMonitorDetailsEvaluateMapper extends BaseMapper<QualityMonitorDetailsEvaluate> {
+
+    /**
+     * 鏌ヨ璐ㄩ噺鐩戞帶璇勪环
+     * @param qualityMonitorDetailsId
+     * @return
+     */
+    QualityMonitorDetailsEvaluate getQualityMonitorEvaluate(Integer qualityMonitorDetailsId);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsMapper.java
new file mode 100644
index 0000000..8648038
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.process.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.process.pojo.QualityMonitorDetails;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Mapper
+public interface QualityMonitorDetailsMapper extends BaseMapper<QualityMonitorDetails> {
+
+    /**
+     * 璐ㄩ噺鐩戞帶璁″垝鍒楄〃
+     * @param page
+     * @param qualityMonitorDetailsQueryWrapper
+     * @return
+     */
+    IPage<QualityMonitorDetails> pageQualityMonitorDetail(Page page, @Param("ew") QueryWrapper<QualityMonitorDetails> qualityMonitorDetailsQueryWrapper);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsRatifyMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsRatifyMapper.java
new file mode 100644
index 0000000..12d27fc
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsRatifyMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.QualityMonitorDetailsRatify;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏鎵瑰噯琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Mapper
+public interface QualityMonitorDetailsRatifyMapper extends BaseMapper<QualityMonitorDetailsRatify> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorMapper.java
new file mode 100644
index 0000000..bf4f81e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.process.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.process.dto.QualityMonitorDto;
+import com.ruoyi.process.pojo.QualityMonitor;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Mapper
+public interface QualityMonitorMapper extends BaseMapper<QualityMonitor> {
+
+    /**
+     * 鐩戞帶璁″垝鍒楄〃
+     * @return
+     */
+    IPage<QualityMonitorDto> pageQualityMonitor(Page page, @Param("ew") QueryWrapper<QualityMonitor> qualityMonitorQueryWrapper);
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsAccordingMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsAccordingMapper.java
new file mode 100644
index 0000000..4ca9af7
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsAccordingMapper.java
@@ -0,0 +1,36 @@
+package com.ruoyi.process.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.process.dto.QualitySuperviseDetailsAccordingDto;
+import com.ruoyi.process.pojo.QualitySuperviseDetailsAccording;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏涓嶇鍚堥」鎺у埗琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Mapper
+public interface QualitySuperviseDetailsAccordingMapper extends BaseMapper<QualitySuperviseDetailsAccording> {
+
+    /**
+     * 鏌ヨ涓嶇鍚堥」鎺у埗鍒楄〃
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<QualitySuperviseDetailsAccording> pageSuperviseDetailAccording(Page page, @Param("ew") QueryWrapper<QualitySuperviseDetailsAccording> ew);
+
+    /**
+     * 瀵煎嚭鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param superviseDetailId
+     * @return
+     */
+    QualitySuperviseDetailsAccordingDto selectSuperviseDetailsAccording(@Param("superviseDetailId") Integer superviseDetailId);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectFileMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectFileMapper.java
new file mode 100644
index 0000000..5d62de4
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectFileMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.QualitySuperviseDetailsCorrectFile;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏绾犳鎺柦闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Mapper
+public interface QualitySuperviseDetailsCorrectFileMapper extends BaseMapper<QualitySuperviseDetailsCorrectFile> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectMapper.java
new file mode 100644
index 0000000..f2576c0
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.process.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.process.pojo.QualitySuperviseDetailsCorrect;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏绾犳澶勭悊琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Mapper
+public interface QualitySuperviseDetailsCorrectMapper extends BaseMapper<QualitySuperviseDetailsCorrect> {
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃
+     * @param page
+     * @param ew
+     * @return
+     */
+    IPage<QualitySuperviseDetailsCorrect> pageSuperviseDetailAccording(Page page, @Param("ew") QueryWrapper<QualitySuperviseDetailsCorrect> ew);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsMapper.java
new file mode 100644
index 0000000..f21bbeb
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.process.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.process.dto.QualitySuperviseDetailsDto;
+import com.ruoyi.process.pojo.QualitySuperviseDetails;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Mapper
+public interface QualitySuperviseDetailsMapper extends BaseMapper<QualitySuperviseDetails> {
+
+    /**
+     * 鐩戠潱璁″垝璇︽儏鍒楄〃
+     * @param page
+     * @param qualitySuperviseDetailsQueryWrapper
+     * @return
+     */
+    IPage<QualitySuperviseDetailsDto> pageQualitySuperviseDetail(Page page, @Param("ew") QueryWrapper<QualitySuperviseDetailsDto> qualitySuperviseDetailsQueryWrapper, @Param("causeType") Integer causeType);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsRecordMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsRecordMapper.java
new file mode 100644
index 0000000..e234345
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsRecordMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.process.pojo.QualitySuperviseDetailsRecord;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏璁板綍琛�
+ *
+ * @author makejava
+ * @since 2024-11-07
+ */
+@Mapper
+public interface QualitySuperviseDetailsRecordMapper extends BaseMapper<QualitySuperviseDetailsRecord> {
+
+    /**
+     * 瀵煎嚭鐩戠潱璁板綍琛�
+     * @param superviseDetailsId
+     * @return
+     */
+    QualitySuperviseDetailsRecord selectSuperviseDetailRecord(@Param("superviseDetailsId") Integer superviseDetailsId);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseMapper.java
new file mode 100644
index 0000000..0d88566
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseMapper.java
@@ -0,0 +1,38 @@
+package com.ruoyi.process.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.process.pojo.QualitySupervise;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璐ㄩ噺鐩戠潱涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Mapper
+public interface QualitySuperviseMapper extends BaseMapper<QualitySupervise> {
+
+    /**
+     * 鐩戠潱璁″垝鍒楄〃
+     * @param page
+     * @param qualitySuperviseQueryWrapper
+     * @return
+     */
+    IPage<QualitySupervise> pageQualitySupervise(@Param("page") Page page, @Param("ew") QueryWrapper<QualitySupervise> qualitySuperviseQueryWrapper);
+
+    /**
+     * 鏌ヨ璇ヨ鍒掔洃鐫e憳
+     * @param superviseDetailsId
+     * @return
+     */
+    List<Map<String, String>> getRecordUser(Integer superviseDetailsId);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistribution.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistribution.java
new file mode 100644
index 0000000..d0a10e9
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistribution.java
@@ -0,0 +1,45 @@
+package com.ruoyi.process.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-15 09:53:20
+ */
+
+@Data
+@TableName("cnas_inconsistent_distribution")
+@ApiModel(value = "InconsistentDistribution瀵硅薄", description = "涓嶇鍚堥」鐨勫垎甯�")
+public class InconsistentDistribution {
+
+    @TableId(value = "distribution_id", type = IdType.AUTO)
+    private Integer distributionId;
+
+    @ApiModelProperty("骞翠唤")
+    private String distributionYear;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java
new file mode 100644
index 0000000..40bb846
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java
@@ -0,0 +1,74 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯冭鎯�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 09:53:33
+ */
+@Data
+@TableName("cnas_inconsistent_distribution_detail")
+@ApiModel(value = "InconsistentDistributionDetail瀵硅薄", description = "涓嶇鍚堥」鐨勫垎甯冭鎯�")
+public class InconsistentDistributionDetail {
+
+    @TableId(value = "distribution_detail_id", type = IdType.AUTO)
+    private Integer distributionDetailId;
+
+    @ApiModelProperty("涓昏〃id")
+    private Integer distributionId;
+
+    @ApiModelProperty("绔犺妭鍙�")
+    private String chapterNumber;
+
+    @ApiModelProperty("瑕佺礌")
+    private String essentials;
+
+    @ApiModelProperty("涓讳换")
+    private Integer director;
+
+    @ApiModelProperty("鎶�鏈礋璐d汉")
+    private Integer technology;
+
+    @ApiModelProperty("璐ㄩ噺璐熻矗浜�")
+    private Integer quality;
+
+    @ApiModelProperty("缁煎悎瀹�")
+    private Integer comprehensive;
+
+    @ApiModelProperty("璇曢獙瀹�")
+    private Integer testing;
+
+    @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;
+
+    @ApiModelProperty("鍚堣")
+    @TableField(select = false,exist = false)
+    private Integer total;
+
+    @ApiModelProperty("鍗犳瘮")
+    @TableField(select = false,exist = false)
+    private BigDecimal proportion;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrder.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrder.java
new file mode 100644
index 0000000..1eec161
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrder.java
@@ -0,0 +1,110 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+@Getter
+@Setter
+@TableName("cnas_inspection_order")
+@ApiModel(value = "InspectionOrder瀵硅薄", description = "妫�楠屽鎵樺崟")
+public class InspectionOrder {
+
+    @TableId(value = "inspection_order_id", type = IdType.AUTO)
+    private Integer inspectionOrderId;
+
+    @ApiModelProperty("鎴愬搧璁㈠崟id")
+    private Integer insOrderId;
+
+    @ApiModelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ApiModelProperty("璇曟牱鍚嶇О")
+    private String sampleName;
+
+    @ApiModelProperty("鍨嬪彿")
+    private String modelNo;
+
+    @ApiModelProperty("鐢熶骇鍗曚綅")
+    private String production;
+
+    @ApiModelProperty("鏍峰搧鏁伴噺")
+    private String quantity;
+
+    @ApiModelProperty("濮旀墭鏃堕棿")
+    private LocalDate commissionDate;
+
+    @ApiModelProperty("濮旀墭鍗曚綅")
+    private String commissionUnit;
+
+    @ApiModelProperty("濮旀墭浜�")
+    private String commissionUser;
+
+    @ApiModelProperty("濮旀墭浜鸿仈绯绘柟寮�")
+    private String commissionPhone;
+
+    @ApiModelProperty("鏍峰搧鐘舵��")
+    private String sampleStatus;
+
+    @ApiModelProperty("鏄惁鐣欐牱1: 鏄�, 2:鍚�")
+    private Integer isLeave;
+
+    @ApiModelProperty("鏍峰搧澶勭悊鏂瑰紡 1锛氬疄楠屽澶勭悊 0锛氬鎵樺崟浣嶅彇鍥�")
+    private Integer processing;
+
+    @ApiModelProperty("绾﹀畾鏃堕棿")
+    private LocalDate appointed;
+
+    @ApiModelProperty("鎶ュ憡鍙戦�佹柟寮� 1锛氳嚜鍙� 0锛氬叾浠�")
+    private Integer send;
+
+    @ApiModelProperty("鍒ゆ柇瑙勫垯 1锛氳�冭檻涓嶇‘瀹氬害 0锛氫笉鑰冭檻涓嶇‘瀹氬害")
+    private Integer criterionRule;
+
+    @ApiModelProperty("鍒ゆ柇瑙勫垯鑰冭檻涓嶇‘瀹氬害澶囨敞")
+    private String criterionRuleRemark;
+
+    @ApiModelProperty("缁煎悎瀹や汉鍛�")
+    private String generalOfficeUser;
+
+    @ApiModelProperty("鎺ユ敹鏃ユ湡")
+    private LocalDate receiptData;
+
+    @ApiModelProperty("棰嗘牱浜哄憳")
+    private String sampleTakerUser;
+
+    @ApiModelProperty("棰嗘牱鏃ユ湡")
+    private LocalDate sampleData;
+
+    @ApiModelProperty("鎶ュ憡鏂囦欢鍦板潃")
+    private String fileUrl;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/InspectionOrderDetail.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrderDetail.java
new file mode 100644
index 0000000..59fcbf5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrderDetail.java
@@ -0,0 +1,62 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟璇︽儏琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+@Getter
+@Setter
+@TableName("cnas_inspection_order_detail")
+@ApiModel(value = "InspectionOrderDetail瀵硅薄", description = "妫�楠屽鎵樺崟璇︽儏琛�")
+public class InspectionOrderDetail {
+
+    @TableId(value = "inspection_order_detail_id", type = IdType.AUTO)
+    private Integer inspectionOrderDetailId;
+
+    @ApiModelProperty("濮旀墭鍗昳d")
+    private Integer inspectionOrderId;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleNumber;
+
+    @ApiModelProperty("璇曢獙椤圭洰")
+    private String testItem;
+
+    @ApiModelProperty("璇曢獙渚濇嵁")
+    private String testStandard;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @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(select = false, exist = false)
+    private Integer index;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessComplain.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessComplain.java
new file mode 100644
index 0000000..0d677e9
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessComplain.java
@@ -0,0 +1,142 @@
+package com.ruoyi.process.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+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-02 09:29:11
+ */
+@Getter
+@Setter
+@TableName("cnas_process_complain")
+@ApiModel(value = "ProcessComplain瀵硅薄", description = "鎶曡瘔")
+public class ProcessComplain  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ExcelIgnore
+    private Integer id;
+
+    @ApiModelProperty("鎶曡瘔缂栧彿")
+    @ExcelIgnore
+    private String complainNo;
+
+    @ApiModelProperty("鎶曡瘔鍚嶇О")
+    @ExcelProperty(value = "鎶曡瘔鍚嶇О")
+    private String complainName;
+
+    @ApiModelProperty("澶栭敭鍏宠仈(妫�娴嬫姤鍛奿d)")
+    @ExcelIgnore
+    private Integer insReportId;
+
+    @ExcelIgnore
+    @TableField(select = false,exist = false)
+    //鐢ㄦ潵鏂板浼犲弬鐨勬姤鍛婄紪鍙�
+    private String code;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    @ExcelIgnore
+    private String sampleCode;
+
+    @ApiModelProperty("鎶曡瘔浜�")
+    @TableField(fill = FieldFill.INSERT)
+    @ExcelIgnore
+    private Integer createUser;
+
+    @ExcelProperty(value = "鎶曡瘔浜�")
+    @TableField(select = false,exist = false)
+    private String complainant;
+
+    @ApiModelProperty("鎶曡瘔鏃ユ湡")
+    @ExcelProperty(value = "鎶曡瘔鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ExcelIgnore
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ExcelIgnore
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鎶曡瘔鏂瑰紡")
+    @ExcelIgnore
+    private String complainMethod;
+
+    @ApiModelProperty("闂璁板綍")
+    @ExcelIgnore
+    private String problemRecords;
+
+    @ApiModelProperty("闂璁板綍-璐ㄩ噺璐熻矗浜�")
+    @ExcelIgnore
+    private Integer problemRecordsUser;
+
+    @ApiModelProperty("闂璁板綍-鏃ユ湡")
+    @ExcelIgnore
+    private LocalDate problemRecordsTime;
+
+    @ApiModelProperty("璐d换褰掑睘鍙婃姇璇夋槸鍚︽垚绔�")
+    @ExcelIgnore
+    private String dutyOwnership;
+
+    @ApiModelProperty("璐d换褰掑睘鍙婃姇璇夋槸鍚︽垚绔媉璐ㄩ噺璐熻矗浜�")
+    @ExcelIgnore
+    private Integer dutyOwnershipUser;
+
+    @ApiModelProperty("璐d换褰掑睘鍙婃姇璇夋槸鍚︽垚绔媉鏃ユ湡")
+    @ExcelIgnore
+    private LocalDate dutyOwnershipTime;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽")
+    @ExcelIgnore
+    private String causeAnalysis;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽_璐d换閮ㄩ棬璐熻矗浜�")
+    @ExcelIgnore
+    private Integer causeAnalysisUser;
+
+    @ApiModelProperty("鍘熷洜鍒嗘瀽_鏃ユ湡")
+    @ExcelIgnore
+    private LocalDate causeAnalysisTime;
+
+    @ApiModelProperty("绾犳鎺柦")
+    @ExcelIgnore
+    private String correctiveAction;
+
+    @ApiModelProperty("绾犳鎺柦_璐d换閮ㄩ棬璐熻矗浜�")
+    @ExcelIgnore
+    private Integer correctiveActionUser;
+
+    @ApiModelProperty("绾犳鎺柦_鏃ユ湡")
+    @ExcelIgnore
+    private LocalDate correctiveActionTime;
+
+    @ApiModelProperty("绾犳鎺柦纭")
+    @ExcelIgnore
+    private String correctiveActionConfirmation;
+
+    @ApiModelProperty("绾犳鎺柦纭_璐ㄩ噺璐熻矗浜�")
+    @ExcelIgnore
+    private Integer correctiveActionConfirmationUser;
+
+    @ApiModelProperty("绾犳鎺柦纭_鏃ユ湡")
+    @ExcelIgnore
+    private LocalDate correctiveActionConfirmationTime;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessDeal.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessDeal.java
new file mode 100644
index 0000000..792f58d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessDeal.java
@@ -0,0 +1,65 @@
+package com.ruoyi.process.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 java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 02:50:19
+ */
+@Getter
+@Setter
+@TableName("cnas_process_deal")
+@ApiModel(value = "ProcessDeal瀵硅薄", description = "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+public class ProcessDeal implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sampleName;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty("渚涙牱鍗曚綅")
+    private String sampleSupplier;
+
+    @ApiModelProperty("鏁伴噺")
+    private Integer num;
+
+    @ApiModelProperty("澶勭悊鏂瑰紡")
+    private String dealMethod;
+
+    @ApiModelProperty("鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate dealTime;
+
+    @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 totaldealId;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessEvaluate.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessEvaluate.java
new file mode 100644
index 0000000..f45d887
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessEvaluate.java
@@ -0,0 +1,74 @@
+package com.ruoyi.process.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+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.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 娴嬮噺涓嶇‘瀹氬害鐨勮瘎浠�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 01:10:43
+ */
+@Getter
+@Setter
+@TableName("cnas_process_evaluate")
+@ApiModel(value = "ProcessEvaluate瀵硅薄", description = "娴嬮噺涓嶇‘瀹氬害鐨勮瘎浠�")
+public class ProcessEvaluate  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ExcelIgnore
+    private Integer id;
+
+    @ApiModelProperty("鎶ュ憡鍚嶇О")
+    @ExcelProperty(value = "鎶ュ憡鍚嶇О")
+    private String reportName;
+
+    @ApiModelProperty("鎶ュ憡璺緞")
+    @ExcelIgnore
+    private String reportUrl;
+
+    @ApiModelProperty("璇勪环浜�")
+    @ExcelIgnore
+    private Integer evaluateUser;
+
+    @TableField(select = false,exist = false)
+    @ExcelProperty(value = "璇勪环浜�")
+    private String evaluateUserName;
+
+    @ApiModelProperty("璇勪环鏃ユ湡")
+    @ExcelProperty(value = "璇勪环鏃ユ湡")
+    private LocalDate evaluateTime;
+
+    @ApiModelProperty("澶囨敞")
+    @ExcelProperty(value = "澶囨敞")
+    private String note;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ExcelIgnore
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ExcelIgnore
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ExcelIgnore
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ExcelIgnore
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java
new file mode 100644
index 0000000..53fbf7e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java
@@ -0,0 +1,70 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯鏌ユ柊
+ *
+ * @author zhuo
+ * @since 2024-11-04
+ */
+@Data
+@TableName("cnas_process_method_search_new")
+@ApiModel(value = "鏍囧噯鏌ユ柊瀵硅薄", description = "鏍囧噯鏌ユ柊琛�")
+public class ProcessMethodSearchNew {
+
+    @TableId(type = IdType.AUTO)
+    private Integer methodSearchNewId;
+
+    @ApiModelProperty("鏍囧噯鏂规硶楠岃瘉id")
+    private Integer verifyId;
+
+    @ApiModelProperty("鏍囧噯鍚嶇О")
+    private String methodName;
+
+    @ApiModelProperty("鏍囧噯鍙�")
+    private String standardNo;
+
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String fileNo;
+
+    @ApiModelProperty("鏄惁鏄柊鏍囧噯, 0鍚�,1鏄�")
+    private Integer isNewStandard;
+
+    @ApiModelProperty("鏂版爣鍑嗗悕绉�")
+    private String newMethodName;
+
+    @ApiModelProperty("鏂版爣鍑嗗彿")
+    private String newStandardNo;
+
+    @ApiModelProperty("鏌ユ柊璁板綍鏉ユ簮, 0,鏍囧噯缃�, 1濮旀墭鎯呮姤, 2鏍囧噯鏁�, 3鍏朵粬")
+    private Integer searchNewSource;
+
+    @ApiModelProperty("澶囨敞,0浣滃簾, 1鏇挎崲")
+    private Integer remark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @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-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewArchived.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewArchived.java
new file mode 100644
index 0000000..0ad1de3
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewArchived.java
@@ -0,0 +1,63 @@
+package com.ruoyi.process.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-12-25 05:28:42
+ */
+@Getter
+@Setter
+@TableName("cnas_process_method_search_new_archived")
+@ApiModel(value = "ProcessMethodSearchNewArchived瀵硅薄", description = "鏍囧噯鏌ユ柊瀛樻。琛�")
+public class ProcessMethodSearchNewArchived implements Serializable {
+
+    @TableId(value = "archived_id", type = IdType.AUTO)
+    private Integer archivedId;
+
+    @ApiModelProperty("瀛樻。鍚嶇О")
+    private String archivedName;
+
+    @ApiModelProperty("缂栧埗浜�")
+    private Integer writeUserId;
+
+    @ApiModelProperty("缂栧埗鏃堕棿")
+    private LocalDateTime writeTime;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer ratifyUserId;
+
+    @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;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewBackups.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewBackups.java
new file mode 100644
index 0000000..27a8c5e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewBackups.java
@@ -0,0 +1,84 @@
+package com.ruoyi.process.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.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏍囧噯鏌ユ柊澶囦唤琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-25 05:29:02
+ */
+@Getter
+@Setter
+@ExcelIgnoreUnannotated
+@TableName("cnas_process_method_search_new_backups")
+@ApiModel(value = "ProcessMethodSearchNewBackups瀵硅薄", description = "鏍囧噯鏌ユ柊澶囦唤琛�")
+public class ProcessMethodSearchNewBackups{
+
+    @TableId(value = "backups_id", type = IdType.AUTO)
+    private Integer backupsId;
+
+    @ApiModelProperty("瀛樻。id")
+    private Integer archivedId;
+
+    @ApiModelProperty("鏍囧噯鏂规硶楠岃瘉id")
+    private Integer verifyId;
+
+    @ExcelProperty(value = {"鏍囧噯鍚嶇О", "鏍囧噯鍚嶇О"}, index = 1)
+    @ApiModelProperty("鏍囧噯鍚嶇О")
+    private String methodName;
+
+    @ExcelProperty(value = {"鏍囧噯鍙�", "鏍囧噯鍙�"}, index = 2)
+    @ApiModelProperty("鏍囧噯鍙�")
+    private String standardNo;
+
+    @ExcelProperty(value = {"鏂囦欢缂栧彿", "鏂囦欢缂栧彿"}, index = 3)
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String fileNo;
+
+    @ApiModelProperty("鏄惁鏄柊鏍囧噯, 0鍚�,1鏄�")
+    private Integer isNewStandard;
+
+    @ExcelProperty(value = {"鏂版爣鍑嗗悕绉�", "鏂版爣鍑嗗悕绉�"}, index = 5)
+    @ApiModelProperty("鏂版爣鍑嗗悕绉�")
+    private String newMethodName;
+
+    @ExcelProperty(value = {"鏂版爣鍑嗗彿", "鏂版爣鍑嗗彿"}, index =6)
+    @ApiModelProperty("鏂版爣鍑嗗彿")
+    private String newStandardNo;
+
+    @ApiModelProperty("鏌ユ柊璁板綍鏉ユ簮, 0,鏍囧噯缃�, 1濮旀墭鎯呮姤, 2鏍囧噯鏁�, 3鍏朵粬")
+    private Integer searchNewSource;
+
+    @ApiModelProperty("澶囨敞,0浣滃簾, 1鏇挎崲")
+    private Integer remark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @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-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerify.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerify.java
new file mode 100644
index 0000000..be995c7
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerify.java
@@ -0,0 +1,133 @@
+package com.ruoyi.process.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-05
+ */
+@Data
+@TableName("cnas_process_method_verify")
+public class ProcessMethodVerify {
+
+    @TableId(type = IdType.AUTO)
+    private Integer methodVerifyId;
+
+    @ApiModelProperty("0鍙樻洿,1楠岃瘉")
+    private Integer operationType;
+
+    @ApiModelProperty("鏍囧噯鏂规硶")
+    private String methodName;
+
+    @ApiModelProperty("楠岃瘉鍘熷洜")
+    private String verifyReason;
+
+    @ApiModelProperty("涓昏鎶�鏈彉鍖�")
+    private String technologyChange;
+
+    @ApiModelProperty("(浜�)鏍囧噯瑕佹眰")
+    private String personRequirements;
+    @ApiModelProperty("(浜�)鍑嗗鎯呭喌")
+    private String personReadiness;
+    @ApiModelProperty("(浜�)鏄惁婊¤冻")
+    private Integer personIsSatisfied;
+    @ApiModelProperty("(浜�)澶囨敞")
+    private String personRemark;
+
+    @ApiModelProperty("(鏈�)鏍囧噯瑕佹眰")
+    private String machineRequirements;
+    @ApiModelProperty("(鏈�)鍑嗗鎯呭喌")
+    private String machineReadiness;
+    @ApiModelProperty("(鏈�)鏄惁婊¤冻")
+    private Integer machineIsSatisfied;
+    @ApiModelProperty("(鏈�)澶囨敞")
+    private String machineRemark;
+
+    @ApiModelProperty("(鏂�)鏍囧噯瑕佹眰")
+    private String materialRequirements;
+    @ApiModelProperty("(鏂�)鍑嗗鎯呭喌")
+    private String materialReadiness;
+    @ApiModelProperty("(鏂�)鏄惁婊¤冻")
+    private Integer materialIsSatisfied;
+    @ApiModelProperty("(鏂�)澶囨敞")
+    private String materialRemark;
+
+    @ApiModelProperty("(娉�)鏍囧噯瑕佹眰")
+    private String methodRequirements;
+    @ApiModelProperty("(娉�)鍑嗗鎯呭喌")
+    private String methodReadiness;
+    @ApiModelProperty("(娉�)鏄惁婊¤冻")
+    private Integer methodIsSatisfied;
+    @ApiModelProperty("(娉�)澶囨敞")
+    private String methodRemark;
+
+    @ApiModelProperty("(鐜�)鏍囧噯瑕佹眰")
+    private String environmentRequirements;
+    @ApiModelProperty("(鐜�)鍑嗗鎯呭喌")
+    private String environmentReadiness;
+    @ApiModelProperty("(鐜�)鏄惁婊¤冻")
+    private Integer environmentIsSatisfied;
+    @ApiModelProperty("(鐜�)澶囨敞")
+    private String environmentRemark;
+
+    @ApiModelProperty("(娴嬮噺婧簮鎬�)鏍囧噯瑕佹眰")
+    private String traceabilityRequirements;
+    @ApiModelProperty("(娴嬮噺婧簮鎬�)鍑嗗鎯呭喌")
+    private String traceabilityReadiness;
+    @ApiModelProperty("(娴嬮噺婧簮鎬�)鏄惁婊¤冻")
+    private Integer traceabilityIsSatisfied;
+    @ApiModelProperty("(娴嬮噺婧簮鎬�)澶囨敞")
+    private String traceabilityRemark;
+
+    @ApiModelProperty("(鏍峰搧绠$悊闇�姹�)鏍囧噯瑕佹眰")
+    private String managementRequirements;
+    @ApiModelProperty("(鏍峰搧绠$悊闇�姹�)鍑嗗鎯呭喌")
+    private String managementReadiness;
+    @ApiModelProperty("(鏍峰搧绠$悊闇�姹�)鏄惁婊¤冻")
+    private Integer managementIsSatisfied;
+    @ApiModelProperty("(鏍峰搧绠$悊闇�姹�)澶囨敞")
+    private String managementRemark;
+
+    @ApiModelProperty("(鍏朵粬)鏍囧噯瑕佹眰")
+    private String otherRequirements;
+    @ApiModelProperty("(鍏朵粬)鍑嗗鎯呭喌")
+    private String otherReadiness;
+    @ApiModelProperty("(鍏朵粬)鏄惁婊¤冻")
+    private Integer otherIsSatisfied;
+    @ApiModelProperty("(鍏朵粬)澶囨敞")
+    private String otherRemark;
+
+    @ApiModelProperty("纭鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime confirmDate;
+
+    @ApiModelProperty("纭浜哄憳")
+    private String confirmUser;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyCalibrationsFile.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyCalibrationsFile.java
new file mode 100644
index 0000000..f216ef8
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyCalibrationsFile.java
@@ -0,0 +1,56 @@
+package com.ruoyi.process.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-12
+ */
+@Data
+@TableName("cnas_process_method_verify_calibrations_file")
+public class ProcessMethodVerifyCalibrationsFile {
+
+    @TableId(type = IdType.AUTO)
+    private Integer calibrationsFileId;
+    @ApiModelProperty("鏂规硶楠岃瘉id")
+    private Integer methodVerifyId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty("璁惧id")
+    private Integer deviceId;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMachineAttachment.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMachineAttachment.java
new file mode 100644
index 0000000..a3ecbdf
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMachineAttachment.java
@@ -0,0 +1,60 @@
+package com.ruoyi.process.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-05
+ */
+@Data
+@TableName("cnas_process_method_verify_machine_attachment")
+public class ProcessMethodVerifyMachineAttachment {
+
+    @TableId(type = IdType.AUTO)
+    private Integer machineAttachmentId;
+
+    @ApiModelProperty("鏂规硶楠岃瘉id")
+    private Integer methodVerifyId;
+
+    @ApiModelProperty("璁惧id")
+    private Integer deviceId;
+
+    @ApiModelProperty("璁惧鍚嶇О")
+    private String machineName;
+
+    @ApiModelProperty("瑙勬牸鍨嬪彿")
+    private String machineSpecification;
+
+    @ApiModelProperty("绛栫暐鑼冨洿")
+    private String machineMeasuringRange;
+
+    @ApiModelProperty("鎵╁睍淇℃伅")
+    private String other;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMethodFile.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMethodFile.java
new file mode 100644
index 0000000..9f4a319
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMethodFile.java
@@ -0,0 +1,54 @@
+package com.ruoyi.process.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-05
+ */
+@Data
+@TableName("cnas_process_method_verify_method_file")
+public class ProcessMethodVerifyMethodFile {
+
+    @TableId(type = IdType.AUTO)
+    private Integer methodFileId;
+
+    @ApiModelProperty("鏂规硶楠岃瘉id")
+    private Integer methodVerifyId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyWorkFile.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyWorkFile.java
new file mode 100644
index 0000000..d021909
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyWorkFile.java
@@ -0,0 +1,59 @@
+package com.ruoyi.process.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-12
+ */
+@Data
+@TableName("cnas_process_method_verify_work_file")
+public class ProcessMethodVerifyWorkFile {
+
+    @TableId(type = IdType.AUTO)
+    private Integer workFileId;
+    @ApiModelProperty("鏂规硶楠岃瘉id")
+    private Integer methodVerifyId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty("鎸佹湁浜篿d")
+    private Integer userId;
+
+    @ApiModelProperty("鎸佹湁浜�")
+    private String userName;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/ProcessReport.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessReport.java
new file mode 100644
index 0000000..9324d5d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessReport.java
@@ -0,0 +1,82 @@
+package com.ruoyi.process.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 java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-05 08:58:39
+ */
+@Getter
+@Setter
+@TableName("cnas_process_report")
+@ApiModel(value = "ProcessReport瀵硅薄", description = "妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃")
+public class ProcessReport  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("妫�楠屾姤鍛婄紪鍙�")
+    private String insReportCode;
+
+    @ApiModelProperty("椤垫暟")
+    private String pages;
+
+    @ApiModelProperty("鍙戦�佷唤鏁�")
+    private String number;
+
+    @ApiModelProperty("鍙戝線浣曞")
+    private String send;
+
+    @ApiModelProperty("鍙戦�佹柟寮�")
+    private String method;
+
+    @ApiModelProperty("鍙戦�佹棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate sendTime;
+
+    @ApiModelProperty("鍙戦�佷汉")
+    private Integer sendUser;
+
+    @TableField(select = false,exist = false)
+    private String sendUserName;
+
+    @ApiModelProperty("绛炬敹浜�")
+    private String signatory;
+
+
+    @TableField(select = false,exist = false)
+    private String signatoryUrl;
+
+    @TableField(select = false,exist = false)
+    private String signatoryName;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSample.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSample.java
new file mode 100644
index 0000000..4fec589
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSample.java
@@ -0,0 +1,79 @@
+package com.ruoyi.process.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-12-12 05:02:49
+ */
+@Getter
+@Setter
+@TableName("cnas_process_sample")
+@ApiModel(value = "ProcessSample瀵硅薄", description = "鏍峰搧鎺ユ敹")
+public class ProcessSample  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sampleName;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty("鏉ユ牱鍗曚綅")
+    private String sampleSupplier;
+
+    @ApiModelProperty("鏍峰搧鏁伴噺")
+    private Integer num;
+
+    @ApiModelProperty("鏍峰搧鐘舵��")
+    private String sampleState;
+
+    @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 totalSampleId;
+
+    @ApiModelProperty("鏀舵牱鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate receiveDate;
+
+    @ApiModelProperty("鐣欐牱鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate leaveDate;
+
+    @ApiModelProperty("閫�鏍风鏀�/澶勭悊鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate dealTime;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotalSample.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotalSample.java
new file mode 100644
index 0000000..ac0c5c8
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotalSample.java
@@ -0,0 +1,77 @@
+package com.ruoyi.process.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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹鎬昏〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-12 05:02:58
+ */
+@Getter
+@Setter
+@TableName("cnas_process_total_sample")
+@ApiModel(value = "ProcessTotalSample瀵硅薄", description = "鏍峰搧鎺ユ敹鎬昏〃")
+public class ProcessTotalSample  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("瀹℃牳浜�")
+    private Integer examineUser;
+
+    @ApiModelProperty("瀹℃牳缁撴灉")
+    private String examineState;
+
+    @ApiModelProperty("瀹℃牳浜虹數瀛愮鍚島rl")
+    private String examineUrl;
+
+
+    @TableField(select = false, exist = false)
+    private String examineUserName;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer ratifyUser;
+
+    @ApiModelProperty("鎵瑰噯缁撴灉")
+    private String ratifyState;
+
+    @ApiModelProperty("鎵瑰噯浜虹數瀛愮鍚島rl")
+    private String ratifyUrl;
+
+    @TableField(select = false, exist = false)
+    private String ratifyUserName;
+
+    @ApiModelProperty("鎻愪氦浜�")
+    private Integer submitUser;
+    @TableField(select = false, exist = false)
+    private String submitUserName;
+
+    @ApiModelProperty("鎻愪氦缁撴灉")
+    private String submitState;
+
+    @ApiModelProperty("鎻愪氦浜虹數瀛愮鍚島rl")
+    private String submitUrl;
+
+    @ApiModelProperty("鎬绘暟閲�")
+    private Integer totalNum;
+
+    @ApiModelProperty("鏈堜唤")
+    private String month;
+
+    @ApiModelProperty("鐢熸垚鐢宠琛ㄧ殑璺緞")
+    private String url;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java
new file mode 100644
index 0000000..ea23a7a
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java
@@ -0,0 +1,78 @@
+package com.ruoyi.process.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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�昏〃(鍘嗗彶)
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 03:59:09
+ */
+@Getter
+@Setter
+@TableName("cnas_process_totaldeal")
+@ApiModel(value = "ProcessTotaldeal瀵硅薄", description = "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�昏〃(鍘嗗彶)")
+public class ProcessTotaldeal  implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("瀹℃牳浜�")
+    private Integer examineUser;
+
+    @ApiModelProperty("瀹℃牳缁撴灉")
+    private String examineState;
+
+    @ApiModelProperty("瀹℃牳浜虹數瀛愮鍚島rl")
+    private String examineUrl;
+
+
+    @TableField(select = false, exist = false)
+    private String examineUserName;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer ratifyUser;
+
+    @ApiModelProperty("鎵瑰噯缁撴灉")
+    private String ratifyState;
+
+    @ApiModelProperty("鎵瑰噯浜虹數瀛愮鍚島rl")
+    private String ratifyUrl;
+
+    @TableField(select = false, exist = false)
+    private String ratifyUserName;
+
+    @ApiModelProperty("鎻愪氦浜�")
+    private Integer submitUser;
+    @TableField(select = false, exist = false)
+    private String submitUserName;
+
+    @ApiModelProperty("鎻愪氦缁撴灉")
+    private String submitState;
+
+    @ApiModelProperty("鎻愪氦浜虹數瀛愮鍚島rl")
+    private String submitUrl;
+
+    @ApiModelProperty("鎬绘暟閲�")
+    private Integer totalNum;
+
+    @ApiModelProperty("鏈堜唤")
+    private String month;
+
+    @ApiModelProperty("鐢熸垚鐢宠琛ㄧ殑璺緞")
+    private String url;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitor.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitor.java
new file mode 100644
index 0000000..c18d60d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitor.java
@@ -0,0 +1,83 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Data
+@TableName("cnas_quality_monitor")
+@ApiModel(value = "QualityMonitor瀵硅薄", description = "璐ㄩ噺鐩戞帶璁″垝涓昏〃")
+public class QualityMonitor {
+
+    @TableId(type = IdType.AUTO)
+    private Integer qualityMonitorId;
+
+    @ApiModelProperty("璁″垝鍚嶇О")
+    private String monitorName;
+
+    @ApiModelProperty("璁″垝骞翠唤")
+    private String monitorYear;
+
+    @ApiModelProperty("澶栭敭锛氱敤鎴穒d锛堢紪鍒朵汉锛�")
+    private Integer writeUserId;
+
+    @ApiModelProperty("缂栧埗鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime writeTime;
+
+    @ApiModelProperty("澶栭敭锛氱敤鎴穒d锛堝鏍镐汉锛�")
+    private Integer examineUserId;
+
+    @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 ratifyUserId;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetails.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetails.java
new file mode 100644
index 0000000..34f0243
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetails.java
@@ -0,0 +1,88 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Data
+@TableName("cnas_quality_monitor_details")
+@ApiModel(value = "QualityMonitorDetails瀵硅薄", description = "璐ㄩ噺鐩戞帶璁″垝璇︽儏琛�")
+public class QualityMonitorDetails {
+
+    @TableId(type = IdType.AUTO)
+    private Integer qualityMonitorDetailsId;
+
+    @ApiModelProperty("鐩戞帶璁″垝id")
+    private Integer qualityMonitorId;
+
+    @ApiModelProperty("鐩戞帶鐩殑")
+    private String monitorPurpose;
+
+    @ApiModelProperty("璁″垝寮�灞曟椂闂�")
+    private String plannedTime;
+
+    @ApiModelProperty("鐩戞帶椤圭洰")
+    private String monitorProject;
+
+    @ApiModelProperty("鍙傚姞浜哄憳")
+    private String participant;
+
+    @ApiModelProperty("棰勭畻")
+    private String budget;
+
+    @ApiModelProperty("缁勭粐浜哄憳")
+    private String organization;
+
+    @ApiModelProperty("鐩戞帶鏂瑰紡")
+    private String monitorWay;
+
+    @ApiModelProperty("瀹屾垚鎶ュ憡鍦板潃")
+    private String finishReportUrl;
+
+    @ApiModelProperty("瀹屾垚鎶ュ憡鎵瑰噯浜�")
+    private Integer ratifyUserId;
+
+    @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;
+
+    // 瀵煎嚭浣跨敤
+    @TableField(select = false, exist = false)
+    private Integer index;
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluate.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluate.java
new file mode 100644
index 0000000..cbffe19
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluate.java
@@ -0,0 +1,88 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Data
+@TableName("cnas_quality_monitor_details_evaluate")
+@ApiModel(value = "QualityMonitorDetailsEvaluate瀵硅薄", description = "璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环琛�")
+public class QualityMonitorDetailsEvaluate {
+
+    @TableId(type = IdType.AUTO)
+    private Integer detailsEvaluateId;
+
+    @ApiModelProperty("鐩戞帶璁″垝璇︽儏id")
+    private Integer qualityMonitorDetailsId;
+
+    @ApiModelProperty("璇勫鐩殑")
+    private String reviewPurpose;
+
+    @ApiModelProperty("璇勫浜哄憳")
+    private String reviewUser;
+
+    @ApiModelProperty("璇勫鏃ユ湡")
+    private String reviewTime;
+
+    @ApiModelProperty("瀹炴柦鎯呭喌")
+    private String implementCondition;
+
+    @ApiModelProperty("瀹炴柦閮ㄩ棬")
+    private String implementDepartment;
+
+    @ApiModelProperty("瀹炴柦缁撴灉")
+    private String implementResult;
+
+    @ApiModelProperty("瀹炴柦鎶�鏈礋璐d汉")
+    private Integer implementUserId;
+
+    @ApiModelProperty("鎵瑰噯缁撹")
+    private String ratifyOpinion;
+
+    @ApiModelProperty("鎵瑰噯鎶�鏈礋璐d汉")
+    private Integer ratifyUserId;
+
+    @ApiModelProperty("鎵瑰噯鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDateTime ratifyTime;
+
+    @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;
+
+    @ApiModelProperty("鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉�")
+    private Integer isFinish;
+
+    @ApiModelProperty("瀹炴柦鎶�鏈礋璐d汉鍚嶇О")
+    @TableField(exist = false,select = false)
+    private String implementName;
+
+    @ApiModelProperty("鎵瑰噯鎶�鏈礋璐d汉鍚嶇О")
+    @TableField(exist = false,select = false)
+    private String ratifyUserName;
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluateFile.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluateFile.java
new file mode 100644
index 0000000..5167aa7
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluateFile.java
@@ -0,0 +1,56 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_monitor_details_evaluate_file")
+@ApiModel(value = "QualityMonitorDetailsEvaluateFile瀵硅薄", description = "璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环闄勪欢琛�")
+public class QualityMonitorDetailsEvaluateFile {
+
+    @TableId(type = IdType.AUTO)
+    private Integer evaluateFileId;
+
+    @ApiModelProperty("璇勪环id")
+    private Integer detailsEvaluateId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsRatify.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsRatify.java
new file mode 100644
index 0000000..bf2e947
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsRatify.java
@@ -0,0 +1,87 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏鎵瑰噯琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Data
+@TableName("cnas_quality_monitor_details_ratify")
+@ApiModel(value = "QualityMonitorDetailsRatify瀵硅薄", description = "璐ㄩ噺鐩戞帶璁″垝璇︽儏鎵瑰噯琛�")
+public class QualityMonitorDetailsRatify {
+
+    @TableId(type = IdType.AUTO)
+    private Integer detailsRatifyId;
+
+    @ApiModelProperty("鐩戞帶璁″垝璇︽儏id")
+    private Integer qualityMonitorDetailsId;
+
+    @ApiModelProperty("鐩戞帶椤圭洰")
+    private String monitorProject;
+
+    @ApiModelProperty("鐩戞帶鐩殑")
+    private String monitorPurpose;
+
+    @ApiModelProperty("鐩戞帶鏃堕棿")
+    private String monitorData;
+
+    @ApiModelProperty("鐩戞帶鏂规硶")
+    private String monitorMethod;
+
+    @ApiModelProperty("鍙傚姞浜哄憳")
+    private String participant;
+
+    @ApiModelProperty("杩囩▼鎺у埗")
+    private String processControl;
+
+    @ApiModelProperty("濡備綍璇勪环")
+    private String howEvaluate;
+
+    @ApiModelProperty("棰勭畻")
+    private String budget;
+
+    @ApiModelProperty("妫�娴嬮儴闂�")
+    private String inspectionDepartment;
+
+    @ApiModelProperty("鎵瑰噯鎰忚")
+    private String ratifyOpinion;
+
+    @ApiModelProperty("鎶�鏈礋璐d汉")
+    private Integer ratifyUserId;
+
+    @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;
+
+    @ApiModelProperty("鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉�")
+    private Integer isFinish;
+
+    @ApiModelProperty("鎶�鏈礋璐d汉")
+    @TableField(exist = false,select = false)
+    private String ratifyName;
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySupervise.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySupervise.java
new file mode 100644
index 0000000..90a0d07
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySupervise.java
@@ -0,0 +1,81 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise")
+@ApiModel(value = "QualitySupervise瀵硅薄", description = "璐ㄩ噺鐩戠潱涓昏〃")
+public class QualitySupervise {
+
+    @TableId(type = IdType.AUTO)
+    private Integer superviseId;
+
+    @ApiModelProperty("鐩戠潱鍚嶇О")
+    private String superviseName;
+
+    @ApiModelProperty("骞翠唤")
+    private String superviseYear;
+
+    @ApiModelProperty("鐩戠潱浜篿d(澶氫釜)")
+    private String recordUserIds;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetails.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetails.java
new file mode 100644
index 0000000..045505e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetails.java
@@ -0,0 +1,78 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise_details")
+@ApiModel(value = "QualitySuperviseDetails瀵硅薄", description = "璐ㄩ噺鐩戠潱璇︽儏琛�")
+public class QualitySuperviseDetails {
+
+    @TableId(type = IdType.AUTO)
+    private Integer superviseDetailsId;
+
+    @ApiModelProperty("鐩戠潱璁″垝id")
+    private Integer superviseId;
+
+    @ApiModelProperty("鐩戠潱鏃ユ湡")
+    private String superviseTime;
+
+    @ApiModelProperty("鐩戠潱鐩殑")
+    private String supervisePurpose;
+
+    @ApiModelProperty("鐩戠潱椤圭洰")
+    private String superviseProject;
+
+    @ApiModelProperty("琚洃鐫d汉id")
+    private Integer supervisedUserId;
+
+    @ApiModelProperty("琚洃鐫d汉")
+    private String supervisee;
+
+    @ApiModelProperty("鐩戠潱鍘熷洜")
+    private String superviseReason;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鐩戠潱鍛榠d")
+    private Integer recordUserId;
+
+    @ApiModelProperty("鐩戠潱鍛樺悕绉�")
+    private Integer recordUserName;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsAccording.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsAccording.java
new file mode 100644
index 0000000..702b985
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsAccording.java
@@ -0,0 +1,144 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏涓嶇鍚堥」鎺у埗琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise_details_according")
+@ApiModel(value = "QualitySuperviseDetailsAccording瀵硅薄", description = "璐ㄩ噺鐩戠潱璇︽儏涓嶇鍚堥」鎺у埗琛�")
+public class QualitySuperviseDetailsAccording {
+
+    @TableId(type = IdType.AUTO)
+    private Integer superviseDetailsAccordingId;
+
+    @ApiModelProperty("鐩戠潱璇︽儏id")
+    private Integer superviseDetailsId;
+
+    @ApiModelProperty("0鍙戠敓閮ㄩ棬")
+    private String occurrenceDepartment;
+
+    @ApiModelProperty("0閮ㄩ棬璐熻矗浜�")
+    private String headDepartment;
+
+    @ApiModelProperty("0鍙戠幇閫斿緞,0:绠$悊璇勫,1:鍐呴儴瀹℃牳,2:妫�娴嬭繃绋嬫帶鍒�,3:鍐呴儴璐ㄩ噺鎺у埗,4:鍐呴儴鐩戠潱,5:澶栭儴璇勫,6:澶栭儴鎶曡瘔,7:鍏朵粬")
+    private Integer findWay;
+
+    @ApiModelProperty("0涓嶇鍚堣褰曡鎯�")
+    private String recordDetail;
+
+    @ApiModelProperty("0涓嶅悎鏍艰褰曚緷鎹�")
+    private String recordAccording;
+
+    @ApiModelProperty("0鍙戠幇閮ㄩ棬")
+    private String foundDepartment;
+
+    @ApiModelProperty("0璁板綍浜篿d")
+    private Integer recordUserId;
+
+    @ApiModelProperty("0璁板綍浜�")
+    private String recordUserName;
+
+    @ApiModelProperty("0璁板綍鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate recordTime;
+
+    @ApiModelProperty("0琚洃鐫d汉id")
+    private Integer supervisedUserId;
+
+    @ApiModelProperty("0琚洃鐫d汉")
+    private String supervisedUserName;
+
+    @ApiModelProperty("0琚洃鐫f椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate supervisedTime;
+
+    @ApiModelProperty("1娓呴櫎涓嶇鍚堟帾鏂�")
+    private String eliminateMeasure;
+
+    @ApiModelProperty("1璐d换閮ㄩ棬")
+    private String responsibleDepartment;
+
+    @ApiModelProperty("1澶勭悊浜篿d")
+    private Integer actionsUserId;
+
+    @ApiModelProperty("1澶勭悊浜�")
+    private String actionsUserName;
+
+    @ApiModelProperty("1澶勭悊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate actionsTime;
+
+    @ApiModelProperty("2绾犳鎺柦鍐呭")
+    private String correctContent;
+
+    @ApiModelProperty("2鏄惁绾犳澶勭悊, 0鍚�, 1鏄�")
+    private Integer isCorrect;
+
+    @ApiModelProperty("2绾犳鎶�鏈礋璐d汉id")
+    private Integer correctUserId;
+
+    @ApiModelProperty("2绾犳鎶�鏈礋璐d汉")
+    private String correctUserName;
+
+    @ApiModelProperty("2绾犳濉啓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate correctTime;
+
+    @ApiModelProperty("3鏄惁閫氱煡瀹㈡埛, 0鍚�, 1鏄�")
+    private Integer notifyCustomer;
+
+    @ApiModelProperty("3鏄惁鎭㈠宸ヤ綔, 0鍚�, 1鏄�")
+    private Integer backToWork;
+
+    @ApiModelProperty("3璐ㄩ噺璐熻矗浜篿d")
+    private Integer qualityManagerUserId;
+
+    @ApiModelProperty("3璐ㄩ噺璐熻矗浜�")
+    private String qualityManagerUserName;
+
+    @ApiModelProperty("3璐ㄩ噺璐熻矗浜哄~鍐欐椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate qualityManagerTime;
+
+    @ApiModelProperty("鏄惁缁撴潫,0: 鏈粨鏉�, 1:缁撴潫")
+    private Integer isFinish;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer approverUserId;
+
+    @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(exist = false,select = false)
+    @ApiModelProperty("娴佺▼, 0:涓嶇鍚堝伐浣滄儏鍐佃褰�, 1澶勭悊鎺柦, 2:绾犳鎺柦, 3:鏄惁閫氱煡瀹㈡埛鍙仮澶嶅伐浣�")
+    private Integer flowType;
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrect.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrect.java
new file mode 100644
index 0000000..7ea95a1
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrect.java
@@ -0,0 +1,132 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏绾犳澶勭悊琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise_details_correct")
+@ApiModel(value = "QualitySuperviseDetailsCorrect瀵硅薄", description = "璐ㄩ噺鐩戠潱璇︽儏绾犳澶勭悊琛�")
+public class QualitySuperviseDetailsCorrect {
+
+    @TableId(type = IdType.AUTO)
+    private Integer superviseDetailsCorrectId;
+
+    @ApiModelProperty("鐩戠潱璇︽儏id")
+    private Integer superviseDetailsId;
+
+    @ApiModelProperty("浜哄憳鍩硅璇︽儏Id")
+    private Integer personTrainingDetailedId;
+
+    @ApiModelProperty("0涓嶅悎鏍兼弿杩�")
+    private String raiseResult;
+
+    @ApiModelProperty("0vde涓撳鍙戠幇")
+    private String vdeRaiseResult;
+
+    @ApiModelProperty("0鎻愬嚭閮ㄩ棬")
+    private String raiseDepartment;
+
+    @ApiModelProperty("0鎻愬嚭浜篿d")
+    private Integer raiseUserId;
+
+    @ApiModelProperty("0鎻愬嚭浜�")
+    private String raiseUserName;
+
+    @ApiModelProperty("0鎻愬嚭鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate raiseTime;
+
+    @ApiModelProperty("1鍘熷洜鍒嗘瀽")
+    private String causeResult;
+
+    @ApiModelProperty("1鍘熷洜鍒嗘瀽璐d换閮ㄩ棬")
+    private String causeDepartment;
+
+    @ApiModelProperty("1鍘熷洜鍒嗘瀽浜篿d")
+    private Integer causeUserId;
+
+    @ApiModelProperty("1鍘熷洜鍒嗘瀽浜�")
+    private String causeUserName;
+
+    @ApiModelProperty("1鍘熷洜鍒嗘瀽鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate causeTime;
+
+    @ApiModelProperty("2绾犳鎺柦")
+    private String correctResult;
+
+    @ApiModelProperty("2鎻愬嚭閮ㄩ棬纭")
+    private String raiseDepartmentAffirm;
+
+    @ApiModelProperty("2绾犳璐d换閮ㄩ棬")
+    private String correctDepartment;
+
+    @ApiModelProperty("2绾犳浜篿d")
+    private Integer correctUserId;
+
+    @ApiModelProperty("2绾犳浜�")
+    private String correctUserName;
+
+    @ApiModelProperty("2绾犳鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate correctTime;
+
+    @ApiModelProperty("3楠岃瘉缁撴灉")
+    private String validationResult;
+
+    @ApiModelProperty("3楠岃瘉閮ㄩ棬")
+    private String validationDepartment;
+
+    @ApiModelProperty("3楠岃瘉浜篿d")
+    private Integer validationUserId;
+
+    @ApiModelProperty("3楠岃瘉浜�")
+    private String validationUserName;
+
+    @ApiModelProperty("3楠岃瘉鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate validationTime;
+
+    @ApiModelProperty("鏄惁缁撴潫, 0: 鏈粨鏉�, 1:宸茬粨鏉�")
+    private Integer isFinish;
+
+    @ApiModelProperty("鎵瑰噯浜�")
+    private Integer approverUserId;
+
+    @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(exist = false,select = false)
+    @ApiModelProperty("娴佺▼, 0:涓嶅悎鏍兼彁鍑�, 1:鍘熷洜鍒嗘瀽, 2:绾犳鎺柦, 3:楠岃瘉缁撴灉")
+    private Integer flowType;
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrectFile.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrectFile.java
new file mode 100644
index 0000000..1f32b74
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrectFile.java
@@ -0,0 +1,56 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏绾犳鎺柦闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Data
+@TableName("cnas_quality_supervise_details_correct_file")
+@ApiModel(value = "QualitySuperviseDetailsCorrectFile瀵硅薄", description = "璐ㄩ噺鐩戠潱璇︽儏绾犳鎺柦闄勪欢琛�")
+public class QualitySuperviseDetailsCorrectFile {
+
+    @TableId(type = IdType.AUTO)
+    private Integer superviseDetailsCorrectFileId;
+
+    @ApiModelProperty("鐩戠潱璇︽儏绾犳鎺柦id")
+    private Integer superviseDetailsCorrectId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @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-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsRecord.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsRecord.java
new file mode 100644
index 0000000..888467f
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsRecord.java
@@ -0,0 +1,118 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏璁板綍琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise_details_record")
+@ApiModel(value = "QualitySuperviseDetailsRecord瀵硅薄", description = "璐ㄩ噺鐩戠潱璇︽儏璁板綍琛�")
+public class QualitySuperviseDetailsRecord {
+
+    @TableId(type = IdType.AUTO)
+    private Integer superviseDetailsRecordId;
+
+    @ApiModelProperty("鐩戠潱璇︽儏id")
+    private Integer superviseDetailsId;
+
+    @ApiModelProperty("妫�娴嬩汉鍛�")
+    private String testMember;
+
+    @ApiModelProperty("鐩戠潱鍛�")
+    private String supervisor;
+
+    @ApiModelProperty("妫�娴嬮」鐩�")
+    private String testItem;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleNumber;
+
+    @ApiModelProperty("妫�娴嬫棩鏈�")
+    private String testDate;
+
+    @ApiModelProperty("妫�娴嬭繃绋�")
+    private String testingProcess;
+
+    @ApiModelProperty("鎯呭喌璁板綍")
+    private String caseReload;
+
+    @ApiModelProperty("浜哄憳")
+    private String personnel;
+
+    @ApiModelProperty("浠櫒璁惧")
+    private String device;
+
+    @ApiModelProperty("鐜")
+    private String environment;
+
+    @ApiModelProperty("鏍峰搧閲囬泦")
+    private String sampleCollection;
+
+    @ApiModelProperty("鏍峰搧鍑嗗")
+    private String samplePreparation;
+
+    @ApiModelProperty("妫�娴嬫柟娉�")
+    private String detectionMethod;
+
+    @ApiModelProperty("妫�娴嬭褰�")
+    private String inspectionRecord;
+
+    @ApiModelProperty("妫�娴嬫姤鍛�")
+    private String examiningReport;
+
+    @ApiModelProperty("鐩戠潱鎯呭喌璇勪环")
+    private String supervisionEvaluation;
+
+    @ApiModelProperty("涓嶅悎鏍煎鐞嗘剰瑙�")
+    private String handlingAdvice;
+
+    @ApiModelProperty("鎵瑰噯缁撹")
+    private String ratifyOpinion;
+
+    @ApiModelProperty("鎵瑰噯鎶�鏈礋璐d汉")
+    private Integer ratifyUserId;
+
+    @ApiModelProperty("鎵瑰噯鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDateTime ratifyTime;
+
+    @ApiModelProperty("鏄惁绗﹀悎,0 涓嶇鍚�, 1绗﹀悎")
+    private Integer isAccording;
+
+    @ApiModelProperty("鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉�")
+    private Integer isFinish;
+
+    @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;
+
+    @ApiModelProperty("鎵瑰噯鎶�鏈礋璐d汉")
+    @TableField(exist = false,select = false)
+    private String ratifyUserName;
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/schedule/ProcessTotaldealSchedule.java b/cnas-process/src/main/java/com/ruoyi/process/schedule/ProcessTotaldealSchedule.java
new file mode 100644
index 0000000..a99b6df
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/schedule/ProcessTotaldealSchedule.java
@@ -0,0 +1,37 @@
+package com.ruoyi.process.schedule;
+
+import com.ruoyi.process.pojo.ProcessTotalSample;
+import com.ruoyi.process.pojo.ProcessTotaldeal;
+import com.ruoyi.process.service.ProcessTotalSampleService;
+import com.ruoyi.process.service.ProcessTotaldealService;
+import org.springframework.beans.BeanUtils;
+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 ProcessTotaldealSchedule {
+
+    @Resource
+    private ProcessTotaldealService processTotaldealService;
+
+    @Resource
+    private ProcessTotalSampleService processTotalSampleService;
+
+    @Scheduled(cron = "0 0 2 1 * ?") //姣忔湀1鍙�2鐐�
+    public void processTotaldeal() {
+        ProcessTotaldeal processTotaldeal = new ProcessTotaldeal();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        Calendar calendar = Calendar.getInstance();
+        String formattedDate = sdf.format(calendar.getTime());
+        processTotaldeal.setMonth(formattedDate);
+        processTotaldeal.setSubmitState("寰呮彁浜�");
+        processTotaldealService.save(processTotaldeal);
+        ProcessTotalSample processTotalSample = new ProcessTotalSample();
+        BeanUtils.copyProperties(processTotaldeal,processTotalSample);
+        processTotalSampleService.save(processTotalSample);
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionDetailService.java b/cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionDetailService.java
new file mode 100644
index 0000000..eb5292c
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.InconsistentDistributionDetail;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯冭鎯� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 09:53:33
+ */
+public interface InconsistentDistributionDetailService extends IService<InconsistentDistributionDetail> {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionService.java b/cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionService.java
new file mode 100644
index 0000000..f457c88
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionService.java
@@ -0,0 +1,64 @@
+package com.ruoyi.process.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.process.dto.InconsistentDistributionDto;
+import com.ruoyi.process.pojo.InconsistentDistribution;
+
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 09:53:20
+ */
+public interface InconsistentDistributionService extends IService<InconsistentDistribution> {
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冨垎椤垫煡璇�
+     * @param page
+     * @param inconsistentDistribution
+     * @return
+     */
+    IPage<InconsistentDistributionDto> pageInconsistentDistribution(Page page, InconsistentDistribution inconsistentDistribution);
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冩柊澧�
+     * @param inconsistentDistribution
+     * @return
+     */
+    boolean addInconsistentDistribution(InconsistentDistributionDto inconsistentDistribution);
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冧慨鏀�
+     * @param inconsistentDistribution
+     * @return
+     */
+    boolean updateInconsistentDistribution(InconsistentDistributionDto inconsistentDistribution);
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冨垹闄�
+     * @param distributionId
+     * @return
+     */
+    boolean delInconsistentDistribution(Integer distributionId);
+
+    /**
+     * 涓嶇鍚堥」鐨勫垎甯冩煡鐪嬭鎯�
+     * @param distributionId
+     * @return
+     */
+    InconsistentDistributionDto getInconsistentDistributionOne(Integer distributionId);
+
+    /**
+     * 瀵煎嚭涓嶇鍚堥」鐨勫垎甯�
+     * @param distributionId
+     * @param response
+     */
+    void exportInconsistentDistribution(Integer distributionId, HttpServletResponse response);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderDetailService.java b/cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderDetailService.java
new file mode 100644
index 0000000..784a5e5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.InspectionOrderDetail;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+public interface InspectionOrderDetailService extends IService<InspectionOrderDetail> {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderService.java b/cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderService.java
new file mode 100644
index 0000000..19c0809
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderService.java
@@ -0,0 +1,86 @@
+package com.ruoyi.process.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.InsOrder;
+import com.ruoyi.process.dto.InspectionOrderDto;
+import com.ruoyi.process.pojo.InspectionOrder;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+public interface InspectionOrderService extends IService<InspectionOrder> {
+
+    /**
+     * 妫�楠屽鎵樺崟鍒嗛〉鏌ヨ
+     * @param page
+     * @param inspectionOrder
+     * @return
+     */
+    IPage<InspectionOrderDto> pageInspectionOrder(Page page, InspectionOrder inspectionOrder);
+
+    /**
+     * 妫�楠屽鎵樺崟鏂板
+     * @param InspectionOrder
+     * @return
+     */
+    boolean addInspectionOrder(InspectionOrderDto InspectionOrder);
+
+    /**
+     * 妫�楠屽鎵樺崟淇敼
+     * @param InspectionOrder
+     * @return
+     */
+    boolean updateInspectionOrder(InspectionOrderDto InspectionOrder);
+
+    /**
+     * 妫�楠屽鎵樺崟鍒犻櫎
+     * @param inspectionOrderId
+     * @return
+     */
+    boolean delInspectionOrder(Integer inspectionOrderId);
+
+    /**
+     * 妫�楠屽鎵樺崟鏌ョ湅璇︽儏
+     * @param inspectionOrderId
+     * @return
+     */
+    InspectionOrderDto getInspectionOrderOne(Integer inspectionOrderId);
+
+    /**
+     * 鏍规嵁鎴愬搧璁㈠崟id鏌ヨ濮旀墭鍗曚俊鎭�
+     * @param insOrderId
+     * @return
+     */
+    InspectionOrderDto getInspectionOrderByInsOderId(Integer insOrderId);
+
+    /**
+     * 濮旀墭鍗曟煡璇㈡垚鍝佽鍗�
+     * @return
+     */
+    IPage<InsOrder> getInsOrderOnInspection(Page page, InsOrder insOrder);
+
+    /**
+     * 濮旀墭鍗曟垚鍝佹姤鍛婁笂浼�
+     * @param file
+     * @param inspectionOrderId
+     * @return
+     */
+    boolean uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId);
+
+    /**
+     * 瀵煎嚭妫�楠屽鎵樺崟
+     * @param inspectionOrderId
+     * @param response
+     */
+    void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessComplainService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessComplainService.java
new file mode 100644
index 0000000..2f05571
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessComplainService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.process.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.process.dto.ProcessComplainDto;
+import com.ruoyi.process.pojo.ProcessComplain;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鎶曡瘔 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 09:29:11
+ */
+public interface ProcessComplainService extends IService<ProcessComplain> {
+
+    IPage<ProcessComplain> pageProcessComplain(Page page, ProcessComplain processComplain);
+
+    int addProcessComplain(ProcessComplain processComplain);
+
+    ProcessComplainDto getProcessComplain(Long id);
+
+    int doProcessComplain(ProcessComplain processComplain);
+
+    void exportProcessComplain(ProcessComplain processComplain, HttpServletResponse response) throws Exception;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessDealService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessDealService.java
new file mode 100644
index 0000000..6029ae5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessDealService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.process.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.process.pojo.ProcessDeal;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 02:50:19
+ */
+public interface ProcessDealService extends IService<ProcessDeal> {
+
+    IPage<ProcessDeal> pageProcessDeal(Page page, ProcessDeal processDeal);
+
+    int addProcessDeal(ProcessDeal processDeal);
+
+    int delProcessDeal(Integer id);
+
+    int doProcessDeal(ProcessDeal processDeal);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessEvaluateService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessEvaluateService.java
new file mode 100644
index 0000000..5d3cc83
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessEvaluateService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.process.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.process.pojo.ProcessEvaluate;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 娴嬮噺涓嶇‘瀹氬害鐨勮瘎浠� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 01:10:43
+ */
+public interface ProcessEvaluateService extends IService<ProcessEvaluate> {
+
+    IPage<ProcessEvaluate> pageProcessEvaluate(Page page, ProcessEvaluate processEvaluate);
+
+    int addProcessEvaluate(MultipartFile file);
+
+    int doProcessEvaluate(ProcessEvaluate processEvaluate);
+
+    void exportProcessEvaluate(ProcessEvaluate processEvaluate, HttpServletResponse response) throws Exception;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewArchivedService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewArchivedService.java
new file mode 100644
index 0000000..3c7391b
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewArchivedService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
+
+/**
+ * <p>
+ * 鏍囧噯鏌ユ柊瀛樻。琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-25 05:28:42
+ */
+public interface ProcessMethodSearchNewArchivedService extends IService<ProcessMethodSearchNewArchived> {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewBackupsService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewBackupsService.java
new file mode 100644
index 0000000..0fdb93e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewBackupsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
+
+/**
+ * <p>
+ * 鏍囧噯鏌ユ柊澶囦唤琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-25 05:29:02
+ */
+public interface ProcessMethodSearchNewBackupsService extends IService<ProcessMethodSearchNewBackups> {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java
new file mode 100644
index 0000000..b52f917
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java
@@ -0,0 +1,82 @@
+package com.ruoyi.process.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.process.dto.ProcessMethodSearchNewArchivedDto;
+import com.ruoyi.process.dto.ProcessMethodSearchNewBackupsDto;
+import com.ruoyi.process.pojo.ProcessMethodSearchNew;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鏍囧噯鏌ユ柊
+ *
+ * @author zhuo
+ * @since 2024-11-04
+ */
+public interface ProcessMethodSearchNewService extends IService<ProcessMethodSearchNew> {
+
+    /**
+     * 鏂板鏍囧噯鏌ユ柊
+     * @param processMethodSearchNewList
+     * @return
+     */
+    boolean addMethodSearchNew(List<ProcessMethodSearchNew> processMethodSearchNewList);
+
+    /**
+     * 鏍囧噯鏌ユ柊鍒楄〃
+     * @param processMethodSearchNew
+     * @return
+     */
+    IPage<ProcessMethodSearchNew> pageMethodSearchNew(Page page, ProcessMethodSearchNewBackupsDto processMethodSearchNew);
+
+    /**
+     * 鏍囧噯鏌ユ柊瀵煎嚭
+     * @param archivedId
+     * @param response
+     */
+    void exportMethodSearchNew(Integer archivedId, HttpServletResponse response);
+
+    /**
+     * 瀵煎叆鏍囧噯鏌ユ柊
+     * @param file
+     * @return
+     */
+    boolean importMethodSearchNew(MultipartFile file);
+
+    /**
+     * 鏂板鏍囧噯鏌ユ柊瀹℃壒娴佺▼
+     * @param archived
+     * @return
+     */
+    boolean addSearchNewArchived(ProcessMethodSearchNewArchived archived);
+
+    /**
+     * 鏌ヨ瀛樻。
+     * @param page
+     * @param archived
+     * @return
+     */
+    IPage<ProcessMethodSearchNewArchivedDto> pageSearchNewArchived(Page page, ProcessMethodSearchNewArchivedDto archived);
+
+    /**
+     * 鏌ヨ瀛樻。澶囦唤鍒楄〃
+     * @param page
+     * @param backups
+     * @return
+     */
+    IPage<ProcessMethodSearchNewBackups> pageSearchNewBackups(Page page, ProcessMethodSearchNewBackups backups);
+
+    /**
+     * 瀛樻。鎵瑰噯
+     * @param archived
+     * @return
+     */
+    boolean ratifySearchNewArchivedr(ProcessMethodSearchNewArchived archived);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyCalibrationsFileService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyCalibrationsFileService.java
new file mode 100644
index 0000000..76e60e0
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyCalibrationsFileService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.ProcessMethodVerifyCalibrationsFile;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉璁惧鏍″噯闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-12
+ */
+public interface ProcessMethodVerifyCalibrationsFileService extends IService<ProcessMethodVerifyCalibrationsFile> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMachineAttachmentService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMachineAttachmentService.java
new file mode 100644
index 0000000..dfc9c5e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMachineAttachmentService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMachineAttachment;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉璁惧闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+public interface ProcessMethodVerifyMachineAttachmentService extends IService<ProcessMethodVerifyMachineAttachment> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMethodFileService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMethodFileService.java
new file mode 100644
index 0000000..5d0bbab
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMethodFileService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉(娉�)闄勪欢琛�(CnasProcessMethodVerifyMethodFile)$desc
+ *
+ * @author makejava
+ * @since 2024-11-05 10:52:44
+ */
+public interface ProcessMethodVerifyMethodFileService extends IService<ProcessMethodVerifyMethodFile> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyService.java
new file mode 100644
index 0000000..bbbbfdb
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyService.java
@@ -0,0 +1,87 @@
+package com.ruoyi.process.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.process.dto.ProcessMethodVerifyDto;
+import com.ruoyi.process.pojo.ProcessMethodVerify;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+public interface ProcessMethodVerifyService extends IService<ProcessMethodVerify> {
+
+    /**
+     * 鏍囧噯鏂规硶璺熸柊楠岃瘉鍒楄〃
+     * @param page
+     * @param methodVerifyDto
+     * @return
+     */
+    IPage<ProcessMethodVerify> pagesMethodVerify(Page page, ProcessMethodVerifyDto methodVerifyDto);
+
+    /**
+     * 鏂板鏍囧噯鏂规硶楠岃瘉
+     * @param methodVerifyDto
+     * @return
+     */
+    boolean addMethodSearchNew(ProcessMethodVerifyDto methodVerifyDto);
+
+    /**
+     * 鏌ヨ鏍囧噯鏂规硶楠岃瘉璇︽儏
+     * @param methodVerifyId
+     * @return
+     */
+    ProcessMethodVerifyDto getMethodVerifyOne(Integer methodVerifyId);
+
+    /**
+     * 淇敼鏍囧噯鏂规硶楠岃瘉
+     * @param methodVerifyDto
+     * @return
+     */
+    boolean updateMethodVerify(ProcessMethodVerifyDto methodVerifyDto);
+
+    /**
+     * 鍒犻櫎鏍囧噯鏂规硶楠岃瘉
+     * @param methodVerifyId
+     * @return
+     */
+    boolean delMethodVerify(Integer methodVerifyId);
+
+    /**
+     * 鏍囧噯鏂规硶楠岃瘉纭
+     * @param methodVerifyId
+     * @return
+     */
+    boolean methodVerifyAffirm(Integer methodVerifyId);
+
+    /**
+     * 鏍囧噯鏂规硶楠岃瘉鏂板鍘熷璁板綍
+     * @param methodVerifyId
+     * @param file
+     * @return
+     */
+    boolean uploadVerifyMethodFile(Integer methodVerifyId, MultipartFile file);
+
+    /**
+     * 鏍囧噯鏂规硶鏇存柊楠岃瘉鍘熷璁板綍鍒楄〃
+     * @return
+     */
+    List<ProcessMethodVerifyMethodFile> getVerifyMethodFileList(Integer methodVerifyId);
+
+    /**
+     * 瀵煎嚭鏍囧噯鏂规硶鏇存柊楠岃瘉
+     *
+     * @param methodVerifyId 鏍囧噯鏂规硶楠岃瘉id
+     * @param response
+     */
+    void exportMethodVerify(Integer methodVerifyId, HttpServletResponse response);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyWorkFileService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyWorkFileService.java
new file mode 100644
index 0000000..6d6b04f
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyWorkFileService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.ProcessMethodVerifyWorkFile;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉涓婂矖璇侀檮浠惰〃
+ *
+ * @author zhuo
+ * @since 2024-11-12
+ */
+public interface ProcessMethodVerifyWorkFileService extends IService<ProcessMethodVerifyWorkFile> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessReportService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessReportService.java
new file mode 100644
index 0000000..610444e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessReportService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.process.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.process.pojo.ProcessReport;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-05 08:58:39
+ */
+public interface ProcessReportService extends IService<ProcessReport> {
+
+    IPage<ProcessReport> pageProcessReport(Page page, ProcessReport processReport);
+
+    String exportProcessReport(List<Integer> ids);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessSampleService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessSampleService.java
new file mode 100644
index 0000000..5f5d922
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessSampleService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.process.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.process.pojo.ProcessSample;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-12 05:02:49
+ */
+public interface ProcessSampleService extends IService<ProcessSample> {
+
+    IPage<ProcessSample> pageProcessSample(Page page, ProcessSample processSample);
+
+    int addProcessSample(ProcessSample processSample);
+
+    int delProcessSample(Integer id);
+
+    int doProcessSample(ProcessSample processSample);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotalSampleService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotalSampleService.java
new file mode 100644
index 0000000..af83741
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotalSampleService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.process.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.process.pojo.ProcessTotalSample;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹鎬昏〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-12 05:02:58
+ */
+public interface ProcessTotalSampleService extends IService<ProcessTotalSample> {
+
+    IPage<ProcessTotalSample> pageProcessTotalSample(Page page, ProcessTotalSample processTotalSample);
+
+    int submitProcessTotalSample(Integer id);
+
+    int checkProcessTotalSample(Integer id, String state);
+
+    int ratifyProcessTotalSample(Integer id, String state);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotaldealService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotaldealService.java
new file mode 100644
index 0000000..918e32f
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotaldealService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.process.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.process.pojo.ProcessTotaldeal;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�昏〃(鍘嗗彶) 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 03:59:09
+ */
+public interface ProcessTotaldealService extends IService<ProcessTotaldeal> {
+
+    IPage<ProcessTotaldeal> pageProcessTotaldeal(Page page, ProcessTotaldeal processTotaldeal);
+
+    int checkProcessTotaldeal(Integer id, String state);
+
+    int submitProcessTotaldeal(Integer id);
+
+    int ratifyProcessTotaldeal(Integer id, String state);
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsEvaluateService.java b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsEvaluateService.java
new file mode 100644
index 0000000..6f6b47d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsEvaluateService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.QualityMonitorDetailsEvaluate;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+public interface QualityMonitorDetailsEvaluateService extends IService<QualityMonitorDetailsEvaluate> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsRatifyService.java b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsRatifyService.java
new file mode 100644
index 0000000..8596cf2
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsRatifyService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.QualityMonitorDetailsRatify;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏鎵瑰噯琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+public interface QualityMonitorDetailsRatifyService extends IService<QualityMonitorDetailsRatify> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsService.java b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsService.java
new file mode 100644
index 0000000..f3968e8
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.QualityMonitorDetails;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+public interface QualityMonitorDetailsService extends IService<QualityMonitorDetails> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java
new file mode 100644
index 0000000..8bd261e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java
@@ -0,0 +1,160 @@
+package com.ruoyi.process.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.process.dto.QualityMonitorDto;
+import com.ruoyi.process.pojo.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+public interface QualityMonitorService extends IService<QualityMonitor> {
+
+    /**
+     * 瀵煎叆鐩戞帶璁″垝
+     * @param file
+     * @return
+     */
+    boolean importQualityMonitor(MultipartFile file, QualityMonitor qualityMonitor);
+
+
+    /**
+     * 鐩戞帶璁″垝瀹℃牳
+     * @param qualityMonitor
+     * @return
+     */
+    boolean examineQualityMonitor(QualityMonitor qualityMonitor);
+
+    /**
+     * 鐩戞帶璁″垝鎵瑰噯
+     * @param qualityMonitor
+     * @return
+     */
+    boolean ratifyQualityMonitor(QualityMonitor qualityMonitor);
+
+    /**
+     * 鐩戞帶璁″垝鍒楄〃
+     * @param page
+     * @param qualityMonitor
+     * @return
+     */
+    IPage<QualityMonitorDto> pageQualityMonitor(Page page, QualityMonitor qualityMonitor);
+
+    /**
+     * 鐩戞帶璁″垝璇︽儏鍒楄〃
+     * @param page
+     * @param qualityMonitorDetails
+     * @return
+     */
+    IPage<QualityMonitorDetails> pageQualityMonitorDetail(Page page, QualityMonitorDetails qualityMonitorDetails);
+
+
+    /**
+     * 瀵煎嚭鐩戞帶璁″垝
+     *
+     * @param qualityMonitorId
+     * @param response
+     */
+    void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response);
+
+
+    /************************************************************  瀹炴柦  *******************************************************************/
+
+    /**
+     * 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+     * @param qualityMonitorDetailsId
+     * @return
+     */
+    QualityMonitorDetailsRatify getQualityMonitorRatify(Integer qualityMonitorDetailsId);
+
+    /**
+     * 鏂板鐩戞帶璇︽儏瀹炴柦
+     * @param qualityMonitorDetailsRatify
+     * @return
+     */
+    boolean addQualityMonitorRatify(QualityMonitorDetailsRatify qualityMonitorDetailsRatify);
+
+    /**
+     * 鐩戞帶璁″垝璇︽儏瀹炴柦鎰忚
+     * @param qualityMonitorDetailsRatify
+     * @return
+     */
+    boolean addQualityMonitorRatifyOpinion(QualityMonitorDetailsRatify qualityMonitorDetailsRatify);
+
+    /**
+     * 瀵煎嚭鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+     *
+     * @param detailsRatifyId 鐩戞帶璁″垝璇︽儏瀹炴柦id
+     * @param response
+     */
+    void exportQualityMonitorRatify(Integer detailsRatifyId, HttpServletResponse response);
+
+
+    /************************************************************  璇勪环  *******************************************************************/
+
+    /**
+     *
+     * @param qualityMonitorDetailsId
+     * @return
+     */
+    QualityMonitorDetailsEvaluate getQualityMonitorEvaluate(Integer qualityMonitorDetailsId);
+
+    /**
+     * 鏂板鐩戞帶璇勪环
+     * @param qualityMonitorDetailsEvaluate
+     * @return
+     */
+    boolean addQualityMonitorEvaluate(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate);
+
+    /**
+     * 鐩戞帶璇勪环瀹℃壒鎰忚
+     * @param qualityMonitorDetailsEvaluate
+     * @return
+     */
+    boolean addMonitorEvaluateOpinion(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate);
+
+    /**
+     * 鏂板鐩戞帶璇勪环闄勪欢琛�
+     * @param detailsEvaluateId
+     * @param file
+     * @return
+     */
+    boolean uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file);
+
+    /**
+     * 鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃
+     * @return
+     */
+    List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer detailsEvaluateId);
+
+
+    /**
+     * 瀵煎嚭鐩戞帶璇勪环
+     * @param detailsEvaluateId 鐩戞帶璇勪环id
+     */
+    void exportQualityMonitorEvaluate(Integer detailsEvaluateId, HttpServletResponse response);
+
+    /**
+     * 涓婁紶鐩戞帶瀹屾垚鎶ュ憡
+     * @param file
+     * @param qualityMonitorDetailsId
+     * @return
+     */
+    boolean uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId);
+
+    /**
+     * 鎵瑰噯瀹屾垚鎶ュ憡
+     * @param qualityMonitorDetails
+     * @return
+     */
+    boolean ratifyFinishReport(QualityMonitorDetails qualityMonitorDetails);
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseDetailsService.java b/cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseDetailsService.java
new file mode 100644
index 0000000..3bf040a
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseDetailsService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.process.pojo.QualitySuperviseDetails;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+public interface QualitySuperviseDetailsService extends IService<QualitySuperviseDetails> {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseService.java b/cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseService.java
new file mode 100644
index 0000000..be09680
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseService.java
@@ -0,0 +1,201 @@
+package com.ruoyi.process.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.process.dto.QualitySuperviseDetailsDto;
+import com.ruoyi.process.pojo.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璐ㄩ噺鐩戠潱涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+public interface QualitySuperviseService extends IService<QualitySupervise> {
+
+    /**
+     * 瀵煎叆鐩戠潱璁″垝
+     * @param file
+     * @return
+     */
+    boolean importQualitySupervise(MultipartFile file, QualitySupervise qualitySupervise);
+
+    /**
+     * 鐩戠潱璁″垝鎵瑰噯
+     * @param qualitySupervise
+     * @return
+     */
+    boolean ratifyQualitySupervise(QualitySupervise qualitySupervise);
+
+    /**
+     * 鐩戠潱璁″垝鍒楄〃
+     * @return
+     */
+    IPage<QualitySupervise> pageQualitySupervise(Page page, QualitySupervise qualitySupervise);
+
+    /**
+     * 鐩戠潱璁″垝璇︽儏鍒楄〃
+     * @return
+     */
+    IPage<QualitySuperviseDetailsDto> pageQualitySuperviseDetail(Page page, QualitySuperviseDetailsDto qualitySuperviseDetails);
+
+    /**
+     * 鏌ヨ璇ヨ鍒掔洃鐫e憳
+     * @param superviseDetailsId
+     * @return
+     */
+    List<Map<String, String>> getRecordUser(Integer superviseDetailsId);
+
+    /**
+     * 瀵煎嚭鐩戠潱璁″垝
+     * @param superviseId
+     * @param response
+     */
+    void exportQualitySupervise(Integer superviseId, HttpServletResponse response);
+
+    /************************************************ 璁板綍 ******************************************************/
+
+    /**
+     * 鏌ヨ鐩戠潱璁板綍淇℃伅
+     * @param superviseDetailsId
+     * @return
+     */
+    QualitySuperviseDetailsRecord getSuperviseDetailRecord(Integer superviseDetailsId);
+
+    /**
+     * 鏂板鐩戠潱璁板綍淇℃伅
+     * @param qualitySuperviseDetailsRecord
+     * @return
+     */
+    boolean addSuperviseDetailRecord(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord);
+
+    /**
+     * 鐩戠潱璁板綍鎵瑰噯
+     * @param qualitySuperviseDetailsRecord
+     * @return
+     */
+    boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord);
+
+    /**
+     * 瀵煎嚭鐩戠潱璁板綍琛�
+     * @param superviseDetailsId
+     * @param response
+     */
+    void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response);
+
+    /*************************************************  涓嶅悎鏍煎伐浣滄帶鍒跺崟 ********************************************************/
+
+    /**
+     * 鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param qualitySuperviseDetailsAccording
+     * @return
+     */
+    boolean addSuperviseDetailAccording(QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording);
+
+    /**
+     * (瑁呭娴佺▼)鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param qualitySuperviseDetailsAccording
+     * @return
+     */
+    boolean addEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording);
+
+    /**
+     * (瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param qualitySuperviseDetailsAccording
+     * @return
+     */
+    boolean approverEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording);
+
+    /**
+     * 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param superviseDetailsId
+     * @return
+     */
+    QualitySuperviseDetailsAccording getSuperviseDetailAccording(Integer superviseDetailsId);
+
+    /**
+     * 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭垪琛�
+     * @param detailsAccording
+     * @return
+     */
+    IPage<QualitySuperviseDetailsAccording> pageSuperviseDetailAccording(Page page, QualitySuperviseDetailsAccording detailsAccording);
+
+    /**
+     * 瀵煎嚭鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param superviseDetailAccordingId
+     * @param response
+     */
+    void superviseDetailAccordingExport(Integer superviseDetailAccordingId, HttpServletResponse response);
+
+    /*************************************************  绾犳鎺柦澶勭悊鍗� ********************************************************/
+
+    /**
+     * 鏂板鐩戠潱绾犳澶勭悊淇℃伅
+     * @param qualitySuperviseDetailsAccording
+     * @return
+     */
+    boolean addSuperviseDetailCorrect(QualitySuperviseDetailsCorrect qualitySuperviseDetailsAccording);
+
+    /**
+     * (瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊
+     * @param qualitySuperviseDetailsCorrect
+     * @return
+     */
+    boolean addEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect);
+
+    /**
+     * (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊
+     * @param qualitySuperviseDetailsCorrect
+     * @return
+     */
+    boolean approveEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect);
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳澶勭悊
+     * @param superviseDetailsId
+     * @return
+     */
+    QualitySuperviseDetailsCorrect getSuperviseDetailCorrect(Integer superviseDetailsId);
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃
+     * @param page
+     * @param detailsCorrect
+     * @return
+     */
+    IPage<QualitySuperviseDetailsCorrect> pageSuperviseDetailCorrect(Page page, QualitySuperviseDetailsCorrect detailsCorrect);
+
+    /**
+     * 鏂板鐩戠潱绾犳鎺柦闄勪欢
+     * @param superviseDetailsCorrectId
+     * @param file
+     * @return
+     */
+    boolean uploadSuperviseDetailCorrectFile(Integer superviseDetailsCorrectId, MultipartFile file);
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳鎺柦闄勪欢
+     * @param superviseDetailsCorrectId
+     * @return
+     */
+    List<QualitySuperviseDetailsCorrectFile> getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId);
+
+    /**
+     * 瀵煎嚭鐩戠潱绾犳鎺柦
+     * @param superviseDetailsCorrectId
+     * @param response
+     */
+    void exportSuperviseDetaillCorrect(Integer superviseDetailsCorrectId, HttpServletResponse response);
+
+
+
+    /*************************************************  璐ㄩ噺鐩戠潱璁板綍 ********************************************************/
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyCalibrationsFileServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyCalibrationsFileServiceImpl.java
new file mode 100644
index 0000000..96d3f41
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyCalibrationsFileServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.ProcessMethodVerifyCalibrationsFileMapper;
+import com.ruoyi.process.pojo.ProcessMethodVerifyCalibrationsFile;
+import com.ruoyi.process.service.ProcessMethodVerifyCalibrationsFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉涓婂矖璇侀檮浠惰〃(CnasProcessMethodVerifyCalibrationsFile)$desc
+ *
+ * @author makejava
+ * @since 2024-11-12 09:55:06
+ */
+@Service
+public class CnasProcessMethodVerifyCalibrationsFileServiceImpl extends ServiceImpl<ProcessMethodVerifyCalibrationsFileMapper, ProcessMethodVerifyCalibrationsFile> implements ProcessMethodVerifyCalibrationsFileService {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyWorkFileServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyWorkFileServiceImpl.java
new file mode 100644
index 0000000..5400190
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyWorkFileServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.ProcessMethodVerifyWorkFileMapper;
+import com.ruoyi.process.pojo.ProcessMethodVerifyWorkFile;
+import com.ruoyi.process.service.ProcessMethodVerifyWorkFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉涓婂矖璇侀檮浠惰〃(CnasProcessMethodVerifyWorkFile)$desc
+ *
+ * @author makejava
+ * @since 2024-11-12 09:55:06
+ */
+@Service
+public class CnasProcessMethodVerifyWorkFileServiceImpl extends ServiceImpl<ProcessMethodVerifyWorkFileMapper, ProcessMethodVerifyWorkFile> implements ProcessMethodVerifyWorkFileService {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionDetailServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionDetailServiceImpl.java
new file mode 100644
index 0000000..193165f
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.InconsistentDistributionDetailMapper;
+import com.ruoyi.process.pojo.InconsistentDistributionDetail;
+import com.ruoyi.process.service.InconsistentDistributionDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯冭鎯� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 09:53:33
+ */
+@Service
+public class InconsistentDistributionDetailServiceImpl extends ServiceImpl<InconsistentDistributionDetailMapper, InconsistentDistributionDetail> implements InconsistentDistributionDetailService {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
new file mode 100644
index 0000000..f108643
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
@@ -0,0 +1,231 @@
+package com.ruoyi.process.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.process.dto.InconsistentDistributionDto;
+import com.ruoyi.process.dto.InconsistentDistributionProportionDto;
+import com.ruoyi.process.mapper.InconsistentDistributionMapper;
+import com.ruoyi.process.pojo.InconsistentDistribution;
+import com.ruoyi.process.pojo.InconsistentDistributionDetail;
+import com.ruoyi.process.service.InconsistentDistributionDetailService;
+import com.ruoyi.process.service.InconsistentDistributionService;
+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.math.BigDecimal;
+import java.math.RoundingMode;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 09:53:20
+ */
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class InconsistentDistributionServiceImpl extends ServiceImpl<InconsistentDistributionMapper, InconsistentDistribution> implements InconsistentDistributionService {
+
+    private InconsistentDistributionDetailService inconsistentDistributionDetailService;
+
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鏌ヨ
+     * @param page
+     * @param inconsistentDistributionDto
+     * @return
+     */
+    @Override
+    public IPage<InconsistentDistributionDto> pageInconsistentDistribution(Page page, InconsistentDistribution inconsistentDistributionDto) {
+        return baseMapper.pageInconsistentDistribution(page, QueryWrappers.queryWrappers(inconsistentDistributionDto));
+    }
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鏂板
+     * @param inconsistentDistributionDto
+     * @return
+     */
+    @Override
+    public boolean addInconsistentDistribution(InconsistentDistributionDto inconsistentDistributionDto) {
+        baseMapper.insert(inconsistentDistributionDto);
+        // 鏂板璇︽儏
+        for (InconsistentDistributionDetail distributionDetail : inconsistentDistributionDto.getDistributionDetailList()) {
+            distributionDetail.setDistributionId(inconsistentDistributionDto.getDistributionId());
+        }
+        inconsistentDistributionDetailService.saveBatch(inconsistentDistributionDto.getDistributionDetailList());
+        return true;
+    }
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷淇敼
+     * @param inconsistentDistributionDto
+     * @return
+     */
+    @Override
+    public boolean updateInconsistentDistribution(InconsistentDistributionDto inconsistentDistributionDto) {
+        inconsistentDistributionDetailService.updateBatchById(inconsistentDistributionDto.getDistributionDetailList());
+        return true;
+    }
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鍒犻櫎
+     * @param distributionId
+     * @return
+     */
+    @Override
+    public boolean delInconsistentDistribution(Integer distributionId) {
+        inconsistentDistributionDetailService.remove(Wrappers.<InconsistentDistributionDetail>lambdaQuery()
+                .eq(InconsistentDistributionDetail::getDistributionId, distributionId));
+        baseMapper.deleteById(distributionId);
+        return true;
+    }
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鏌ョ湅璇︽儏
+     * @param distributionId
+     * @return
+     */
+    @Override
+    public InconsistentDistributionDto getInconsistentDistributionOne(Integer distributionId) {
+        InconsistentDistributionDto distributionDto = new InconsistentDistributionDto();
+        InconsistentDistribution inconsistentDistribution = baseMapper.selectById(distributionId);
+        BeanUtils.copyProperties(distributionDto, inconsistentDistribution);
+        // 鏌ヨ璇︾粏
+        List<InconsistentDistributionDetail> distributionDetailList = inconsistentDistributionDetailService.list(Wrappers.<InconsistentDistributionDetail>lambdaQuery()
+                .eq(InconsistentDistributionDetail::getDistributionId, distributionId));
+
+        // 涓讳换姹囨��
+        int directorSum = distributionDetailList.stream()
+                .filter(detail -> detail.getDirector() != null)
+                .mapToInt(InconsistentDistributionDetail::getDirector)
+                .sum();
+
+        // 鎶�鏈礋璐d汉姹囨��
+        int technologySum = distributionDetailList.stream()
+                .filter(detail -> detail.getTechnology() != null)
+                .mapToInt(InconsistentDistributionDetail::getTechnology)
+                .sum();
+
+        // 璐ㄩ噺璐熻矗浜烘眹鎬�
+        int qualitySum = distributionDetailList.stream()
+                .filter(detail -> detail.getQuality() != null)
+                .mapToInt(InconsistentDistributionDetail::getQuality)
+                .sum();
+
+        // 缁煎悎瀹ゆ眹鎬�
+        int comprehensiveSum = distributionDetailList.stream()
+                .filter(detail -> detail.getComprehensive() != null)
+                .mapToInt(InconsistentDistributionDetail::getComprehensive)
+                .sum();
+
+        // 璇曢獙瀹ゆ眹鎬�
+        int testingSum = distributionDetailList.stream()
+                .filter(detail -> detail.getTesting() != null)
+                .mapToInt(InconsistentDistributionDetail::getTesting)
+                .sum();
+
+        // 鎬绘暟姹囨��
+        int sum = directorSum + technologySum + qualitySum + comprehensiveSum + testingSum;
+
+        //璁$畻鍚堣
+        for (InconsistentDistributionDetail distributionDetail : distributionDetailList) {
+            // 鎬绘暟
+            Integer total = (distributionDetail.getDirector() != null ? distributionDetail.getDirector() : 0)
+                    + (distributionDetail.getTechnology() != null ? distributionDetail.getTechnology() : 0)
+                    + (distributionDetail.getQuality() != null ? distributionDetail.getQuality() : 0)
+                    + (distributionDetail.getComprehensive() != null ? distributionDetail.getComprehensive() : 0)
+                    + (distributionDetail.getTesting() != null ? distributionDetail.getTesting() : 0);
+            distributionDetail.setTotal(total);
+            // 鍗犳瘮
+            distributionDetail.setProportion(calculatePercentage(total, sum));
+        }
+        // 娣诲姞鏈�鍚庝竴琛屽崰姣斿璞�
+        InconsistentDistributionProportionDto proportionDto = new InconsistentDistributionProportionDto();
+        proportionDto.setEssentials("鍗犳瘮 %");
+        proportionDto.setDirector(calculatePercentage(directorSum, sum));
+        proportionDto.setTechnology(calculatePercentage(technologySum, sum));
+        proportionDto.setQuality(calculatePercentage(qualitySum, sum));
+        proportionDto.setComprehensive(calculatePercentage(comprehensiveSum, sum));
+        proportionDto.setTesting(calculatePercentage(testingSum, sum));
+        proportionDto.setTotal(sum);
+
+        distributionDto.setDistributionDetailList(distributionDetailList);
+        distributionDto.setDistributionProportion(proportionDto);
+
+        return distributionDto;
+    }
+
+    /**
+     * 璁$畻鍗犳瘮
+     * @return
+     */
+    public BigDecimal calculatePercentage(Integer numeratorNum, Integer denominatorNum) {
+        BigDecimal numerator = new BigDecimal(numeratorNum);
+        BigDecimal denominator = new BigDecimal(denominatorNum);
+
+        // 妫�鏌ラ櫎鏁版槸鍚︿负0
+        if (denominator.compareTo(BigDecimal.ZERO) == 0) {
+            return BigDecimal.ZERO;
+        }
+        BigDecimal ratio = numerator.divide(denominator, 4, RoundingMode.HALF_UP); // 淇濈暀4浣嶅皬鏁�
+        BigDecimal percentage = ratio.multiply(new BigDecimal("100"));
+        BigDecimal percentageRounded = percentage.setScale(2, RoundingMode.HALF_UP);
+        return percentageRounded;
+    }
+
+
+    /**
+     * 瀵煎嚭涓嶇鍚堢殑鍒嗗竷
+     * @param distributionId
+     * @param response
+     */
+    @Override
+    public void exportInconsistentDistribution(Integer distributionId, HttpServletResponse response) {
+        InconsistentDistributionDto inconsistentDistributionOne = getInconsistentDistributionOne(distributionId);
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/inconsistent-distribution.docx");
+        Configure configure = Configure.builder()
+                .bind("distributionDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("distributionDetailList", inconsistentDistributionOne.getDistributionDetailList());
+                    put("proport", inconsistentDistributionOne.getDistributionProportion());
+                }});
+
+        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-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderDetailServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderDetailServiceImpl.java
new file mode 100644
index 0000000..fff7d16
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.InspectionOrderDetailMapper;
+import com.ruoyi.process.pojo.InspectionOrderDetail;
+import com.ruoyi.process.service.InspectionOrderDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+@Service
+public class InspectionOrderDetailServiceImpl extends ServiceImpl<InspectionOrderDetailMapper, InspectionOrderDetail> implements InspectionOrderDetailService {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java
new file mode 100644
index 0000000..526aa38
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java
@@ -0,0 +1,310 @@
+package com.ruoyi.process.service.impl;
+
+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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsReport;
+import com.ruoyi.inspect.service.InsOrderService;
+import com.ruoyi.inspect.service.InsReportService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.process.dto.InspectionOrderDto;
+import com.ruoyi.process.dto.InspectionOrderExportDto;
+import com.ruoyi.process.mapper.InspectionOrderMapper;
+import com.ruoyi.process.pojo.InspectionOrder;
+import com.ruoyi.process.pojo.InspectionOrderDetail;
+import com.ruoyi.process.service.InspectionOrderDetailService;
+import com.ruoyi.process.service.InspectionOrderService;
+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.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InspectionOrderServiceImpl extends ServiceImpl<InspectionOrderMapper, InspectionOrder> implements InspectionOrderService {
+    @Resource
+    private InspectionOrderDetailService inspectionOrderDetailService;
+    @Resource
+    private InsOrderService insOrderService;
+    @Resource
+    private InsReportService insReportService;
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+
+    /**
+     * 妫�楠屽鎵樺崟鍒嗛〉鏌ヨ
+     * @param page
+     * @param InspectionOrder
+     * @return
+     */
+    @Override
+    public IPage<InspectionOrderDto> pageInspectionOrder(Page page, InspectionOrder InspectionOrder) {
+        return baseMapper.pageInspectionOrder(page, QueryWrappers.queryWrappers(InspectionOrder));
+    }
+
+    /**
+     * 妫�楠屽鎵樺崟鏂板
+     * @param inspectionOrder
+     * @return
+     */
+    @Override
+    public boolean addInspectionOrder(InspectionOrderDto inspectionOrder) {
+        if (inspectionOrder.getInsOrderId() == null) {
+            throw new ErrorException("缂哄皯璁㈠崟id");
+        }
+
+        // 澶嶅埗鎶ュ憡
+        // 鏌ヨ璁㈠崟鎶ュ憡
+        InsReport insReport = insReportService.getOne(Wrappers.<InsReport>lambdaQuery()
+                .eq(InsReport::getInsOrderId, inspectionOrder.getInsOrderId()));
+
+        String path = wordUrl + insReport.getUrl().replaceFirst("/word", "");
+
+        String fileName =LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + "濮旀墭鍗曟姤鍛�.docx";
+
+        // 婧愭枃浠惰矾寰�
+        Path sourcePath = Paths.get(path);
+        // 鐩爣鏂囦欢璺緞
+        Path targetPath = Paths.get(wordUrl + "/" + fileName);
+
+        try {
+            // 澶嶅埗鏂囦欢锛屽鏋滅洰鏍囨枃浠跺凡瀛樺湪锛屽垯瑕嗙洊
+            Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
+            // 娣诲姞鏂囦欢鍦板潃
+            inspectionOrder.setFileUrl("/word/" + fileName);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        baseMapper.insert(inspectionOrder);
+        // 鏂板璇︽儏
+        if (CollectionUtils.isNotEmpty(inspectionOrder.getOrderDetailList())) {
+            for (InspectionOrderDetail InspectionOrderDetail : inspectionOrder.getOrderDetailList()) {
+                InspectionOrderDetail.setInspectionOrderId(inspectionOrder.getInspectionOrderId());
+            }
+            inspectionOrderDetailService.saveBatch(inspectionOrder.getOrderDetailList());
+        }
+
+        return true;
+    }
+
+    /**
+     * 妫�楠屽鎵樺崟淇敼
+     * @param InspectionOrder
+     * @return
+     */
+    @Override
+    public boolean updateInspectionOrder(InspectionOrderDto InspectionOrder) {
+        baseMapper.updateById(InspectionOrder);
+
+        // 鍒犻櫎涔嬪墠鐨勮鎯�
+        inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
+                .eq(InspectionOrderDetail::getInspectionOrderId, InspectionOrder.getInspectionOrderId()));
+
+        // 鏂板璇︽儏
+        for (InspectionOrderDetail InspectionOrderDetail : InspectionOrder.getOrderDetailList()) {
+            InspectionOrderDetail.setInspectionOrderId(InspectionOrder.getInspectionOrderId());
+        }
+        inspectionOrderDetailService.saveBatch(InspectionOrder.getOrderDetailList());
+
+        return true;
+    }
+
+    /**
+     * 妫�楠屽鎵樺崟鍒犻櫎
+     * @param inspectionOrderId
+     * @return
+     */
+    @Override
+    public boolean delInspectionOrder(Integer inspectionOrderId) {
+        inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
+                .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId));
+        baseMapper.deleteById(inspectionOrderId);
+        return true;
+    }
+
+    /**
+     * 妫�楠屽鎵樺崟鏌ョ湅璇︽儏
+     * @param inspectionOrderId
+     * @return
+     */
+    @Override
+    public InspectionOrderDto getInspectionOrderOne(Integer inspectionOrderId) {
+        InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId);
+        InspectionOrderDto inspectionOrderDto = new InspectionOrderDto();
+        BeanUtils.copyProperties(inspectionOrder, inspectionOrderDto);
+
+        // 鏌ヨ璇︾粏淇℃伅
+        inspectionOrderDto.setOrderDetailList(inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery()
+                .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)));
+        return inspectionOrderDto;
+    }
+
+    /**
+     * 鏍规嵁鎴愬搧璁㈠崟id鏌ヨ濮旀墭鍗曡鎯�
+     * @param insOrderId
+     * @return
+     */
+    @Override
+    public InspectionOrderDto getInspectionOrderByInsOderId(Integer insOrderId) {
+        InsOrder order = insOrderService.getById(insOrderId);
+        InspectionOrderDto inspectionOrderDto = new InspectionOrderDto();
+        inspectionOrderDto.setInsOrderId(order.getId());//鎴愬搧璁㈠崟id
+        inspectionOrderDto.setEntrustCode(order.getEntrustCode());//濮旀墭缂栧彿
+        inspectionOrderDto.setSampleName(order.getSample());//璇曟牱鍚嶇О
+        inspectionOrderDto.setProduction(order.getProduction());//鐢熶骇鍗曚綅
+        inspectionOrderDto.setCommissionUnit(order.getCompany());//濮旀墭鍗曚綅
+        inspectionOrderDto.setCommissionUser(order.getPrepareUser());//濮旀墭浜�
+        inspectionOrderDto.setSampleStatus("瀹屽ソ");//鏍峰搧鐘舵��
+        inspectionOrderDto.setIsLeave(order.getIsLeave());//鏄惁鐣欐牱
+        inspectionOrderDto.setProcessing(order.getProcessing());//鏍峰搧澶勭悊鏂瑰紡
+        inspectionOrderDto.setAppointed(order.getAppointed());//绾﹀畾鏃堕棿
+        inspectionOrderDto.setSend(order.getSend());//鎶ュ憡鍙戦�佹柟寮�
+        inspectionOrderDto.setCommissionPhone(order.getPhone());//鎶ュ憡鍙戦�佹柟寮�
+
+        return inspectionOrderDto;
+    }
+
+
+    /**
+     * 濮旀墭鍗曟煡璇㈡垚鍝佽鍗�
+     * @return
+     */
+    @Override
+    public IPage<InsOrder> getInsOrderOnInspection(Page page, InsOrder insOrder) {
+        return baseMapper.getInsOrderOnInspection(page, QueryWrappers.queryWrappers(insOrder));
+    }
+
+    /**
+     * 濮旀墭鍗曟垚鍝佹姤鍛婁笂浼�
+     * @param file
+     * @param inspectionOrderId
+     * @return
+     */
+    @Override
+    public boolean uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId) {
+        String urlString;
+        String pathName;
+        try {
+            String path = wordUrl;
+            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));
+
+            baseMapper.update(null, Wrappers.<InspectionOrder>lambdaUpdate()
+                    .eq(InspectionOrder::getInspectionOrderId, inspectionOrderId)
+                    .set(InspectionOrder::getFileUrl, "/word/" + pathName));
+
+
+
+        } catch (Exception e) {
+            throw new ErrorException("鏂囦欢涓婁紶澶辫触");
+        }
+        return true;
+    }
+
+    @Override
+    public void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response) {
+        InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId);
+        InspectionOrderExportDto inspectionOrderExportDto = extracted(inspectionOrder);
+        List<InspectionOrderDetail> list = inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery()
+                .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId));
+        int index = 1;
+        for (InspectionOrderDetail inspectionOrderDetail : list) {
+            inspectionOrderDetail.setIndex(index);
+            index++;
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/inspection-order.docx");
+        Configure configure = Configure.builder()
+                .bind("inspectionOrderDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("inspectionOrder", inspectionOrderExportDto);
+                    put("inspectionOrderDetailList", list);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    inspectionOrderExportDto.getSampleName(), "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("瀵煎嚭澶辫触");
+        }
+    }
+
+    private InspectionOrderExportDto extracted(InspectionOrder inspectionOrder) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+        InspectionOrderExportDto inspectionOrderExportDto = new InspectionOrderExportDto();
+        BeanUtils.copyProperties(inspectionOrder, inspectionOrderExportDto);
+
+        if (inspectionOrder.getCommissionDate() != null) {
+            inspectionOrderExportDto.setCommissionDateString(inspectionOrder.getCommissionDate().format(formatter));
+        }
+        if (inspectionOrder.getReceiptData() != null) {
+            inspectionOrderExportDto.setReceiptDataString(inspectionOrder.getReceiptData().format(formatter));
+        }
+        if (inspectionOrder.getSampleData() != null) {
+            inspectionOrderExportDto.setSampleDataString(inspectionOrder.getSampleData().format(formatter));
+        }
+        if (inspectionOrder.getAppointed() != null) {
+            inspectionOrderExportDto.setAppointedString(inspectionOrder.getAppointed().format(formatter));
+        }
+
+        inspectionOrderExportDto.setIsLeave1(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() == 1? "鈽�" : "鈻�");
+        inspectionOrderExportDto.setIsLeave2(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() == 0? "鈽�" : "鈻�");
+        inspectionOrderExportDto.setSend0(inspectionOrder.getSend() != null && inspectionOrder.getSend() == 1? "鈽�" : "鈻�");
+        inspectionOrderExportDto.setSend1(inspectionOrder.getSend() != null && inspectionOrder.getSend() == 0? "鈽�" : "鈻�");
+        inspectionOrderExportDto.setProcessing0(inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 0? "鈽�" : "鈻�");
+        inspectionOrderExportDto.setProcessing1(inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 1? "鈽�" : "鈻�");
+        inspectionOrderExportDto.setCriterionRule0(inspectionOrder.getCriterionRule() != null && inspectionOrder.getCriterionRule() == 0? "鈽�" : "鈻�");
+        inspectionOrderExportDto.setCriterionRule1(inspectionOrder.getCriterionRule() != null && inspectionOrder.getCriterionRule() == 1? "鈽�" : "鈻�");
+        return inspectionOrderExportDto;
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessComplainServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessComplainServiceImpl.java
new file mode 100644
index 0000000..5dd627c
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessComplainServiceImpl.java
@@ -0,0 +1,105 @@
+package com.ruoyi.process.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.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.inspect.mapper.InsReportMapper;
+import com.ruoyi.inspect.mapper.InsSampleMapper;
+import com.ruoyi.inspect.pojo.InsReport;
+import com.ruoyi.inspect.pojo.InsSample;
+import com.ruoyi.process.dto.ProcessComplainDto;
+import com.ruoyi.process.mapper.ProcessComplainMapper;
+import com.ruoyi.process.pojo.ProcessComplain;
+import com.ruoyi.process.service.ProcessComplainService;
+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.List;
+
+/**
+ * <p>
+ * 鎶曡瘔 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 09:29:11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ProcessComplainServiceImpl extends ServiceImpl<ProcessComplainMapper, ProcessComplain> implements ProcessComplainService {
+
+    @Resource
+    private ProcessComplainMapper processComplainMapper;
+
+    @Resource
+    private InsReportMapper insReportMapper;
+
+    @Resource
+    private InsSampleMapper insSampleMapper;
+
+
+    @Override
+    public IPage<ProcessComplain> pageProcessComplain(Page page, ProcessComplain processComplain) {
+        return processComplainMapper.pageProcessComplain(page, QueryWrappers.queryWrappers(processComplain));
+    }
+
+    @Override
+    public int addProcessComplain(ProcessComplain processComplain) {
+        //鍒ゆ柇鎶ュ憡缂栧彿鍜屾牱鍝佺紪鍙锋槸鍚﹀瓨鍦�
+        InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, processComplain.getCode()));
+        if (ObjectUtils.isEmpty(insReport)) {
+            throw new ErrorException("鎶ュ憡缂栧彿杈撳叆鏈夎");
+        }
+        processComplain.setInsReportId(insReport.getId());
+        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, processComplain.getSampleCode()));
+        if (ObjectUtils.isEmpty(insSample)) {
+            throw new ErrorException("鏍峰搧缂栧彿杈撳叆鏈夎");
+        }
+        //鎶曡瘔缂栧彿鐢熸垚
+        //todo  giveCode
+//        String giveCode = this.giveCode.giveCode("JCZX-", "cnas_process_complain", "", "yyMMdd");
+//        processComplain.setComplainNo(giveCode);
+        return processComplainMapper.insert(processComplain);
+    }
+
+    @Override
+    public ProcessComplainDto getProcessComplain(Long id) {
+        return processComplainMapper.getProcessComplain(id);
+    }
+
+    @Override
+    public int doProcessComplain(ProcessComplain processComplain) {
+        return processComplainMapper.updateById(processComplain);
+    }
+
+    @Override
+    public void exportProcessComplain(ProcessComplain processComplain, HttpServletResponse response) throws Exception {
+        List<ProcessComplain> data = processComplainMapper.pageProcessComplain(new Page(-1, -1), QueryWrappers.queryWrappers(processComplain)).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(ProcessComplain.class).build();
+            excelWriter.write(data, mainSheet);
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessDealServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessDealServiceImpl.java
new file mode 100644
index 0000000..2144a7e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessDealServiceImpl.java
@@ -0,0 +1,104 @@
+package com.ruoyi.process.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.common.utils.SecurityUtils;
+import com.ruoyi.process.mapper.ProcessDealMapper;
+import com.ruoyi.process.mapper.ProcessTotaldealMapper;
+import com.ruoyi.process.pojo.ProcessDeal;
+import com.ruoyi.process.pojo.ProcessTotaldeal;
+import com.ruoyi.process.service.ProcessDealService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 02:50:19
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ProcessDealServiceImpl extends ServiceImpl<ProcessDealMapper, ProcessDeal> implements ProcessDealService {
+
+    @Resource
+    private ProcessDealMapper processDealMapper;
+
+
+    @Autowired
+    private UserMapper userMapper;
+
+    @Resource
+    private ProcessTotaldealMapper processTotaldealMapper;
+
+    @Override
+    public IPage<ProcessDeal> pageProcessDeal(Page page, ProcessDeal processDeal) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        processDeal.setCreateUser(userId);
+
+        if (ObjectUtils.isEmpty(processDeal.getTotaldealId())) {
+            //鑾峰彇褰撳墠鏈堜唤
+            LocalDate currentDate = LocalDate.now();
+            // 瀹氫箟鏃ユ湡鏍煎紡
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+            // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+            String currentMonth = currentDate.format(formatter);
+            //鏌ヨ鍘嗗彶
+            ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectOne(Wrappers.<ProcessTotaldeal>lambdaQuery().eq(ProcessTotaldeal::getMonth, currentMonth));
+            processDeal.setTotaldealId(processTotaldeal.getId());
+        }
+
+        return processDealMapper.pageProcessDeal(page, QueryWrappers.queryWrappers(processDeal));
+    }
+
+    @Override
+    public int addProcessDeal(ProcessDeal processDeal) {
+        ProcessTotaldeal processTotaldeal;
+        if (ObjectUtils.isEmpty(processDeal.getTotaldealId())){
+            LocalDate dealTime = LocalDate.now();
+            // 瀹氫箟鏃ユ湡鏍煎紡
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+            // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+            String currentMonth = dealTime.format(formatter);
+            processTotaldeal= processTotaldealMapper.selectOne(Wrappers.<ProcessTotaldeal>lambdaQuery().eq(ProcessTotaldeal::getMonth,currentMonth));
+            processDeal.setTotaldealId(processTotaldeal.getId());
+        }else {
+            processTotaldeal= processTotaldealMapper.selectById(processDeal.getTotaldealId());
+        }
+        processDealMapper.insert(processDeal);
+        processTotaldeal.setTotalNum(processDeal.getNum()+processTotaldeal.getTotalNum());
+        return processTotaldealMapper.updateById(processTotaldeal);
+    }
+
+    @Override
+    public int delProcessDeal(Integer id) {
+        ProcessDeal processDeal = processDealMapper.selectById(id);
+        processDealMapper.deleteById(id);
+        ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(processDeal.getTotaldealId());
+        processTotaldeal.setTotalNum(processTotaldeal.getTotalNum()-processDeal.getNum());
+        return processTotaldealMapper.updateById(processTotaldeal);
+    }
+
+    @Override
+    public int doProcessDeal(ProcessDeal processDeal) {
+        if (ObjectUtils.isNotEmpty(processDeal.getNum())) {
+            ProcessDeal oldProcessDeal = processDealMapper.selectById(processDeal.getId());
+            ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(processDeal.getTotaldealId());
+            processTotaldeal.setTotalNum(processTotaldeal.getTotalNum() - oldProcessDeal.getNum() + processDeal.getNum());
+            processTotaldealMapper.updateById(processTotaldeal);
+        }
+        return processDealMapper.updateById(processDeal);
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessEvaluateServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessEvaluateServiceImpl.java
new file mode 100644
index 0000000..343a4c6
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessEvaluateServiceImpl.java
@@ -0,0 +1,99 @@
+package com.ruoyi.process.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.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.process.mapper.ProcessEvaluateMapper;
+import com.ruoyi.process.pojo.ProcessEvaluate;
+import com.ruoyi.process.service.ProcessEvaluateService;
+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-02 01:10:43
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ProcessEvaluateServiceImpl extends ServiceImpl<ProcessEvaluateMapper, ProcessEvaluate> implements ProcessEvaluateService {
+
+    @Resource
+    private ProcessEvaluateMapper processEvaluateMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Override
+    public IPage<ProcessEvaluate> pageProcessEvaluate(Page page, ProcessEvaluate processEvaluate) {
+        return processEvaluateMapper.pageProcessEvaluate(page, QueryWrappers.queryWrappers(processEvaluate));
+    }
+
+    @Override
+    public int addProcessEvaluate(MultipartFile file) {
+        String urlString;
+        String pathName;
+        String path=wordUrl;
+        ProcessEvaluate processEvaluate = new ProcessEvaluate();
+        processEvaluate.setReportName(file.getOriginalFilename());
+        try {
+            File realpath = new File(path);
+            if (!realpath.exists()) {
+                realpath.mkdirs();
+            }
+            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+            urlString = realpath + "/" + pathName;
+            file.transferTo(new File(urlString));
+            processEvaluate.setReportUrl(pathName);
+            return processEvaluateMapper.insert(processEvaluate);
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("闄勪欢涓婁紶閿欒");
+            return 0;
+        }
+    }
+
+    @Override
+    public int doProcessEvaluate(ProcessEvaluate processEvaluate) {
+        return processEvaluateMapper.updateById(processEvaluate);
+    }
+
+    @Override
+    public void exportProcessEvaluate(ProcessEvaluate processEvaluate, HttpServletResponse response) throws Exception{
+        List<ProcessEvaluate> data = processEvaluateMapper.pageProcessEvaluate(new Page(-1, -1), QueryWrappers.queryWrappers(processEvaluate)).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(ProcessEvaluate.class).build();
+            excelWriter.write(data, mainSheet);
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewArchivedServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewArchivedServiceImpl.java
new file mode 100644
index 0000000..a2903e8
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewArchivedServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.ProcessMethodSearchNewArchivedMapper;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
+import com.ruoyi.process.service.ProcessMethodSearchNewArchivedService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏍囧噯鏌ユ柊瀛樻。琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-25 05:28:42
+ */
+@Service
+public class ProcessMethodSearchNewArchivedServiceImpl extends ServiceImpl<ProcessMethodSearchNewArchivedMapper, ProcessMethodSearchNewArchived> implements ProcessMethodSearchNewArchivedService {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewBackupsServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewBackupsServiceImpl.java
new file mode 100644
index 0000000..c5355d3
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewBackupsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.ProcessMethodSearchNewBackupsMapper;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
+import com.ruoyi.process.service.ProcessMethodSearchNewBackupsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏍囧噯鏌ユ柊澶囦唤琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-25 05:29:02
+ */
+@Service
+public class ProcessMethodSearchNewBackupsServiceImpl extends ServiceImpl<ProcessMethodSearchNewBackupsMapper, ProcessMethodSearchNewBackups> implements ProcessMethodSearchNewBackupsService {
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
new file mode 100644
index 0000000..4d8a602
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
@@ -0,0 +1,370 @@
+package com.ruoyi.process.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.util.FileUtils;
+import com.alibaba.excel.util.ListUtils;
+import com.alibaba.excel.write.metadata.WriteSheet;
+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.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.process.dto.ProcessMethodSearchNewArchivedDto;
+import com.ruoyi.process.dto.ProcessMethodSearchNewBackupsDto;
+import com.ruoyi.process.mapper.ProcessMethodSearchNewArchivedMapper;
+import com.ruoyi.process.mapper.ProcessMethodSearchNewBackupsMapper;
+import com.ruoyi.process.mapper.ProcessMethodSearchNewMapper;
+import com.ruoyi.process.pojo.ProcessMethodSearchNew;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
+import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
+import com.ruoyi.process.service.ProcessMethodSearchNewBackupsService;
+import com.ruoyi.process.service.ProcessMethodSearchNewService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.core.io.ClassPathResource;
+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.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.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鏍囧噯鏌ユ柊
+ *
+ * @author zhuo
+ * @since 2024-11-04
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ProcessMethodSearchNewServiceImpl extends ServiceImpl<ProcessMethodSearchNewMapper, ProcessMethodSearchNew> implements ProcessMethodSearchNewService {
+
+    @Resource
+    private ProcessMethodSearchNewArchivedMapper processMethodSearchNewArchivedMapper;
+    @Resource
+    private ProcessMethodSearchNewBackupsService processMethodSearchNewBackupsService;
+    @Resource
+    private ProcessMethodSearchNewBackupsMapper processMethodSearchNewBackupsMapper;
+
+    /**
+     * 鏂板鏍囧噯鏌ユ柊
+     *
+     * @param processMethodSearchNewList
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addMethodSearchNew(List<ProcessMethodSearchNew> processMethodSearchNewList) {
+        for (ProcessMethodSearchNew processMethodSearchNew : processMethodSearchNewList) {
+            processMethodSearchNew.setIsNewStandard(1);
+        }
+        // 鏂板
+        this.saveBatch(processMethodSearchNewList);
+        return true;
+    }
+
+    /**
+     * 鏍囧噯鏌ユ柊鍒楄〃
+     *
+     * @param processMethodSearchNew
+     * @return
+     */
+    @Override
+    public IPage<ProcessMethodSearchNew> pageMethodSearchNew(Page page, ProcessMethodSearchNewBackupsDto processMethodSearchNew) {
+        String beginDate = processMethodSearchNew.getBeginDate();
+        String endDate = processMethodSearchNew.getEndDate();
+        processMethodSearchNew.setBeginDate(null);
+        processMethodSearchNew.setEndDate(null);
+        return baseMapper.pageMethodSearchNew(page, QueryWrappers.queryWrappers(processMethodSearchNew), beginDate, endDate);
+    }
+
+    /**
+     * 鏍囧噯鏌ユ柊瀵煎嚭
+     *
+     * @param archivedId
+     * @param response
+     */
+    @Override
+    public void exportMethodSearchNew(Integer archivedId, HttpServletResponse response) {
+        // 鏌ヨ鏍囧噯鏌ユ柊瀛樻。淇℃伅
+        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        ProcessMethodSearchNewArchived methodSearchNewArchived = processMethodSearchNewArchivedMapper.selectById(archivedId);
+        Integer writeUserId = methodSearchNewArchived.getWriteUserId();
+        Integer ratifyUserId = methodSearchNewArchived.getRatifyUserId();
+        String writeDate = methodSearchNewArchived.getWriteTime() == null ?
+                null : methodSearchNewArchived.getWriteTime().format(timeFormatter);
+        String ratifyDate =methodSearchNewArchived.getRatifyTime() == null ?
+                null :  methodSearchNewArchived.getRatifyTime().format(timeFormatter);
+        // 鏌ヨ瀛樻。澶囦唤
+        List<ProcessMethodSearchNewBackups> methodSearchNewBackups = processMethodSearchNewBackupsMapper.selectList(Wrappers.<ProcessMethodSearchNewBackups>lambdaQuery()
+                .eq(ProcessMethodSearchNewBackups::getArchivedId, archivedId));
+
+        int index = 1;
+        // 鏍煎紡鍖栧弬鏁�
+        List<ProcessMethodSearchNewBackupsDto> methodSearchNews = new ArrayList<>();
+        for (ProcessMethodSearchNewBackups methodSearchNew : methodSearchNewBackups) {
+            ProcessMethodSearchNewBackupsDto searchNewBackupsDto = new ProcessMethodSearchNewBackupsDto();
+            BeanUtils.copyProperties(methodSearchNew, searchNewBackupsDto);
+            // 鏄惁鏄窡鏂版爣鍑�
+            if (methodSearchNew.getIsNewStandard().equals(1)) {
+                searchNewBackupsDto.setIsNewStandardString("鏄�");
+            } else {
+                searchNewBackupsDto.setIsNewStandardString("鍚�");
+            }
+
+            // 澶囨敞
+            if (methodSearchNew.getRemark() != null) {
+                if (methodSearchNew.getRemark().equals(1)) {
+                    searchNewBackupsDto.setRemarkString("鏇挎崲");
+                } else {
+                    searchNewBackupsDto.setRemarkString("浣滃簾");
+                }
+            }
+            switch (methodSearchNew.getSearchNewSource()) {
+                case 0:
+                    searchNewBackupsDto.setStandardNet("鈭�");
+                    break;
+                case 1:
+                    searchNewBackupsDto.setInformationOffices("鈭�");
+                    break;
+                case 2:
+                    searchNewBackupsDto.setStandardBookstore("鈭�");
+                    break;
+                case 3:
+                    searchNewBackupsDto.setOther("鈭�");
+                    break;
+            }
+            searchNewBackupsDto.setIndex(index);
+            methodSearchNews.add(searchNewBackupsDto);
+            index++;
+
+        }
+        // 鏌ヨ绛惧悕鍦板潃
+        String writeUserUrl = UserUtils.getUserSignatureUrl(writeUserId);
+        String ratifyUserUrl = UserUtils.getUserSignatureUrl(ratifyUserId);
+
+        //鍒涘缓ExcelWriter 鍙互鑷姩鍏虫祦浣嗚繕鏄墜鍔ㄥ叧涓�娆�
+        ExcelWriter excelWriter = null;
+
+        try {
+            // outputStream锛氳瀵煎嚭鐨勬枃浠剁殑杈撳嚭娴�
+            OutputStream outputStream = response.getOutputStream();
+            // 鑾峰彇妯$増鏂囦欢
+            ClassPathResource classPathResource = new ClassPathResource("/static/excel/check-records.xlsx");
+            // 浣跨敤妯$増鏂囦欢鐨勪袱绉嶆柟寮忥細
+            // 	1銆佹枃浠惰矾寰勶細.withTemplate(templateFileName)
+            // 	2銆佽緭鍏ユ祦锛�.withTemplate(inputStream)
+            // String templateFileName = classPathResource.getFile().getPath();
+            InputStream inputStream = classPathResource.getInputStream();
+            // 鍒涘缓ExcelWriter
+            excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build();
+            // 鑾峰彇绗竴涓猻heet椤�
+            WriteSheet writeSheet = EasyExcel.writerSheet(0, "鏍囧噯鏌ユ柊瀵煎嚭").build();
+            //excelWriter.fill() 杩欏湴鏂瑰氨鏄~鍏呭睘鎬с��
+//            excelWriter.fill(methodSearchNews, fillConfig, writeSheet); // 杩欓噷fillConfig鏄厤缃枃浠�
+            excelWriter.fill(methodSearchNews, writeSheet);
+
+            // 杩欓噷easy excel妯℃澘瀵煎嚭闂 浼氬垹闄ゅ悗闈㈠唴瀹瑰啀杩涜杩涜濉厖
+            // 鎵�浠ist 鍚庨潰杩樻湁鏁版嵁 鎯冲姙娉曟墜鍔ㄥ啓鍏�
+            // 鎵嬪姩鍒涘缓涓�涓猯ist 瀛樻斁鏁版嵁 鐒跺悗鍐嶈繘琛屽~鍏�
+            // 杩欓噷List<Object>鍙互鐢ㄥ璞′唬鏇� 鍋锋噿鐢╨ist
+            List<List<Object>> totalListList = ListUtils.newArrayList();
+            List<Object> totalList = ListUtils.newArrayList();
+            totalListList.add(totalList);
+            // 绗竴鍒�
+            totalList.add("缂栧埗浜猴細");
+            // 绗簩鍒� 璁剧疆绛惧悕
+            if (StringUtils.isNotBlank(writeUserUrl)) {
+                totalList.add(FileUtils.readFileToByteArray(new File(writeUserUrl)));
+            }
+            // 绗笁鍒�
+            totalList.add("鏃ユ湡锛�");
+            // 绗簲鍒�
+            totalList.add(writeDate);
+            // 绗叚鍒�
+            totalList.add("瀹℃牳锛�");
+            // 绗竷鍒�
+            if (StringUtils.isNotBlank(ratifyUserUrl)) {
+                totalList.add(FileUtils.readFileToByteArray(new File(ratifyUserUrl)));
+            }
+            // 绗叓鍒�
+            totalList.add("鏃ユ湡锛�");
+            // 绗節鍒�
+            totalList.add(ratifyDate);
+            // 杩欓噷杩藉姞鏄痺rite 鍒拰fill 鎼為敊浜�
+            excelWriter.write(totalListList, writeSheet);
+
+            // 璁剧疆杈撳嚭娴佹牸寮忎互鍙婃枃浠跺悕锛�
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            String fileName = URLEncoder.encode(
+                    "鍘熸潗鏂欐娴嬩俊鎭鍑�", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".xlsx");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            // 鍗冧竾鍒繕璁癱lose鍏抽棴娴�
+            if (excelWriter != null) {
+                excelWriter.close();
+
+            }
+        }
+    }
+
+
+    /**
+     * 瀵煎叆鏍囧噯鏌ユ柊
+     *
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean importMethodSearchNew(MultipartFile file) {
+
+        List<ProcessMethodSearchNewBackupsDto> searchNewDtoList = new ArrayList<>();
+
+        try {
+            // excel瑙f瀽
+            EasyExcel.read(file.getInputStream(), ProcessMethodSearchNewBackupsDto.class, new AnalysisEventListener<ProcessMethodSearchNewBackupsDto>() {
+                @Override
+                public void invoke(ProcessMethodSearchNewBackupsDto searchNewDto, AnalysisContext analysisContext) {
+                    searchNewDtoList.add(searchNewDto);
+                }
+
+                @Override
+                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+                }
+            }).sheet().doRead();
+            // 鏍煎紡鍖栨煡鏂板璞�
+            List<ProcessMethodSearchNew> collect = searchNewDtoList.stream().map(searchNewDto -> {
+                ProcessMethodSearchNew searchNew = new ProcessMethodSearchNew();
+                BeanUtils.copyProperties(searchNewDto, searchNew);
+                // 鏄惁鏄洿鏂�
+                if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
+                    if (searchNewDto.getIsNewStandardString().equals("鏄�")) {
+                        searchNew.setIsNewStandard(1);
+                    } else {
+                        searchNew.setIsNewStandard(0);
+                    }
+                }
+                // 鏌ユ柊璁板綍
+                if (StringUtils.isNotBlank(searchNewDto.getStandardNet())) {
+                    searchNew.setSearchNewSource(0);
+                } else if (StringUtils.isNotBlank(searchNewDto.getInformationOffices())) {
+                    searchNew.setSearchNewSource(1);
+                } else if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
+                    searchNew.setSearchNewSource(2);
+                } else if (StringUtils.isNotBlank(searchNewDto.getOther())) {
+                    searchNew.setSearchNewSource(3);
+                }
+
+                // 澶囨敞
+                if (StringUtils.isNotBlank(searchNewDto.getRemarkString())) {
+                    if (searchNewDto.getRemarkString().equals("鏇挎崲")) {
+                        searchNew.setRemark(1);
+                    } else if (searchNewDto.getRemarkString().equals("浣滃簾")) {
+                        searchNew.setRemark(0);
+                    }
+                }
+
+                return searchNew;
+            }).collect(Collectors.toList());
+            this.saveBatch(collect);
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return true;
+    }
+
+    /**
+     * 鏂板鏍囧噯鏌ユ柊瀹℃壒娴佺▼
+     * @param archived
+     * @return
+     */
+    @Override
+    public boolean addSearchNewArchived(ProcessMethodSearchNewArchived archived) {
+        // 鏂板瀛樻。
+        Integer userId = SecurityUtils.getUserId().intValue();
+        archived.setWriteUserId(userId);
+        archived.setWriteTime(LocalDateTime.now());
+        processMethodSearchNewArchivedMapper.insert(archived);
+
+        // 鏌ヨ鎵�鏈夌殑鏍囧噯鏌ユ柊
+        List<ProcessMethodSearchNew> searchNewList = this.list();
+
+        // 鏂板澶嶅埗
+        List<ProcessMethodSearchNewBackups> methodSearchNewBackups = searchNewList.stream().map(processMethodSearchNew -> {
+            ProcessMethodSearchNewBackups backups = new ProcessMethodSearchNewBackups();
+            BeanUtils.copyProperties(processMethodSearchNew, backups);
+            backups.setArchivedId(archived.getArchivedId());
+            return backups;
+        }).collect(Collectors.toList());
+        processMethodSearchNewBackupsService.saveBatch(methodSearchNewBackups);
+
+        return true;
+    }
+
+    /**
+     * 鏌ヨ瀛樻。
+     * @param page
+     * @param archived
+     * @return
+     */
+    @Override
+    public IPage<ProcessMethodSearchNewArchivedDto> pageSearchNewArchived(Page page, ProcessMethodSearchNewArchivedDto archived) {
+        return processMethodSearchNewArchivedMapper.pageSearchNewArchived(page, QueryWrappers.queryWrappers(archived));
+    }
+
+    /**
+     * 鏌ヨ瀛樻。澶囦唤鍒楄〃
+     * @param page
+     * @param backups
+     * @return
+     */
+    @Override
+    public IPage<ProcessMethodSearchNewBackups> pageSearchNewBackups(Page page, ProcessMethodSearchNewBackups backups) {
+        if (backups.getArchivedId() == null) {
+            throw new ErrorException("缂哄皯瀛樻。id");
+        }
+        return processMethodSearchNewBackupsMapper.pageSearchNewBackups(page, QueryWrappers.queryWrappers(backups));
+    }
+
+    /**
+     * 瀛樻。鎵瑰噯
+     * @param archived
+     * @return
+     */
+    @Override
+    public boolean ratifySearchNewArchivedr(ProcessMethodSearchNewArchived archived) {
+        // 褰撳墠鐧诲綍鐢ㄦ埛
+        Integer userId = SecurityUtils.getUserId().intValue();
+        processMethodSearchNewArchivedMapper.update(null, Wrappers.<ProcessMethodSearchNewArchived>lambdaUpdate()
+                .eq(ProcessMethodSearchNewArchived::getArchivedId, archived.getArchivedId())
+                .set(ProcessMethodSearchNewArchived::getRatifyUserId, userId)
+                .set(ProcessMethodSearchNewArchived::getRatifyRemark, archived.getRatifyRemark())
+                .set(ProcessMethodSearchNewArchived::getRatifyStatus, archived.getRatifyStatus())
+                .set(ProcessMethodSearchNewArchived::getRatifyTime, LocalDateTime.now())
+        );
+        return true;
+    }
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMachineAttachmentServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMachineAttachmentServiceImpl.java
new file mode 100644
index 0000000..67ff06c
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMachineAttachmentServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.ProcessMethodVerifyMachineAttachmentMapper;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMachineAttachment;
+import com.ruoyi.process.service.ProcessMethodVerifyMachineAttachmentService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉璁惧闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@Service
+public class ProcessMethodVerifyMachineAttachmentServiceImpl extends ServiceImpl<ProcessMethodVerifyMachineAttachmentMapper, ProcessMethodVerifyMachineAttachment> implements ProcessMethodVerifyMachineAttachmentService {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMethodFileServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMethodFileServiceImpl.java
new file mode 100644
index 0000000..9a68506
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMethodFileServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.ProcessMethodVerifyMethodFileMapper;
+import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
+import com.ruoyi.process.service.ProcessMethodVerifyMethodFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉(娉�)闄勪欢琛�
+ *
+ * @author makejava
+ * @since 2024-11-05
+ */
+@Service
+public class ProcessMethodVerifyMethodFileServiceImpl extends ServiceImpl<ProcessMethodVerifyMethodFileMapper, ProcessMethodVerifyMethodFile> implements ProcessMethodVerifyMethodFileService {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyServiceImpl.java
new file mode 100644
index 0000000..ada2339
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyServiceImpl.java
@@ -0,0 +1,454 @@
+package com.ruoyi.process.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+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.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.PictureRenderData;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.process.dto.ProcessMethodVerifyDto;
+import com.ruoyi.process.dto.ProcessMethodVerifyExportWordDto;
+import com.ruoyi.process.mapper.ProcessMethodVerifyCalibrationsFileMapper;
+import com.ruoyi.process.mapper.ProcessMethodVerifyMapper;
+import com.ruoyi.process.mapper.ProcessMethodVerifyWorkFileMapper;
+import com.ruoyi.process.pojo.*;
+import com.ruoyi.process.service.*;
+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.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;
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ProcessMethodVerifyServiceImpl extends ServiceImpl<ProcessMethodVerifyMapper, ProcessMethodVerify> implements ProcessMethodVerifyService {
+
+    @Resource
+    private ProcessMethodVerifyCalibrationsFileService processMethodVerifyCalibrationsFileService;
+    @Resource
+    private ProcessMethodVerifyMethodFileService processMethodVerifyMethodFileService;
+    @Resource
+    private ProcessMethodVerifyWorkFileService processMethodVerifyWorkFileService;
+    @Resource
+    private ProcessMethodVerifyMachineAttachmentService processMethodVerifyMachineAttachmentService;
+    @Resource
+    private ProcessMethodVerifyCalibrationsFileMapper processMethodVerifyCalibrationsFileMapper;
+    @Resource
+    private ProcessMethodVerifyWorkFileMapper processMethodVerifyWorkFileMapper;
+    @Resource
+    private DeviceMapper deviceMapper;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+
+    /**
+     * 鏍囧噯鏂规硶璺熸柊楠岃瘉淇敼
+     *
+     * @param page
+     * @param methodVerifyDto
+     * @return
+     */
+    @Override
+    public IPage<ProcessMethodVerify> pagesMethodVerify(Page page, ProcessMethodVerifyDto methodVerifyDto) {
+        if (methodVerifyDto.getOperationType() == null) {
+            throw new ErrorException("璇烽�夋嫨鏄彉鏇磋繕鏄獙璇�");
+        }
+        return baseMapper.pagesMethodVerify(page, QueryWrappers.queryWrappers(methodVerifyDto));
+    }
+
+    /**
+     * 鏂板鏍囧噯鏂规硶楠岃瘉
+     *
+     * @param methodVerifyDto
+     * @return
+     */
+    @Override
+    public boolean addMethodSearchNew(ProcessMethodVerifyDto methodVerifyDto) {
+        if (methodVerifyDto.getOperationType() == null) {
+            throw new ErrorException("璇烽�夋嫨鏄彉鏇磋繕鏄獙璇�");
+        }
+        // 鏂板
+        baseMapper.insert(methodVerifyDto);
+
+        // 鍒ゆ柇纭浜烘槸鍚︿负绌�
+        if (StringUtils.isNotBlank(methodVerifyDto.getConfirmUser())) {
+            // 娣诲姞涓婂矖璇�
+            this.addWorkFile(methodVerifyDto);
+        }
+
+        // 鏂板璁惧淇℃伅
+        if (CollectionUtils.isNotEmpty(methodVerifyDto.getMachineAttachmentList())) {
+            this.addDevice(methodVerifyDto);
+        }
+
+        return true;
+    }
+
+    /**
+     * 鏌ヨ鏍囧噯鏂规硶楠岃瘉璇︽儏
+     *
+     * @param methodVerifyId
+     * @return
+     */
+    @Override
+    public ProcessMethodVerifyDto getMethodVerifyOne(Integer methodVerifyId) {
+        ProcessMethodVerify processMethodVerify = baseMapper.selectById(methodVerifyId);
+        ProcessMethodVerifyDto processMethodVerifyDto = new ProcessMethodVerifyDto();
+        BeanUtil.copyProperties(processMethodVerify, processMethodVerifyDto);
+
+        // 鏌ヨ璁惧璇︽儏
+        processMethodVerifyDto.setMachineAttachmentList(processMethodVerifyMachineAttachmentService.list(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
+                .eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId)));
+        // 鏌ヨ鍘熷璁板綍
+        processMethodVerifyDto.setMethodFileList(processMethodVerifyMethodFileService.list(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
+                .eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId)));
+        // 鏌ヨ涓婂矖璇�
+        processMethodVerifyDto.setWorkFileList(processMethodVerifyWorkFileService.list(Wrappers.<ProcessMethodVerifyWorkFile>lambdaQuery()
+                .eq(ProcessMethodVerifyWorkFile::getMethodVerifyId, methodVerifyId)));
+        // 鏌ヨ鏍″噯璇佷功
+        processMethodVerifyDto.setCalibrationsFileList(processMethodVerifyCalibrationsFileMapper.selectCalibrationsFileList(methodVerifyId));
+
+
+        return processMethodVerifyDto;
+    }
+
+    /**
+     * 淇敼鏍囧噯鏂规硶楠岃瘉
+     *
+     * @param methodVerifyDto
+     * @return
+     */
+    @Override
+    public boolean updateMethodVerify(ProcessMethodVerifyDto methodVerifyDto) {
+        baseMapper.updateById(methodVerifyDto);
+
+        // 鍒犻櫎涓婂矖璇�
+        processMethodVerifyWorkFileService.remove(Wrappers.<ProcessMethodVerifyWorkFile>lambdaQuery()
+                .eq(ProcessMethodVerifyWorkFile::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
+
+        // 鍒犻櫎鍘熸湰璁惧璇︽儏
+        processMethodVerifyMachineAttachmentService.remove(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
+                .eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
+
+        // 鍒犻櫎鍏冩牎鍑嗚瘉涔�
+        processMethodVerifyCalibrationsFileService.remove(Wrappers.<ProcessMethodVerifyCalibrationsFile>lambdaQuery()
+                .eq(ProcessMethodVerifyCalibrationsFile::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
+
+        // 鍒ゆ柇纭浜烘槸鍚︿负绌�
+        if (StringUtils.isNotBlank(methodVerifyDto.getConfirmUser())) {
+            // 娣诲姞涓婂矖璇�
+            this.addWorkFile(methodVerifyDto);
+        }
+
+        // 鏂板璁惧淇℃伅
+        if (CollectionUtils.isNotEmpty(methodVerifyDto.getMachineAttachmentList())) {
+            this.addDevice(methodVerifyDto);
+        }
+        return true;
+    }
+
+    /**
+     * 鍒犻櫎鏍囧噯鏂规硶楠岃瘉
+     *
+     * @param methodVerifyId
+     * @return
+     */
+    @Override
+    public boolean delMethodVerify(Integer methodVerifyId) {
+        // 鍒犻櫎鎵�鏈夎澶�
+        processMethodVerifyMachineAttachmentService.remove(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
+                .eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId));
+
+        // 鍒犻櫎鎵�鏈夊師濮嬭褰�
+        processMethodVerifyMethodFileService.remove(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
+                .eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId));
+
+
+        baseMapper.deleteById(methodVerifyId);
+
+        return true;
+    }
+
+    /**
+     * 鏂规硶楠岃瘉纭
+     *
+     * @param methodVerifyId
+     * @return
+     */
+    @Override
+    public boolean methodVerifyAffirm(Integer methodVerifyId) {
+        baseMapper.update(null, Wrappers.<ProcessMethodVerify>lambdaUpdate()
+                .set(ProcessMethodVerify::getConfirmDate, LocalDateTime.now())
+                .eq(ProcessMethodVerify::getMethodVerifyId, methodVerifyId));
+        return true;
+    }
+
+    /**
+     * 鏂规硶楠岃瘉鏂板鍘熷璁板綍
+     *
+     * @param methodVerifyId
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean uploadVerifyMethodFile(Integer methodVerifyId, MultipartFile file) {
+        if (methodVerifyId == null) {
+            throw new ErrorException("缂哄皯鍘熷璁板綍id");
+        }
+
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        ProcessMethodVerifyMethodFile methodFile = new ProcessMethodVerifyMethodFile();
+        methodFile.setMethodVerifyId(methodVerifyId);
+        methodFile.setFileName(filename);
+        if (contentType != null && contentType.startsWith("image/")) {
+            // 鏄浘鐗�
+            path = imgUrl;
+            methodFile.setType(1);
+        } else {
+            // 鏄枃浠�
+            path = wordUrl;
+            methodFile.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));
+            methodFile.setFileUrl(pathName);
+            return processMethodVerifyMethodFileService.save(methodFile);
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("闄勪欢涓婁紶閿欒");
+            return false;
+        }
+    }
+
+    /**
+     * 鏍囧噯鏂规硶楠岃瘉鍘熷璁板綍鍒楄〃
+     *
+     * @param methodVerifyId
+     * @return
+     */
+    @Override
+    public List<ProcessMethodVerifyMethodFile> getVerifyMethodFileList(Integer methodVerifyId) {
+        return processMethodVerifyMethodFileService.list(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
+                .eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId));
+    }
+
+    /**
+     * 瀵煎嚭鏍囧噯鏂规硶鏇存柊楠岃瘉
+     *
+     * @param methodVerifyId 鏍囧噯鏂规硶楠岃瘉id
+     * @param response
+     */
+    @Override
+    public void exportMethodVerify(Integer methodVerifyId, HttpServletResponse response) {
+        // 鑾峰彇鏍囧噯鏂规硶鏇存柊楠岃瘉鏁版嵁
+        ProcessMethodVerify processMethodVerify = baseMapper.selectById(methodVerifyId);
+
+        // 灏嗗唴閮ㄥ瓧娈佃浆鎹㈡垚灞曠ず鍒皐ord涓殑瀵硅薄
+        ProcessMethodVerifyExportWordDto exportWordTemplate = getExportWordTemplate(processMethodVerify);
+
+        // 瀹氫箟涓�涓泦鍚堝瓨鏀句汉鍛樼鍚�
+        ArrayList<PictureRenderData> pictureRenderDataList = new ArrayList<>();
+        // TODO:纭鏈�澶氫細鏈�5涓汉
+        String confirmUser = processMethodVerify.getConfirmUser();
+        if (StringUtils.isNotBlank(confirmUser)) {
+            // 瀵逛汉鍛榠d瀛楃涓茶繘琛屽垎鍓叉垚鏁扮粍
+            String[] userIds = confirmUser.split(",");
+            // 寰幆鑾峰彇浜哄憳绛惧悕
+            for (String userIdStr : userIds) {
+                // 杞崲涓篿nt绫诲瀷
+                Integer userId = Integer.valueOf(userIdStr);
+                // 鑾峰彇浜哄憳绛惧悕瀵硅薄
+                PictureRenderData finalUserSignatureUrl = UserUtils.getFinalUserSignatureUrl(userId);
+                // 灏嗕汉鍛樼鍚嶅璞℃坊鍔犲埌闆嗗悎涓�
+                pictureRenderDataList.add(finalUserSignatureUrl);
+            }
+        }
+
+        // 鍒ゆ柇闆嗗悎闀垮害锛屽苟琛ull鍒�5涓�
+        while (pictureRenderDataList.size() < 5) {
+            pictureRenderDataList.add(null);
+        }
+
+        // 鑾峰彇璁惧淇℃伅
+        List<ProcessMethodVerifyMachineAttachment> processMethodVerifyMachineAttachmentList = processMethodVerifyMachineAttachmentService.list(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
+                .eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId));
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/method-verify.docx");
+        Configure configure = Configure.builder()
+                .bind("processMethodVerifyMachineAttachmentList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("processMethodVerify", exportWordTemplate);
+                    put("processMethodVerifyMachineAttachmentList", processMethodVerifyMachineAttachmentList);
+                    put("affirmUserUrl1", pictureRenderDataList.get(0));
+                    put("affirmUserUrl2", pictureRenderDataList.get(1));
+                    put("affirmUserUrl3", pictureRenderDataList.get(2));
+                    put("affirmUserUrl4", pictureRenderDataList.get(3));
+                    put("affirmUserUrl5", pictureRenderDataList.get(4));
+                }});
+
+        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("瀵煎嚭澶辫触");
+        }
+    }
+
+    private ProcessMethodVerifyExportWordDto getExportWordTemplate(ProcessMethodVerify processMethodVerify) {
+        ProcessMethodVerifyExportWordDto processMethodVerifyExportWordDto = new ProcessMethodVerifyExportWordDto();
+        BeanUtil.copyProperties(processMethodVerify, processMethodVerifyExportWordDto);
+        // 锛堜汉锛夋槸鍚︽弧瓒�
+        if (processMethodVerify.getPersonIsSatisfied() != null) {
+            processMethodVerifyExportWordDto.setPersonIsSatisfiedStr(processMethodVerify.getPersonIsSatisfied() == 1 ? "鈭�" : "脳");
+        }
+        // 锛堟満锛夋槸鍚︽弧瓒�
+        if (processMethodVerify.getMachineIsSatisfied() != null) {
+            processMethodVerifyExportWordDto.setMachineIsSatisfiedStr(processMethodVerify.getMachineIsSatisfied() == 1 ? "鈭�" : "脳");
+        }
+        // 锛堟枡锛夋槸鍚︽弧瓒�
+        if (processMethodVerify.getMaterialIsSatisfied() != null) {
+            processMethodVerifyExportWordDto.setMaterialIsSatisfiedStr(processMethodVerify.getMaterialIsSatisfied() == 1 ? "鈭�" : "脳");
+        }
+        // 锛堟硶锛夋槸鍚︽弧瓒�
+        if (processMethodVerify.getMethodIsSatisfied() != null) {
+            processMethodVerifyExportWordDto.setMethodIsSatisfiedStr(processMethodVerify.getMethodIsSatisfied() == 1? "鈭�" : "脳");
+        }
+        // 锛堢幆锛夋槸鍚︽弧瓒�
+        if (processMethodVerify.getEnvironmentIsSatisfied() != null) {
+            processMethodVerifyExportWordDto.setEnvironmentIsSatisfiedStr(processMethodVerify.getEnvironmentIsSatisfied() == 1 ? "鈭�" : "脳");
+        }
+        // 锛堟祴閲忔函婧愭�э級鏄惁婊¤冻
+        if (processMethodVerify.getTraceabilityIsSatisfied() != null) {
+            processMethodVerifyExportWordDto.setTraceabilityIsSatisfiedStr(processMethodVerify.getTraceabilityIsSatisfied() == 1 ? "鈭�" : "脳");
+        }
+        // 锛堟牱鍝佺鐞嗛渶姹傦級鏄惁婊¤冻
+        if (processMethodVerify.getManagementIsSatisfied() != null) {
+            processMethodVerifyExportWordDto.setManagementIsSatisfiedStr(processMethodVerify.getManagementIsSatisfied() == 1 ? "鈭�" : "脳");
+        }
+        // 锛堝叾浠栵級鏄惁婊¤冻
+        if (processMethodVerify.getOtherIsSatisfied() != null) {
+            processMethodVerifyExportWordDto.setOtherIsSatisfiedStr(processMethodVerify.getOtherIsSatisfied() == 1 ? "鈭�" : "脳");
+        }
+        // 纭鏃ユ湡
+        processMethodVerifyExportWordDto.setConfirmDateStr(processMethodVerify.getConfirmDate() != null ? processMethodVerify.getConfirmDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")): null);
+        return processMethodVerifyExportWordDto;
+    }
+
+
+    /**
+     * 娣诲姞涓婂矖璇�
+     *
+     * @param methodVerifyDto
+     */
+    private void addWorkFile(ProcessMethodVerifyDto methodVerifyDto) {
+        List<String> confirmUserIds = StrUtil.split(methodVerifyDto.getConfirmUser(), ",");
+        List<ProcessMethodVerifyWorkFile> workFileList = new ArrayList<>();
+        for (String confirmUserId : confirmUserIds) {
+            Integer userId = Integer.valueOf(confirmUserId);
+            String workName = processMethodVerifyWorkFileMapper.selectWorkFile(userId);
+            // 鍒ゆ柇鏄惁鏈夎瘉涔�
+            if (StringUtils.isNotBlank(workName)) {
+                User user = userMapper.selectById(userId);
+                ProcessMethodVerifyWorkFile workFile = new ProcessMethodVerifyWorkFile();
+                workFile.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
+                workFile.setType(1);
+                workFile.setFileUrl(workName);
+                workFile.setFileName(workName);
+                workFile.setUserId(user.getId());
+                workFile.setUserName(user.getName());
+                workFileList.add(workFile);
+            }
+        }
+        if (CollectionUtils.isNotEmpty(workFileList)) {
+            processMethodVerifyWorkFileService.saveBatch(workFileList);
+        }
+    }
+
+    /**
+     * 娣诲姞璁惧淇℃伅
+     *
+     * @param methodVerifyDto
+     */
+    private void addDevice(ProcessMethodVerifyDto methodVerifyDto) {
+        List<ProcessMethodVerifyCalibrationsFile> calibrationsFiles = new ArrayList<>();
+        for (ProcessMethodVerifyMachineAttachment machineAttachment : methodVerifyDto.getMachineAttachmentList()) {
+            machineAttachment.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
+            // 鏌ヨ鏍″噯璇佷功
+            String calibrationsName = processMethodVerifyCalibrationsFileMapper.selectCalibrationsFile(machineAttachment.getDeviceId());
+            // 鍒ゆ柇鏄惁鏈夎瘉涔�
+            if (StringUtils.isNotBlank(calibrationsName)) {
+                ProcessMethodVerifyCalibrationsFile calibrationsFile = new ProcessMethodVerifyCalibrationsFile();
+                calibrationsFile.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
+                calibrationsFile.setType(1);
+                calibrationsFile.setFileUrl(calibrationsName);
+                calibrationsFile.setFileName(calibrationsName);
+                calibrationsFile.setDeviceId((machineAttachment.getDeviceId()));
+                calibrationsFiles.add(calibrationsFile);
+            }
+        }
+        // 娣诲姞鏍″噯璇佷功
+        processMethodVerifyCalibrationsFileService.saveBatch(calibrationsFiles);
+
+        // 娣诲姞璁惧
+        processMethodVerifyMachineAttachmentService.saveBatch(methodVerifyDto.getMachineAttachmentList());
+    }
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
new file mode 100644
index 0000000..7a45959
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
@@ -0,0 +1,423 @@
+package com.ruoyi.process.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.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.process.mapper.ProcessReportMapper;
+import com.ruoyi.process.pojo.ProcessReport;
+import com.ruoyi.process.service.ProcessReportService;
+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.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-05 08:58:39
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ProcessReportServiceImpl extends ServiceImpl<ProcessReportMapper, ProcessReport> implements ProcessReportService {
+
+    @Resource
+    private ProcessReportMapper processReportMapper;
+
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<ProcessReport> pageProcessReport(Page page, ProcessReport processReport) {
+        //todo 浠呯湅鎴�
+        IPage<ProcessReport> processReportIPage = processReportMapper.pageProcessReport(page, QueryWrappers.queryWrappers(processReport));
+//        for (ProcessReport record : processReportIPage.getRecords()) {
+//            List<String> name = new ArrayList<>();
+//            for (String s : record.getSignatory().split(",")) {
+//                User user = userMapper.selectById(Integer.parseInt(s));
+//                name.add(user.getName());
+//            }
+//            String signatoryName = name.stream().collect(Collectors.joining(","));
+//            record.setSignatoryName(signatoryName);
+//        }
+
+        return processReportIPage;
+    }
+
+    @Override
+    public String exportProcessReport(List<Integer> ids) {
+        List<ProcessReport> processReports = processReportMapper.getIds(ids);
+        for (ProcessReport processReport : processReports) {
+            List<String> name = new ArrayList<>();
+            for (String s : processReport.getSignatory().split(",")) {
+                User user = userMapper.selectById(Integer.parseInt(s));
+                name.add(user.getName());
+            }
+            String signatoryName = name.stream().collect(Collectors.joining(","));
+            processReport.setSignatoryName(signatoryName);
+        }
+        //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/report-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>> reportList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < processReports.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("妫�楠屾姤鍛婄紪鍙稝Inspection report number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒�
+                                textRenderData.setText("椤垫暟@Pages");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒�
+                                textRenderData.setText("鍙戦�佷唤鏁癅Number of copies sent");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒�
+                                textRenderData.setText("鍙戝線浣曞@Where to send to");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒�
+                                textRenderData.setText("鍙戦�佹柟寮廆Send method");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                //绗竷鍒�
+                                textRenderData.setText("鍙戦�佹棩鏈烜Date sent");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }else if (j == 7) {
+                                //绗叓鍒�
+                                textRenderData.setText("鍙戦�佷汉@Sender");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }else if (j == 8) {
+                                //绗節鍒�
+                                textRenderData.setText("绛炬敹浜篅Signatory");
+                                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 = processReports.get((i-1) + (index1 - 1) * 20).getInsReportCode();
+                                    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(processReports.get((i-1) + (index1 - 1) * 20).getInsReportCode());
+                                } 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(processReports.get((i-1) + (index1 - 1) * 20).getPages());
+                                } 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(processReports.get((i-1) + (index1 - 1) * 20).getNumber());
+                                } 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(processReports.get((i-1) + (index1 - 1) * 20).getSend());
+                                } 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(processReports.get((i-1) + (index1 - 1) * 20).getMethod());
+                                } 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(processReports.get((i-1) + (index1 - 1) * 20).getSendTime()+"");
+                                } 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(processReports.get((i-1) + (index1 - 1) * 20).getSendUserName());
+                                } 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(processReports.get((i-1) + (index1 - 1) * 20).getSignatoryName());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else {
+                                try{
+                                    textRenderData.setText(processReports.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("report", tableRenderData);
+                table.put("index1", index1);
+                reportList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("reportList", reportList);
+                }});
+        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-process/src/main/java/com/ruoyi/process/service/impl/ProcessSampleServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessSampleServiceImpl.java
new file mode 100644
index 0000000..e351b93
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessSampleServiceImpl.java
@@ -0,0 +1,94 @@
+package com.ruoyi.process.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.process.mapper.ProcessSampleMapper;
+import com.ruoyi.process.mapper.ProcessTotalSampleMapper;
+import com.ruoyi.process.pojo.ProcessSample;
+import com.ruoyi.process.pojo.ProcessTotalSample;
+import com.ruoyi.process.service.ProcessSampleService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-12 05:02:49
+ */
+@Service
+public class ProcessSampleServiceImpl extends ServiceImpl<ProcessSampleMapper, ProcessSample> implements ProcessSampleService {
+
+    @Resource
+    private ProcessSampleMapper processSampleMapper;
+
+    @Resource
+    private ProcessTotalSampleMapper processTotalSampleMapper;
+
+
+
+    @Override
+    public IPage<ProcessSample> pageProcessSample(Page page, ProcessSample processSample) {
+        //todo锛氫粎鐪嬫垜
+        if (ObjectUtils.isEmpty(processSample.getTotalSampleId())) {
+            //鑾峰彇褰撳墠鏈堜唤
+            LocalDate currentDate = LocalDate.now();
+            // 瀹氫箟鏃ユ湡鏍煎紡
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+            // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+            String currentMonth = currentDate.format(formatter);
+            //鏌ヨ鍘嗗彶
+            ProcessTotalSample processTotalSample = processTotalSampleMapper.selectOne(Wrappers.<ProcessTotalSample>lambdaQuery().eq(ProcessTotalSample::getMonth, currentMonth));
+            processSample.setTotalSampleId(processTotalSample.getId());
+        }
+        return processSampleMapper.pageProcessSample(page, QueryWrappers.queryWrappers(processSample));
+    }
+
+    @Override
+    public int addProcessSample(ProcessSample processSample) {
+        ProcessTotalSample processTotalSample;
+        if (ObjectUtils.isEmpty(processSample.getTotalSampleId())){
+            LocalDate dealTime = LocalDate.now();
+            // 瀹氫箟鏃ユ湡鏍煎紡
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+            // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+            String currentMonth = dealTime.format(formatter);
+            processTotalSample= processTotalSampleMapper.selectOne(Wrappers.<ProcessTotalSample>lambdaQuery().eq(ProcessTotalSample::getMonth,currentMonth));
+            processSample.setTotalSampleId(processTotalSample.getId());
+        }else {
+            processTotalSample= processTotalSampleMapper.selectById(processSample.getTotalSampleId());
+        }
+        processSampleMapper.insert(processSample);
+        processTotalSample.setTotalNum(processSample.getNum()+processTotalSample.getTotalNum());
+        return processTotalSampleMapper.updateById(processTotalSample);
+    }
+
+    @Override
+    public int delProcessSample(Integer id) {
+        ProcessSample processSample = processSampleMapper.selectById(id);
+        processSampleMapper.deleteById(id);
+        ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(processSample.getTotalSampleId());
+        processTotalSample.setTotalNum(processTotalSample.getTotalNum()-processSample.getNum());
+        return processTotalSampleMapper.updateById(processTotalSample);
+    }
+
+    @Override
+    public int doProcessSample(ProcessSample processSample) {
+        if (ObjectUtils.isNotEmpty(processSample.getNum())) {
+            ProcessSample oldProcessSample = processSampleMapper.selectById(processSample.getId());
+            ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(processSample.getTotalSampleId());
+            processTotalSample.setTotalNum(processTotalSample.getTotalNum() - oldProcessSample.getNum() + processSample.getNum());
+            processTotalSampleMapper.updateById(processTotalSample);
+        }
+        return processSampleMapper.updateById(processSample);
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotalSampleServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotalSampleServiceImpl.java
new file mode 100644
index 0000000..c7e19dc
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotalSampleServiceImpl.java
@@ -0,0 +1,437 @@
+package com.ruoyi.process.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.process.mapper.ProcessSampleMapper;
+import com.ruoyi.process.mapper.ProcessTotalSampleMapper;
+import com.ruoyi.process.pojo.ProcessSample;
+import com.ruoyi.process.pojo.ProcessTotalSample;
+import com.ruoyi.process.service.ProcessTotalSampleService;
+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 javax.annotation.Resource;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+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-12-12 05:02:58
+ */
+@Service
+public class ProcessTotalSampleServiceImpl extends ServiceImpl<ProcessTotalSampleMapper, ProcessTotalSample> implements ProcessTotalSampleService {
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Resource
+    private ProcessTotalSampleMapper processTotalSampleMapper;
+
+    @Resource
+    private ProcessSampleMapper processSampleMapper;
+
+    @Override
+    public IPage<ProcessTotalSample> pageProcessTotalSample(Page page, ProcessTotalSample processTotalSample) {
+
+        return processTotalSampleMapper.pageProcessTotalSample(page, QueryWrappers.queryWrappers(processTotalSample));
+    }
+
+    @Override
+    public int submitProcessTotalSample(Integer id) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒板~琛ㄤ汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(id);
+        processTotalSample.setSubmitUser(userId);
+        processTotalSample.setSubmitState("宸叉彁浜�");
+        processTotalSample.setSubmitUrl(user.getSignatureUrl());
+        //鐢熸垚鏍峰搧澶勭悊鐢宠琛ㄥ苟灏嗗~琛ㄤ汉鐨勭數瀛愮鍚嶅嵃涓�
+        processTotalSample.setUrl(processTotalSample(id,user.getSignatureUrl()));
+        return processTotalSampleMapper.updateById(processTotalSample);
+    }
+
+    @Override
+    public int checkProcessTotalSample(Integer id, String state) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒板鏍镐汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(id);
+        processTotalSample.setExamineUser(userId);
+        processTotalSample.setExamineState(state);
+        processTotalSample.setExamineUrl(user.getSignatureUrl());
+        if (state.equals("涓嶉�氳繃")) {
+            processTotalSample.setSubmitState("寰呮彁浜�");
+        }
+        //灏嗗鏍镐汉鐨勭數瀛愮鍚嶅嵃涓�
+        wordInsertUrl(new HashMap<String, Object>() {{
+            put("examineUrl", new FilePictureRenderData(100,50,imgUrl + "/" + user.getSignatureUrl()));
+        }},  wordUrl+"/"+processTotalSample.getUrl());
+        return processTotalSampleMapper.updateById(processTotalSample);
+    }
+
+    @Override
+    public int ratifyProcessTotalSample(Integer id, String state) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒版壒鍑嗕汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(id);
+        processTotalSample.setRatifyUser(userId);
+        processTotalSample.setRatifyState(state);
+        processTotalSample.setRatifyUrl(user.getSignatureUrl());
+        if (state.equals("涓嶉�氳繃")) {
+            processTotalSample.setSubmitState("寰呮彁浜�");
+        }
+        //灏嗘壒鍑嗕汉鐨勭鍚嶅嵃涓�
+        wordInsertUrl(new HashMap<String, Object>() {{
+            put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + user.getSignatureUrl()));
+        }},  wordUrl+"/"+processTotalSample.getUrl());
+        return processTotalSampleMapper.updateById(processTotalSample);
+    }
+
+    //鐢熸垚鏍峰搧澶勭悊琛╳ord
+    private String processTotalSample(Integer id,String signatureUrl){
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+        List<ProcessSample> processSamples = processSampleMapper.selectList(Wrappers.<ProcessSample>lambdaQuery().eq(ProcessSample::getTotalSampleId,id));
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/sample-receive.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>> sampleList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < processSamples.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 < 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("鏀舵牱鏃ユ湡@Date of receipt");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 1) {
+                                //绗簩鍒楁牱鍝佸悕绉�
+                                textRenderData.setText("鏍峰搧缂栧彿@Sample number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒楁牱鍝佺紪鍙�
+                                textRenderData.setText("鏍峰搧鍚嶇О@Sample name");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒椾緵鏍峰崟浣�
+                                textRenderData.setText("鏍峰搧鏁伴噺@Number of samples");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒楁暟閲�
+                                textRenderData.setText("鏉ユ牱鍗曚綅@Sample unit");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒楀鐞嗘柟寮�
+                                textRenderData.setText("鐣欐牱鏃ユ湡@Sample retention date");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 6) {
+                                //绗叚鍒楀鐞嗘柟寮�
+                                textRenderData.setText("鏍峰搧鐘舵�丂Sample status");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else {
+                                //绗竷鍒楁椂闂�
+                                textRenderData.setText("閫�鏍风鏀跺拰/鎴栧鐞嗘棩鏈烜Return signature and/or processing date");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                        else {
+                            //鍏朵粬琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                try{
+                                    String receiveDate = processSamples.get((i-1) + (index1 - 1) * 20).getReceiveDate().format(formatter);
+                                    textRenderData.setText(receiveDate);
+                                } 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(processSamples.get((i-1) + (index1 - 1) * 20).getSampleCode());
+                                } 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(processSamples.get((i-1) + (index1 - 1) * 20).getSampleName());
+                                } 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(processSamples.get((i-1) + (index1 - 1) * 20).getNum()+"");
+                                } 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(processSamples.get((i-1) + (index1 - 1) * 20).getSampleSupplier());
+                                } 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(processSamples.get((i-1) + (index1 - 1) * 20).getLeaveDate().format(formatter));
+                                } 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(processSamples.get((i-1) + (index1 - 1) * 20).getSampleState());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                            else {
+                                try{
+                                    textRenderData.setText(processSamples.get((i-1) + (index1 - 1) * 20).getDealTime().format(formatter));
+                                } 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("sample", tableRenderData);
+                table.put("index1", index1);
+                sampleList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("sampleList", sampleList);
+                    put("size", finalIndex);
+                    put("examineUrl", null);
+                    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;
+    }
+
+    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;
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java
new file mode 100644
index 0000000..880e4f6
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java
@@ -0,0 +1,416 @@
+package com.ruoyi.process.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.process.mapper.ProcessDealMapper;
+import com.ruoyi.process.mapper.ProcessTotaldealMapper;
+import com.ruoyi.process.pojo.ProcessDeal;
+import com.ruoyi.process.pojo.ProcessTotaldeal;
+import com.ruoyi.process.service.ProcessTotaldealService;
+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.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�昏〃(鍘嗗彶) 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-02 03:59:09
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ProcessTotaldealServiceImpl extends ServiceImpl<ProcessTotaldealMapper, ProcessTotaldeal> implements ProcessTotaldealService {
+
+    @Resource
+    private ProcessTotaldealMapper processTotaldealMapper;
+
+    @Resource
+    private ProcessDealMapper processDealMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public IPage<ProcessTotaldeal> pageProcessTotaldeal(Page page, ProcessTotaldeal processTotaldeal) {
+        return processTotaldealMapper.pageProcessTotaldeal(page, QueryWrappers.queryWrappers(processTotaldeal));
+
+    }
+
+    @Override
+    public int submitProcessTotaldeal(Integer id) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) {
+            throw new ErrorException("鏈壘鍒板~琛ㄤ汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        }
+        ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id);
+        processTotaldeal.setSubmitUser(userId);
+        processTotaldeal.setSubmitState("宸叉彁浜�");
+        processTotaldeal.setSubmitUrl(user.getSignatureUrl());
+        //鐢熸垚鏍峰搧澶勭悊鐢宠琛ㄥ苟灏嗗~琛ㄤ汉鐨勭數瀛愮鍚嶅嵃涓�
+        processTotaldeal.setUrl(processTotaldeal(id, user.getSignatureUrl()));
+        return processTotaldealMapper.updateById(processTotaldeal);
+    }
+
+    @Override
+    public int checkProcessTotaldeal(Integer id, String state) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) {
+            throw new ErrorException("鏈壘鍒板鏍镐汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        }
+        ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id);
+        processTotaldeal.setExamineUser(userId);
+        processTotaldeal.setExamineState(state);
+        processTotaldeal.setExamineUrl(user.getSignatureUrl());
+        if (state.equals("涓嶉�氳繃")) {
+            processTotaldeal.setSubmitState("寰呮彁浜�");
+        }
+        //灏嗗鏍镐汉鐨勭數瀛愮鍚嶅嵃涓�
+        wordInsertUrl(new HashMap<String, Object>() {{
+            put("examineUrl", new FilePictureRenderData(100, 50, imgUrl + "/" + user.getSignatureUrl()));
+        }}, wordUrl + "/" + processTotaldeal.getUrl());
+        return processTotaldealMapper.updateById(processTotaldeal);
+    }
+
+    @Override
+    public int ratifyProcessTotaldeal(Integer id, String state) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        if (ObjectUtils.isEmpty(user.getSignatureUrl())) {
+            throw new ErrorException("鏈壘鍒版壒鍑嗕汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+        }
+        ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id);
+        processTotaldeal.setRatifyUser(userId);
+        processTotaldeal.setRatifyState(state);
+        processTotaldeal.setRatifyUrl(user.getSignatureUrl());
+        if (state.equals("涓嶉�氳繃")) {
+            processTotaldeal.setSubmitState("寰呮彁浜�");
+        }
+        //灏嗘壒鍑嗕汉鐨勭鍚嶅嵃涓�
+        wordInsertUrl(new HashMap<String, Object>() {{
+            put("ratifyUrl", new FilePictureRenderData(100, 50, imgUrl + "/" + user.getSignatureUrl()));
+        }}, wordUrl + "/" + processTotaldeal.getUrl());
+        return processTotaldealMapper.updateById(processTotaldeal);
+    }
+
+    //鐢熸垚鏍峰搧澶勭悊琛╳ord
+    private String processTotaldeal(Integer id, String signatureUrl) {
+        List<ProcessDeal> processDeals = processDealMapper.selectList(Wrappers.<ProcessDeal>lambdaQuery().eq(ProcessDeal::getTotaldealId, id));
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/sample-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>> sampleList = new ArrayList<>();
+        Integer index = 1;
+        Integer index1 = 1;
+        for (int c = 0; c < processDeals.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 < 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("鏍峰搧鍚嶇О@Sample name");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 2) {
+                                //绗笁鍒楁牱鍝佺紪鍙�
+                                textRenderData.setText("鏍峰搧缂栧彿@Sample number");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 3) {
+                                //绗洓鍒椾緵鏍峰崟浣�
+                                textRenderData.setText("渚涙牱鍗曚綅@Sample unit");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 4) {
+                                //绗簲鍒楁暟閲�
+                                textRenderData.setText("鏁伴噺@Quantity");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else if (j == 5) {
+                                //绗叚鍒楀鐞嗘柟寮�
+                                textRenderData.setText("澶勭悊鏂瑰紡@Processing");
+                                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 sampleName = processDeals.get((i - 1) + (index1 - 1) * 20).getSampleName();
+                                    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(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleName());
+                                } 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(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleCode());
+                                } 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(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleSupplier());
+                                } 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(processDeals.get((i - 1) + (index1 - 1) * 20).getNum() + "");
+                                } 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(processDeals.get((i - 1) + (index1 - 1) * 20).getDealMethod());
+                                } catch (Exception e) {
+                                    textRenderData.setText("");
+                                }
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                try {
+                                    textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getDealTime() + "");
+                                } 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("sample", tableRenderData);
+                table.put("index1", index1);
+                sampleList.add(table);
+                index1++;
+            }
+        }
+        Integer finalIndex = index1;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("sampleList", sampleList);
+                    put("size", finalIndex);
+                    put("examineUrl", null);
+                    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;
+    }
+
+    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;
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsEvaluateServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsEvaluateServiceImpl.java
new file mode 100644
index 0000000..e71a39a
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsEvaluateServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.QualityMonitorDetailsEvaluateMapper;
+import com.ruoyi.process.pojo.QualityMonitorDetailsEvaluate;
+import com.ruoyi.process.service.QualityMonitorDetailsEvaluateService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Service
+public class QualityMonitorDetailsEvaluateServiceImpl extends ServiceImpl<QualityMonitorDetailsEvaluateMapper, QualityMonitorDetailsEvaluate> implements QualityMonitorDetailsEvaluateService {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsRatifyServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsRatifyServiceImpl.java
new file mode 100644
index 0000000..22785fe
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsRatifyServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.QualityMonitorDetailsRatifyMapper;
+import com.ruoyi.process.pojo.QualityMonitorDetailsRatify;
+import com.ruoyi.process.service.QualityMonitorDetailsRatifyService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏鎵瑰噯琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Service
+public class QualityMonitorDetailsRatifyServiceImpl extends ServiceImpl<QualityMonitorDetailsRatifyMapper, QualityMonitorDetailsRatify> implements QualityMonitorDetailsRatifyService {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsServiceImpl.java
new file mode 100644
index 0000000..97b1377
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.QualityMonitorDetailsMapper;
+import com.ruoyi.process.pojo.QualityMonitorDetails;
+import com.ruoyi.process.service.QualityMonitorDetailsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏琛�
+ *
+ * @author makejava
+ * @since 2024-11-06
+ */
+@Service
+public class QualityMonitorDetailsServiceImpl extends ServiceImpl<QualityMonitorDetailsMapper, QualityMonitorDetails> implements QualityMonitorDetailsService {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java
new file mode 100644
index 0000000..27638db
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java
@@ -0,0 +1,812 @@
+package com.ruoyi.process.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.InformationNotification;
+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.common.utils.WxCpUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.inspect.util.XWPFDocumentUtils;
+import com.ruoyi.process.dto.QualityMonitorDetailsEvaluateDto;
+import com.ruoyi.process.dto.QualityMonitorDto;
+import com.ruoyi.process.excel.QualityMonitorDetailsUpload;
+import com.ruoyi.process.mapper.*;
+import com.ruoyi.process.pojo.*;
+import com.ruoyi.process.service.QualityMonitorDetailsEvaluateService;
+import com.ruoyi.process.service.QualityMonitorDetailsRatifyService;
+import com.ruoyi.process.service.QualityMonitorDetailsService;
+import com.ruoyi.process.service.QualityMonitorService;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+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.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class QualityMonitorServiceImpl extends ServiceImpl<QualityMonitorMapper, QualityMonitor> implements QualityMonitorService {
+
+    @Resource
+    private QualityMonitorDetailsService qualityMonitorDetailsService;
+    @Resource
+    private QualityMonitorDetailsMapper qualityMonitorDetailsMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private QualityMonitorDetailsRatifyMapper qualityMonitorDetailsRatifyMapper;
+    @Resource
+    private QualityMonitorDetailsRatifyService qualityMonitorDetailsRatifyService;
+    @Resource
+    private QualityMonitorDetailsEvaluateMapper qualityMonitorDetailsEvaluateMapper;
+    @Resource
+    private QualityMonitorDetailsEvaluateService qualityMonitorDetailsEvaluateService;
+    @Resource
+    private QualityMonitorDetailsEvaluateFileMapper qualityMonitorDetailsEvaluateFileMapper;
+    @Resource
+    private InformationNotificationService informationNotificationService;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+
+    /**
+     * 瀵煎叆鐩戞帶璁″垝
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean importQualityMonitor(MultipartFile file, QualityMonitor monitor) {
+        // 褰撳墠鐧诲綍鐢ㄦ埛
+        Integer userId = SecurityUtils.getUserId().intValue();
+        // 鏂囦欢鍚嶇О
+        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
+        QualityMonitor qualityMonitor = new QualityMonitor();
+        qualityMonitor.setMonitorName(fileName);
+        qualityMonitor.setMonitorYear(monitor.getMonitorYear());
+        qualityMonitor.setWriteUserId(userId);
+        qualityMonitor.setExamineUserId(monitor.getExamineUserId());
+        qualityMonitor.setWriteTime(LocalDateTime.now());
+        baseMapper.insert(qualityMonitor);
+
+        if (monitor.getExamineUserId() == null) {
+            throw new ErrorException("缂哄皯瀹℃牳浜�");
+        }
+
+        User user = userMapper.selectById(userId);
+        // 娑堟伅鍙戦��
+        InformationNotification info = new InformationNotification();
+        // 鍙戦�佷汉
+        info.setCreateUser(user.getName());
+        info.setMessageType("6");
+        info.setTheme("CNAS璐ㄩ噺鐩戞帶璁″垝瀹℃牳閫氱煡");
+        info.setContent(fileName + "璐ㄩ噺鐩戞帶璁″垝寰呭鏍�");
+        info.setSenderId(userId);
+        // 鎺ユ敹浜�
+        info.setConsigneeId(monitor.getExamineUserId());
+        info.setJumpPath("a7-Ensure-results-validity");
+        informationNotificationService.addInformationNotification(info);
+
+        // 鍙戦�佷紒涓氬井淇¢�氱煡
+        threadPoolTaskExecutor.execute(() -> {
+            // 鏌ヨ鍙戦�佷汉
+            User people = userMapper.selectById(monitor.getExamineUserId());
+            String message = "";
+            message += "CNAS璐ㄩ噺鐩戞帶璁″垝瀹℃牳閫氱煡";
+            message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝";
+            message += "\n" + fileName + "璐ㄩ噺鐩戞帶璁″垝寰呭鏍�";
+            //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+            try {
+                WxCpUtils.inform(people.getAccount(), message, null);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        });
+
+
+        List<QualityMonitorDetails> detailsUploadList = new ArrayList<>();
+
+        // 瀵煎叆闄勪欢鍐呭
+        try {
+            // excel瑙f瀽
+            EasyExcel.read(file.getInputStream(), QualityMonitorDetailsUpload.class, new AnalysisEventListener<QualityMonitorDetailsUpload>() {
+                @Override
+                public void invoke(QualityMonitorDetailsUpload detailsUpload, AnalysisContext analysisContext) {
+                    // 鍒ゆ柇鏄惁涓虹┖
+                    if (StringUtils.isBlank(detailsUpload.getPlannedTime())) {
+                        throw new ErrorException("璁″垝寮�灞曟椂闂翠笉鑳戒负绌�");
+                    }
+                        // 瀵硅薄澶嶅埗
+                    QualityMonitorDetails monitorDetails = new QualityMonitorDetails();
+                    BeanUtils.copyProperties(detailsUpload, monitorDetails);
+                    monitorDetails.setQualityMonitorId(qualityMonitor.getQualityMonitorId());
+
+                    detailsUploadList.add(monitorDetails);
+                }
+
+                @Override
+                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+                }
+            }).sheet().doRead();
+            qualityMonitorDetailsService.saveBatch(detailsUploadList);
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return true;
+    }
+
+    /**
+     * 鐩戞帶璁″垝瀹℃牳
+     * @param qualityMonitor
+     * @return
+     */
+    @Override
+    public boolean examineQualityMonitor(QualityMonitor qualityMonitor) {
+        if (qualityMonitor.getRatifyUserId() == null) {
+            throw new ErrorException("缂哄皯鎵瑰噯浜�");
+        }
+
+        // 褰撳墠鐧诲綍鐢ㄦ埛
+        baseMapper.update(null, Wrappers.<QualityMonitor>lambdaUpdate()
+                .eq(QualityMonitor::getQualityMonitorId, qualityMonitor.getQualityMonitorId())
+                .set(QualityMonitor::getRatifyUserId, qualityMonitor.getRatifyUserId())
+                .set(QualityMonitor::getExamineRemark, qualityMonitor.getExamineRemark())
+                .set(QualityMonitor::getExamineStatus, qualityMonitor.getExamineStatus())
+                .set(QualityMonitor::getExamineTime, LocalDateTime.now())
+        );
+
+        QualityMonitor monitor = baseMapper.selectById(qualityMonitor.getQualityMonitorId());
+
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        // 娑堟伅鍙戦��
+        InformationNotification info = new InformationNotification();
+        // 鍙戦�佷汉
+        info.setCreateUser(user.getName());
+        info.setMessageType("6");
+        info.setTheme("CNAS璐ㄩ噺鐩戞帶璁″垝鎵瑰噯閫氱煡");
+        info.setContent(monitor.getMonitorName() + "璐ㄩ噺鐩戞帶璁″垝寰呮壒鍑�");
+        info.setSenderId(userId);
+        // 鎺ユ敹浜�
+        info.setConsigneeId(qualityMonitor.getRatifyUserId());
+        info.setJumpPath("a7-Ensure-results-validity");
+        informationNotificationService.addInformationNotification(info);
+
+        // 鍙戦�佷紒涓氬井淇¢�氱煡
+        threadPoolTaskExecutor.execute(() -> {
+            // 鏌ヨ鍙戦�佷汉
+            User people = userMapper.selectById(qualityMonitor.getRatifyUserId());
+            String message = "";
+            message += "CNAS璐ㄩ噺鐩戞帶璁″垝鎵瑰噯閫氱煡";
+            message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝";
+            message += "\n" + monitor.getMonitorName() + "璐ㄩ噺鐩戞帶璁″垝寰呮壒鍑�";
+            //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+            try {
+                WxCpUtils.inform(people.getAccount(), message, null);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        });
+
+        return true;
+    }
+
+    /**
+     * 鐩戞帶璁″垝鎵瑰噯
+     * @param qualityMonitor
+     * @return
+     */
+    @Override
+    public boolean ratifyQualityMonitor(QualityMonitor qualityMonitor) {
+        // 褰撳墠鐧诲綍鐢ㄦ埛
+        baseMapper.update(null, Wrappers.<QualityMonitor>lambdaUpdate()
+                .eq(QualityMonitor::getQualityMonitorId, qualityMonitor.getQualityMonitorId())
+                .set(QualityMonitor::getRatifyRemark, qualityMonitor.getRatifyRemark())
+                .set(QualityMonitor::getRatifyStatus, qualityMonitor.getRatifyStatus())
+                .set(QualityMonitor::getRatifyTime, LocalDateTime.now())
+        );
+        return true;
+    }
+
+    /**
+     * 鐩戞帶璁″垝鍒楄〃
+     * @param page
+     * @param qualityMonitor
+     * @return
+     */
+    @Override
+    public IPage<QualityMonitorDto> pageQualityMonitor(Page page, QualityMonitor qualityMonitor) {
+        return baseMapper.pageQualityMonitor(page, QueryWrappers.queryWrappers(qualityMonitor));
+    }
+
+    /**
+     * 鐩戞帶璁″垝璇︽儏鍒楄〃
+     * @param page
+     * @param qualityMonitorDetails
+     * @return
+     */
+    @Override
+    public IPage<QualityMonitorDetails> pageQualityMonitorDetail(Page page, QualityMonitorDetails qualityMonitorDetails) {
+        if (qualityMonitorDetails.getQualityMonitorId() == null) {
+            return new Page();
+        }
+        return qualityMonitorDetailsMapper.pageQualityMonitorDetail(page, QueryWrappers.queryWrappers(qualityMonitorDetails));
+    }
+
+    /**
+     * 瀵煎嚭鐩戞帶璁″垝
+     * @param qualityMonitorId
+     * @param response
+     */
+    @Override
+    public void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response) {
+        // 鏌ヨ璇︽儏
+        QualityMonitor qualityMonitor = baseMapper.selectById(qualityMonitorId);
+
+        //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+        String writeUrl = userMapper.selectById(qualityMonitor.getWriteUserId()).getSignatureUrl();
+        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+
+        //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃
+        String examineUrl = null;
+        if (qualityMonitor.getExamineUserId() != null) {
+            examineUrl = userMapper.selectById(qualityMonitor.getExamineUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(examineUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+        String ratifyUrl = null;
+        if (qualityMonitor.getRatifyUserId() != null) {
+            ratifyUrl = userMapper.selectById(qualityMonitor.getRatifyUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        // 鏌ヨ璇︽儏
+        List<QualityMonitorDetails> qualityMonitorDetails = qualityMonitorDetailsMapper.selectList(Wrappers.<QualityMonitorDetails>lambdaQuery()
+                .eq(QualityMonitorDetails::getQualityMonitorId, qualityMonitorId));
+
+        // 鍒ゆ柇鐩戞帶鐩殑涓�鏍风殑鍊�
+        AtomicInteger count = new AtomicInteger(1);
+        Map<String, List<QualityMonitorDetails>> listMap = qualityMonitorDetails.stream().collect(Collectors.groupingBy(QualityMonitorDetails::getMonitorPurpose));
+        listMap.forEach((s, details) -> {
+            // 鏌ヨ鏁伴噺瓒呰繃1鐨�
+            if (details.size() > 1) {
+                for (QualityMonitorDetails detail : details) {
+                    detail.setMonitorPurpose(detail.getMonitorPurpose() + "鈭�" + count);
+                }
+                count.getAndIncrement();
+            }
+        });
+
+        int index = 1;
+        for (QualityMonitorDetails qualityMonitorDetail : qualityMonitorDetails) {
+            qualityMonitorDetail.setIndex(index);
+            index++;
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor.docx");
+        String finalExamineUrl = examineUrl;
+        String finalRatifyUrl = ratifyUrl;
+        Configure configure = Configure.builder()
+                .bind("monitorDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("year", qualityMonitor.getMonitorYear());
+                    put("monitorDetailList", qualityMonitorDetails);
+                    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", qualityMonitor.getWriteTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getWriteTime())).create() : null);
+                    put("examineDateUrl", qualityMonitor.getExamineTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getExamineTime())).create() : null);
+                    put("ratifyDateUrl", qualityMonitor.getRatifyTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getRatifyTime())).create() : null);
+                }});
+
+        // 澶勭悊鎹㈣闂
+        XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument());
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    qualityMonitor.getMonitorName(), "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 qualityMonitorDetailsId
+     * @return
+     */
+    @Override
+    public QualityMonitorDetailsRatify getQualityMonitorRatify(Integer qualityMonitorDetailsId) {
+        QualityMonitorDetailsRatify qualityMonitorDetailsRatify;
+        // 鏌ヨ鐩戞帶閮ㄩ棬id
+        qualityMonitorDetailsRatify = qualityMonitorDetailsRatifyMapper.selectOne(Wrappers.<QualityMonitorDetailsRatify>lambdaQuery()
+                .eq(QualityMonitorDetailsRatify::getQualityMonitorDetailsId, qualityMonitorDetailsId));
+
+        if (qualityMonitorDetailsRatify == null) {
+            // 鏌ヨ璇︽儏璁″垝
+            QualityMonitorDetails qualityMonitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsId);
+            qualityMonitorDetailsRatify = new QualityMonitorDetailsRatify();
+            qualityMonitorDetailsRatify.setQualityMonitorDetailsId(qualityMonitorDetailsId); // 璇︽儏id
+            qualityMonitorDetailsRatify.setMonitorProject(qualityMonitorDetails.getMonitorProject()); // 鐩戞帶椤圭洰
+            qualityMonitorDetailsRatify.setMonitorData(DateUtil.format(new Date(), "yyyy-MM")); // 鐩戞帶鏃堕棿
+            qualityMonitorDetailsRatify.setMonitorPurpose(qualityMonitorDetails.getMonitorPurpose()); // 鐩戞帶鐩殑
+            qualityMonitorDetailsRatify.setParticipant(qualityMonitorDetails.getParticipant()); // 鍙傚姞浜哄憳
+            qualityMonitorDetailsRatify.setBudget(qualityMonitorDetails.getBudget()); // 棰勭畻
+            qualityMonitorDetailsRatify.setInspectionDepartment(userMapper.selectUserDepartmentLimsName( SecurityUtils.getUserId().intValue()));
+        }
+
+        if (qualityMonitorDetailsRatify.getRatifyUserId() != null) {
+            qualityMonitorDetailsRatify.setRatifyName(userMapper.selectById(qualityMonitorDetailsRatify.getRatifyUserId()).getName());
+        }
+
+        return qualityMonitorDetailsRatify;
+    }
+
+    /**
+     * 鏂板鐩戞帶鎵瑰噯瀹炴柦
+     * @param qualityMonitorDetailsRatify
+     * @return
+     */
+    @Override
+    public boolean addQualityMonitorRatify(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
+        if (qualityMonitorDetailsRatify.getQualityMonitorDetailsId() == null) {
+            throw new ErrorException("缂哄皯鐩戞帶璇︾粏淇℃伅id");
+        }
+        qualityMonitorDetailsRatifyService.saveOrUpdate(qualityMonitorDetailsRatify);
+        if (qualityMonitorDetailsRatify.getRatifyUserId() != null) {
+
+            // 鏌ヨ璇︽儏淇℃伅
+            QualityMonitorDetails monitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsRatify.getQualityMonitorDetailsId());
+
+            Integer userId =SecurityUtils.getUserId().intValue();
+            User user = userMapper.selectById(userId);
+            // 娑堟伅鍙戦��
+            InformationNotification info = new InformationNotification();
+            // 鍙戦�佷汉
+            info.setCreateUser(user.getName());
+            info.setMessageType("6");
+            info.setTheme("CNAS璐ㄩ噺鐩戞帶瀹炴柦鎵瑰噯閫氱煡");
+            info.setContent("鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶瀹炴柦寰呮壒鍑�");
+            info.setSenderId(userId);
+            // 鎺ユ敹浜�
+            info.setConsigneeId(qualityMonitorDetailsRatify.getRatifyUserId());
+            info.setJumpPath("a7-Ensure-results-validity");
+            informationNotificationService.addInformationNotification(info);
+
+            // 鍙戦�佷紒涓氬井淇¢�氱煡
+            threadPoolTaskExecutor.execute(() -> {
+                // 鏌ヨ鍙戦�佷汉
+                User people = userMapper.selectById(qualityMonitorDetailsRatify.getRatifyUserId());
+                String message = "";
+                message += "CNAS璐ㄩ噺鐩戞帶瀹炴柦鎵瑰噯閫氱煡";
+                message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝";
+                message += "\n" + "鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶瀹炴柦寰呮壒鍑�";
+                //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                try {
+                    WxCpUtils.inform(people.getAccount(), message, null);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+
+        return true;
+    }
+
+    /**
+     * 鐩戞帶璁″垝璇︽儏鎵瑰噯鎰忚
+     * @param qualityMonitorDetailsRatify
+     * @return
+     */
+    @Override
+    public boolean addQualityMonitorRatifyOpinion(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
+        qualityMonitorDetailsRatifyService.update(Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate()
+                .eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId())
+                .set(QualityMonitorDetailsRatify::getRatifyOpinion, qualityMonitorDetailsRatify.getRatifyOpinion())
+                .set(QualityMonitorDetailsRatify::getIsFinish, 1));
+        return true;
+    }
+
+    /**
+     * 瀵煎嚭鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+     *
+     * @param detailsRatifyId 鐩戞帶璁″垝璇︽儏瀹炴柦id
+     * @param response  鍝嶅簲
+     */
+    @Override
+    public void exportQualityMonitorRatify(Integer detailsRatifyId, HttpServletResponse response) {
+        QualityMonitorDetailsRatify qualityMonitorDetailsRatify = qualityMonitorDetailsRatifyMapper.selectOne(Wrappers.<QualityMonitorDetailsRatify>lambdaQuery().eq(QualityMonitorDetailsRatify::getQualityMonitorDetailsId, detailsRatifyId));
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor-details-ratify.docx");
+        Configure configure = Configure.builder()
+                .bind("processMethodVerifyMachineAttachmentList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("qualityMonitorDetailsRatify", qualityMonitorDetailsRatify);
+                    put("ratifyUserUrl", UserUtils.getFinalUserSignatureUrl(qualityMonitorDetailsRatify.getRatifyUserId()));
+                }});
+
+        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 qualityMonitorDetailsId
+     * @return
+     */
+    @Override
+    public QualityMonitorDetailsEvaluate getQualityMonitorEvaluate(Integer qualityMonitorDetailsId) {
+        return qualityMonitorDetailsEvaluateMapper.getQualityMonitorEvaluate(qualityMonitorDetailsId);
+    }
+
+    /**
+     * 鏂板鐩戞帶璇勪环
+     * @param qualityMonitorDetailsEvaluate
+     * @return
+     */
+    @Override
+    public boolean addQualityMonitorEvaluate(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
+        if (qualityMonitorDetailsEvaluate.getQualityMonitorDetailsId() == null) {
+            throw new ErrorException("缂哄皯鐩戞帶璇︾粏淇℃伅id");
+        }
+        // 鏌ヨ璇︽儏淇℃伅
+        QualityMonitorDetails monitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsEvaluate.getQualityMonitorDetailsId());
+        // 鍙戦�佹秷鎭�氱煡
+        // 鍒ゆ柇璇勫缁撹浜烘槸鍚︿负绌�
+        if (qualityMonitorDetailsEvaluate.getRatifyUserId() != null) {
+
+            Integer userId =SecurityUtils.getUserId().intValue();
+            User user = userMapper.selectById(userId);
+            // 娑堟伅鍙戦��
+            InformationNotification info = new InformationNotification();
+            // 鍙戦�佷汉
+            info.setCreateUser(user.getName());
+            info.setMessageType("6");
+            info.setTheme("CNAS璐ㄩ噺鐩戞帶璇勪环缁撹閫氱煡");
+            info.setContent("鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶寰呰瘎浠风粨璁�");
+            info.setSenderId(userId);
+            // 鎺ユ敹浜�
+            info.setConsigneeId(qualityMonitorDetailsEvaluate.getRatifyUserId());
+            info.setJumpPath("a7-Ensure-results-validity");
+            informationNotificationService.addInformationNotification(info);
+
+            // 鍙戦�佷紒涓氬井淇¢�氱煡
+            threadPoolTaskExecutor.execute(() -> {
+                // 鏌ヨ鍙戦�佷汉
+                User people = userMapper.selectById(qualityMonitorDetailsEvaluate.getRatifyUserId());
+                String message = "";
+                message += "CNAS璐ㄩ噺鐩戞帶璇勪环缁撹閫氱煡";
+                message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝";
+                message += "\n" + "鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶寰呰瘎浠风粨璁�";
+                //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                try {
+                    WxCpUtils.inform(people.getAccount(), message, null);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+
+        } else {
+            // 鐩戞帶缁撴灉璇勪环
+            if (qualityMonitorDetailsEvaluate.getImplementUserId() != null) {
+                Integer userId =SecurityUtils.getUserId().intValue();
+                User user = userMapper.selectById(userId);
+                // 娑堟伅鍙戦��
+                InformationNotification info = new InformationNotification();
+                // 鍙戦�佷汉
+                info.setCreateUser(user.getName());
+                info.setMessageType("6");
+                info.setTheme("CNAS璐ㄩ噺鐩戞帶缁撴灉璇勪环");
+                info.setContent("鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶寰呰瘎浠风粨璁�");
+                info.setSenderId(userId);
+                // 鎺ユ敹浜�
+                info.setConsigneeId(qualityMonitorDetailsEvaluate.getImplementUserId());
+                info.setJumpPath("a7-Ensure-results-validity");
+                informationNotificationService.addInformationNotification(info);
+
+                // 鍙戦�佷紒涓氬井淇¢�氱煡
+                threadPoolTaskExecutor.execute(() -> {
+                    // 鏌ヨ鍙戦�佷汉
+                    User people = userMapper.selectById(qualityMonitorDetailsEvaluate.getImplementUserId());
+                    String message = "";
+                    message += "CNAS璐ㄩ噺鐩戞帶缁撴灉璇勪环";
+                    message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝";
+                    message += "\n" + "鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶寰呰瘎浠风粨璁�";
+                    //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                    try {
+                        WxCpUtils.inform(people.getAccount(), message, null);
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+                });
+            }
+        }
+
+
+        return qualityMonitorDetailsEvaluateService.saveOrUpdate(qualityMonitorDetailsEvaluate);
+    }
+
+    /**
+     * 鐩戞帶璇勪环瀹℃壒鎰忚
+     * @param qualityMonitorDetailsEvaluate
+     * @return
+     */
+    @Override
+    public boolean addMonitorEvaluateOpinion(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
+        qualityMonitorDetailsEvaluateService.update(Wrappers.<QualityMonitorDetailsEvaluate>lambdaUpdate()
+                .eq(QualityMonitorDetailsEvaluate::getDetailsEvaluateId, qualityMonitorDetailsEvaluate.getDetailsEvaluateId())
+                .set(QualityMonitorDetailsEvaluate::getRatifyOpinion, qualityMonitorDetailsEvaluate.getRatifyOpinion())
+                .set(QualityMonitorDetailsEvaluate::getRatifyTime, LocalDateTime.now())
+                .set(QualityMonitorDetailsEvaluate::getIsFinish, 1));
+        return true;
+    }
+
+    /**
+     * 鏂板鐩戞帶璇勪环闄勪欢琛�
+     * @param detailsEvaluateId
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file) {
+        if (detailsEvaluateId == null) {
+            throw new ErrorException("缂哄皯鐩戞帶璇︽儏id");
+        }
+
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        QualityMonitorDetailsEvaluateFile evaluateFile = new QualityMonitorDetailsEvaluateFile();
+        evaluateFile.setDetailsEvaluateId(detailsEvaluateId);
+        evaluateFile.setFileName(filename);
+        if (contentType != null && contentType.startsWith("image/")) {
+            // 鏄浘鐗�
+            path = imgUrl;
+            evaluateFile.setType(1);
+        } else {
+            // 鏄枃浠�
+            path = wordUrl;
+            evaluateFile.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));
+            evaluateFile.setFileUrl(pathName);
+            qualityMonitorDetailsEvaluateFileMapper.insert(evaluateFile);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("闄勪欢涓婁紶閿欒");
+            return false;
+        }
+    }
+
+    /**
+     * 鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃
+     * @return
+     */
+    @Override
+    public List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer detailsEvaluateId) {
+        return qualityMonitorDetailsEvaluateFileMapper.selectList(Wrappers.<QualityMonitorDetailsEvaluateFile>lambdaQuery()
+                .eq(QualityMonitorDetailsEvaluateFile::getDetailsEvaluateId, detailsEvaluateId));
+    }
+
+
+    /**
+     * 瀵煎嚭鐩戞帶璇勪环
+     * @param detailsEvaluateId 鐩戞帶璇勪环id
+     */
+    @Override
+    public void exportQualityMonitorEvaluate(Integer detailsEvaluateId, HttpServletResponse response) {
+        // 鏌ヨ鐩戞帶璇勪环淇℃伅
+        QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate = qualityMonitorDetailsEvaluateMapper.selectOne(Wrappers.<QualityMonitorDetailsEvaluate>lambdaQuery().eq(QualityMonitorDetailsEvaluate::getQualityMonitorDetailsId,detailsEvaluateId));
+        // 娓叉煋word妯℃澘瀵硅薄
+        QualityMonitorDetailsEvaluateDto qualityMonitorDetailsEvaluateDto = new QualityMonitorDetailsEvaluateDto();
+        BeanUtils.copyProperties(qualityMonitorDetailsEvaluate, qualityMonitorDetailsEvaluateDto);
+        // 鏍煎紡鍖栨椂闂�
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        qualityMonitorDetailsEvaluateDto.setRatifyTimeStr(qualityMonitorDetailsEvaluate.getRatifyTime().format(dateTimeFormatter));
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor-evaluate.docx");
+        Configure configure = Configure.builder()
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("qualityMonitorDetailsEvaluate", qualityMonitorDetailsEvaluateDto);
+                    put("implementUserUrl", UserUtils.getFinalUserSignatureUrl(Integer.valueOf(qualityMonitorDetailsEvaluate.getImplementUserId())));
+                    put("ratifyUserUrl", UserUtils.getFinalUserSignatureUrl(qualityMonitorDetailsEvaluate.getRatifyUserId()));
+                }});
+
+        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 file
+     * @param qualityMonitorDetailsId
+     * @return
+     */
+    @Override
+    public boolean uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId) {
+        if (qualityMonitorDetailsId == null) {
+            throw new ErrorException("缂哄皯鐩戞帶璇︽儏id");
+        }
+
+        Integer userId =SecurityUtils.getUserId().intValue();
+
+        String urlString;
+        String pathName;
+        try {
+            String path = wordUrl;
+            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));
+
+            wordInsertUrl(new HashMap<String, Object>() {{
+                put("writeUrl", UserUtils.getFinalUserSignatureUrl(userId));
+            }}, wordUrl + "/" + pathName.replace("/word", wordUrl));
+            qualityMonitorDetailsService.update(Wrappers.<QualityMonitorDetails>lambdaUpdate()
+                    .eq(QualityMonitorDetails::getQualityMonitorDetailsId, qualityMonitorDetailsId)
+                    .set(QualityMonitorDetails::getFinishReportUrl, pathName));
+
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ErrorException("鏂囦欢涓婁紶澶辫触");
+        }
+    }
+
+    /**
+     * 鎵瑰噯瀹屾垚鎶ュ憡
+     * @param qualityMonitorDetails
+     * @return
+     */
+    @Override
+    public boolean ratifyFinishReport(QualityMonitorDetails qualityMonitorDetails) {
+        Integer userId =SecurityUtils.getUserId().intValue();
+        LambdaUpdateWrapper<QualityMonitorDetails> wrapper = Wrappers.<QualityMonitorDetails>lambdaUpdate()
+                .eq(QualityMonitorDetails::getQualityMonitorDetailsId, qualityMonitorDetails.getQualityMonitorDetailsId())
+                .set(QualityMonitorDetails::getRatifyUserId, userId)
+                .set(QualityMonitorDetails::getRatifyRemark, qualityMonitorDetails.getRatifyRemark())
+                .set(QualityMonitorDetails::getRatifyStatus, qualityMonitorDetails.getRatifyStatus())
+                .set(QualityMonitorDetails::getRatifyTime, LocalDateTime.now());
+        if (qualityMonitorDetails.getRatifyStatus().equals(0)) {
+            wrapper.set(QualityMonitorDetails::getFinishReportUrl, null);
+        }
+        qualityMonitorDetailsMapper.update(null, wrapper);
+
+        // 娣诲姞鎵瑰噯浜�
+        QualityMonitorDetails details = qualityMonitorDetailsMapper.selectById(qualityMonitorDetails.getQualityMonitorDetailsId());
+        if (StringUtils.isNotBlank(details.getFinishReportUrl())) {
+            wordInsertUrl(new HashMap<String, Object>() {{
+                put("ratifyUrl", UserUtils.getFinalUserSignatureUrl(userId));
+            }}, wordUrl + "/" + details.getFinishReportUrl().replace("/word", wordUrl));
+        }
+        return true;
+    }
+
+    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;
+    }
+
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseDetailsServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseDetailsServiceImpl.java
new file mode 100644
index 0000000..79be6f9
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseDetailsServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.process.mapper.QualitySuperviseDetailsMapper;
+import com.ruoyi.process.pojo.QualitySuperviseDetails;
+import com.ruoyi.process.service.QualitySuperviseDetailsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏琛�
+ *
+ * @author makejava
+ * @since 2024-11-07
+ */
+@Service
+public class QualitySuperviseDetailsServiceImpl extends ServiceImpl<QualitySuperviseDetailsMapper, QualitySuperviseDetails> implements QualitySuperviseDetailsService {
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
new file mode 100644
index 0000000..1d58571
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
@@ -0,0 +1,1118 @@
+package com.ruoyi.process.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+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.config.ConfigureBuilder;
+import com.deepoove.poi.data.PictureRenderData;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+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.common.utils.WxCpUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.process.dto.QualitySuperviseDetailsAccordingDto;
+import com.ruoyi.process.dto.QualitySuperviseDetailsCorrectDto;
+import com.ruoyi.process.dto.QualitySuperviseDetailsDto;
+import com.ruoyi.process.excel.QualitySuperviseDetailsUpload;
+import com.ruoyi.process.mapper.*;
+import com.ruoyi.process.pojo.*;
+import com.ruoyi.process.service.QualitySuperviseDetailsService;
+import com.ruoyi.process.service.QualitySuperviseService;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+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.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.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璐ㄩ噺鐩戠潱涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class QualitySuperviseServiceImpl extends ServiceImpl<QualitySuperviseMapper, QualitySupervise> implements QualitySuperviseService {
+
+    @Resource
+    private QualitySuperviseDetailsService qualitySuperviseDetailsService;
+    @Resource
+    private QualitySuperviseDetailsMapper qualitySuperviseDetailsMapper;
+    @Resource
+    private QualitySuperviseDetailsRecordMapper qualitySuperviseDetailsRecordMapper;
+    @Resource
+    private QualitySuperviseDetailsAccordingMapper qualitySuperviseDetailsAccordingMapper;
+    @Resource
+    private QualitySuperviseDetailsCorrectMapper qualitySuperviseDetailsCorrectMapper;
+    @Resource
+    private QualitySuperviseDetailsCorrectFileMapper qualitySuperviseDetailsCorrectFileMapper;
+    @Resource
+    private InformationNotificationService informationNotificationService;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+    @Resource
+    private UserMapper userMapper;
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    /**
+     * 瀵煎叆鐩戠潱璁″垝
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean importQualitySupervise(MultipartFile file, QualitySupervise supervise) {
+        if (supervise.getRatifyUserId() == null) {
+            throw new ErrorException("缂哄皯鎵瑰噯浜�");
+        }
+        User ratifyUser = userMapper.selectById(supervise.getRatifyUserId());
+
+        // 褰撳墠鐧诲綍鐢ㄦ埛
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+
+        // 鏂囦欢鍚嶇О
+        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
+        QualitySupervise qualitySupervise = new QualitySupervise();
+        qualitySupervise.setSuperviseName(fileName);
+        qualitySupervise.setSuperviseYear(supervise.getSuperviseYear());
+        qualitySupervise.setRecordUserIds(supervise.getRecordUserIds());
+        qualitySupervise.setWriteUserId(userId);
+        qualitySupervise.setWriteUserName(user.getName());
+        qualitySupervise.setWriteTime(LocalDateTime.now());
+        qualitySupervise.setRatifyUserId(supervise.getRatifyUserId());
+        qualitySupervise.setRatifyUserName(ratifyUser.getName());
+        baseMapper.insert(qualitySupervise);
+
+        // 娑堟伅鍙戦��
+        InformationNotification info = new InformationNotification();
+        // 鍙戦�佷汉
+        info.setCreateUser(user.getName());
+        info.setMessageType("6");
+        info.setTheme("CNAS璐ㄩ噺鐩戠潱璁″垝瀹℃牳閫氱煡");
+        info.setContent("鎮ㄦ湁涓�鏉¤川閲忕洃鐫h鍒掑緟鎵瑰噯");
+        info.setSenderId(userId);
+        // 鎺ユ敹浜�
+        info.setConsigneeId(supervise.getRatifyUserId());
+        info.setJumpPath("a7-quality-control-plan");
+        informationNotificationService.addInformationNotification(info);
+
+        // 鍙戦�佷紒涓氬井淇¢�氱煡
+        threadPoolTaskExecutor.execute(() -> {
+            // 鏌ヨ鍙戦�佷汉
+            User people = userMapper.selectById(supervise.getRatifyUserId());
+            String message = "";
+            message += "CNAS璐ㄩ噺鐩戠潱璁″垝鎵瑰噯閫氱煡";
+            message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戠潱璁″垝";
+            message += "\n" + fileName + "璐ㄩ噺鐩戠潱璁″垝寰呮壒鍑�";
+            //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+            try {
+                WxCpUtils.inform(people.getAccount(), message, null);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        });
+
+
+        List<QualitySuperviseDetails> detailsUploadList = new ArrayList<>();
+
+        // 瀵煎叆闄勪欢鍐呭
+        try {
+            // excel瑙f瀽
+            EasyExcel.read(file.getInputStream(), QualitySuperviseDetailsUpload.class, new AnalysisEventListener<QualitySuperviseDetailsUpload>() {
+                @Override
+                public void invoke(QualitySuperviseDetailsUpload detailsUpload, AnalysisContext analysisContext) {
+                    // 鍒ゆ柇鏄惁涓虹┖
+                    if (StringUtils.isBlank(detailsUpload.getSuperviseTime())) {
+                        throw new ErrorException("鐩戠潱鏃ユ湡涓嶈兘涓虹┖");
+                    }
+                    // 瀵硅薄澶嶅埗
+                    QualitySuperviseDetails superviseDetails = new QualitySuperviseDetails();
+                    BeanUtils.copyProperties(detailsUpload, superviseDetails);
+                    superviseDetails.setSuperviseId(qualitySupervise.getSuperviseId());
+
+                    User user = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+                            .eq(User::getName, superviseDetails.getSupervisee()));
+                    if (ObjectUtils.isEmpty(user)) {
+                        throw new ErrorException("鏈壘鍒拌鐩戠潱鍛橈細" + superviseDetails.getSupervisee());
+                    }
+                    superviseDetails.setSupervisedUserId(user.getId());
+                    // 鏍煎紡鍖栨椂闂�
+                    superviseDetails.setSuperviseTime(detailsUpload.getSuperviseTime());
+
+                    detailsUploadList.add(superviseDetails);
+                }
+                @Override
+                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+                }
+            }).sheet().doRead();
+            qualitySuperviseDetailsService.saveBatch(detailsUploadList);
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return true;
+    }
+
+    /**
+     * 鐩戠潱璁″垝鎵瑰噯
+     * @param qualitySupervise
+     * @return
+     */
+    @Override
+    public boolean ratifyQualitySupervise(QualitySupervise qualitySupervise) {
+        // 褰撳墠鐧诲綍鐢ㄦ埛
+        baseMapper.update(null, Wrappers.<QualitySupervise>lambdaUpdate()
+                .eq(QualitySupervise::getSuperviseId, qualitySupervise.getSuperviseId())
+                .set(QualitySupervise::getRatifyRemark, qualitySupervise.getRatifyRemark())
+                .set(QualitySupervise::getRatifyStatus, qualitySupervise.getRatifyStatus())
+                .set(QualitySupervise::getRatifyTime, LocalDateTime.now())
+        );
+        return true;
+    }
+
+    /**
+     * 鐩戠潱璁″垝鍒楄〃
+     * @param page
+     * @param qualitySupervise
+     * @return
+     */
+    @Override
+    public IPage<QualitySupervise> pageQualitySupervise(Page page, QualitySupervise qualitySupervise) {
+        return baseMapper.pageQualitySupervise(page, QueryWrappers.queryWrappers(qualitySupervise));
+    }
+
+    /**
+     * 鐩戠潱璁″垝璇︽儏鍒楄〃
+     * @return
+     */
+    @Override
+    public IPage<QualitySuperviseDetailsDto> pageQualitySuperviseDetail(Page page, QualitySuperviseDetailsDto qualitySuperviseDetails) {
+        if (qualitySuperviseDetails.getSuperviseId() == null) {
+            return new Page();
+        }
+        Integer causeType = qualitySuperviseDetails.getCauseType();
+        qualitySuperviseDetails.setCauseType(null);
+        return qualitySuperviseDetailsMapper.pageQualitySuperviseDetail(page, QueryWrappers.queryWrappers(qualitySuperviseDetails), causeType);
+    }
+
+    /**
+     * 鏌ヨ璇ヨ鍒掔洃鐫e憳
+     * @param superviseDetailsId
+     * @return
+     */
+    @Override
+    public List<Map<String, String>> getRecordUser(Integer superviseDetailsId) {
+        return baseMapper.getRecordUser(superviseDetailsId);
+    }
+
+    /**
+     * 瀵煎嚭鐩戠潱璁″垝
+     * @param superviseId
+     * @param response
+     */
+    @Override
+    public void exportQualitySupervise(Integer superviseId, HttpServletResponse response) {
+        QualitySupervise qualitySupervise = baseMapper.selectById(superviseId);
+        //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+        String writeUrl = userMapper.selectById(qualitySupervise.getWriteUserId()).getSignatureUrl();
+        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+
+        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+        String ratifyUrl = null;
+        if (qualitySupervise.getRatifyUserId() != null) {
+            ratifyUrl = userMapper.selectById(qualitySupervise.getRatifyUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+            }
+        }
+
+        // 瀹氫箟涓�涓泦鍚堝瓨鏀句汉鍛樼鍚�
+        ArrayList<PictureRenderData> recordUserDataList = new ArrayList<>();
+        // TODO:纭鏈�澶氫細鏈�5涓汉
+        String recordUserIds = qualitySupervise.getRecordUserIds();
+        if (StringUtils.isNotBlank(recordUserIds)) {
+            // 瀵逛汉鍛榠d瀛楃涓茶繘琛屽垎鍓叉垚鏁扮粍
+            String[] userIds = recordUserIds.split(",");
+            // 寰幆鑾峰彇浜哄憳绛惧悕
+            for (String userIdStr : userIds) {
+                // 杞崲涓篿nt绫诲瀷
+                Integer userId = Integer.valueOf(userIdStr);
+                // 鑾峰彇浜哄憳绛惧悕瀵硅薄
+                PictureRenderData finalUserSignatureUrl = UserUtils.getFinalUserSignatureUrl(userId);
+                // 灏嗕汉鍛樼鍚嶅璞℃坊鍔犲埌闆嗗悎涓�
+                recordUserDataList.add(finalUserSignatureUrl);
+            }
+        }
+
+        // 鍒ゆ柇闆嗗悎闀垮害锛屽苟琛ull鍒�2涓�
+        while (recordUserDataList.size() < 2) {
+            recordUserDataList.add(null);
+        }
+
+        // 鏌ヨ璇︽儏
+        List<QualitySuperviseDetails> qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.<QualitySuperviseDetails>lambdaQuery()
+                .eq(QualitySuperviseDetails::getSuperviseId, superviseId));
+
+        int index = 1;
+        for (QualitySuperviseDetails qualitySuperviseDetail : qualitySuperviseDetails) {
+            qualitySuperviseDetail.setIndex(index);
+            index++;
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-supervise.docx");
+        String finalRatifyUrl = ratifyUrl;
+        Configure configure = Configure.builder()
+                .bind("superviseDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("year", qualitySupervise.getSuperviseYear());
+                    put("superviseDetailList", qualitySuperviseDetails);
+                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+                    put("writeDateUrl", qualitySupervise.getWriteTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(qualitySupervise.getWriteTime())).create() : null);
+                    put("ratifyDateUrl", qualitySupervise.getRatifyTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(qualitySupervise.getRatifyTime())).create() : null);
+                    put("recordUserUrl1", recordUserDataList.get(0));
+                    put("recordUserUrl2", recordUserDataList.get(1));
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    qualitySupervise.getSuperviseName(), "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 superviseDetailsId
+     * @return
+     */
+    @Override
+    public QualitySuperviseDetailsRecord getSuperviseDetailRecord(Integer superviseDetailsId) {
+        QualitySuperviseDetailsRecord detailsRecord;
+        detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
+                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetailsId));
+        if (detailsRecord == null) {
+            detailsRecord = new QualitySuperviseDetailsRecord();
+        }
+        // 娣诲姞鎵瑰噯浜哄悕绉�
+        if (detailsRecord.getRatifyUserId() != null) {
+            User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+            detailsRecord.setRatifyUserName(user.getName());
+        }
+        return detailsRecord;
+    }
+
+    /**
+     * 鏂板鐩戠潱璁板綍淇℃伅
+     * @param qualitySuperviseDetailsRecord
+     * @return
+     */
+    @Override
+    public boolean addSuperviseDetailRecord(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
+        if (qualitySuperviseDetailsRecord.getSuperviseDetailsId() == null) {
+            throw new ErrorException("缂哄皯鐩戠潱璇︾粏淇℃伅id");
+        }
+        qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord);
+
+        if (qualitySuperviseDetailsRecord.getRatifyUserId() != null) {
+
+            // 鏌ヨ璇︽儏淇℃伅
+            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(qualitySuperviseDetailsRecord.getSuperviseDetailsId());
+
+            Integer userId = SecurityUtils.getUserId().intValue();
+            User user = userMapper.selectById(userId);
+            // 娑堟伅鍙戦��
+            InformationNotification info = new InformationNotification();
+            // 鍙戦�佷汉
+            info.setCreateUser(user.getName());
+            info.setMessageType("6");
+            info.setTheme("CNAS璐ㄩ噺鐩戠潱璁板綍瀹℃壒閫氱煡");
+            info.setContent("鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱璁板綍甯﹀鎵�");
+            info.setSenderId(userId);
+            // 鎺ユ敹浜�
+            info.setConsigneeId(qualitySuperviseDetailsRecord.getRatifyUserId());
+            info.setJumpPath("a7-quality-control-plan");
+            informationNotificationService.addInformationNotification(info);
+
+            // 鍙戦�佷紒涓氬井淇¢�氱煡
+            threadPoolTaskExecutor.execute(() -> {
+                // 鏌ヨ鍙戦�佷汉
+                User people = userMapper.selectById(qualitySuperviseDetailsRecord.getRatifyUserId());
+                String message = "";
+                message += "CNAS璐ㄩ噺鐩戠潱璁板綍瀹℃壒閫氱煡";
+                message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戠潱璁″垝";
+                message += "\n" + "鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱璁板綍甯﹀鎵�";
+                //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                try {
+                    WxCpUtils.inform(people.getAccount(), message, null);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+
+        return true;
+    }
+
+    /**
+     * 鐩戠潱璁板綍鎵瑰噯
+     * @param qualitySuperviseDetailsRecord
+     * @return
+     */
+    @Override
+    public boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
+        if (qualitySuperviseDetailsRecord.getIsAccording() == null) {
+            throw new ErrorException("缂哄皯鏈�缁堢粨鏋�");
+        }
+
+        qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
+                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, qualitySuperviseDetailsRecord.getSuperviseDetailsId())
+                .set(QualitySuperviseDetailsRecord::getRatifyOpinion, qualitySuperviseDetailsRecord.getRatifyOpinion())
+                .set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now())
+                .set(QualitySuperviseDetailsRecord::getIsAccording, qualitySuperviseDetailsRecord.getIsAccording())
+                .set(QualitySuperviseDetailsRecord::getIsFinish, 1));
+        return true;
+    }
+
+    /**
+     * 瀵煎嚭鐩戠潱璁板綍琛�
+     * @param superviseDetailsId
+     * @param response
+     */
+    @Override
+    public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response) {
+        QualitySuperviseDetailsRecord recordDto =  qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId);
+
+        //鑾峰彇鎶�鏈礋璐d汉鐨勭鍚嶅湴鍧�
+        String ratifyUrl = null;
+        if (recordDto.getRatifyUserId() != null) {
+            ratifyUrl = userMapper.selectById(recordDto.getRatifyUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(ratifyUrl)) {
+                throw new ErrorException("鎵句笉鍒版妧鏈礋璐d汉鐨勭鍚�");
+            }
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-record.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String finalRatifyUrl = ratifyUrl;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("supervision", recordDto);
+                    put("supervisoruUrl", UserUtils.getFinalUserSignatureUrl(recordDto.getSupervisor()));
+                    put("technicalDirectorUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+                    put("technicalDirectorDateUrl", recordDto.getRatifyTime() != null ?
+                            Pictures.ofStream(DateImageUtil.createDateImage(recordDto.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("瀵煎嚭澶辫触");
+        }
+    }
+
+    /*************************************************  涓嶅悎鏍煎伐浣滄帶鍒跺崟 ********************************************************/
+
+    /**
+     * 鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param detailsAccording
+     * @return
+     */
+    @Override
+    public boolean addSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
+        QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
+        // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+        User user = userMapper.selectById( SecurityUtils.getUserId().intValue());
+        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+        switch (detailsAccording.getFlowType()) {
+                // 涓嶇鍚堝伐浣滄儏鍐佃褰�
+            case 0:
+                if (detailsAccording.getSuperviseDetailsId() == null) {
+                    throw new ErrorException("缂哄皯璐ㄩ噺鐩戠潱璇︽儏Id");
+                }
+                according.setSuperviseDetailsId(detailsAccording.getSuperviseDetailsId());
+                according.setOccurrenceDepartment(detailsAccording.getOccurrenceDepartment());//鍙戠敓閮ㄩ棬
+                according.setHeadDepartment(detailsAccording.getHeadDepartment());//閮ㄩ棬璐熻矗浜�
+                according.setFindWay(detailsAccording.getFindWay());//鍙戠幇閫斿緞
+                according.setRecordDetail(detailsAccording.getRecordDetail());//涓嶇鍚堣褰曡缁�
+                according.setRecordAccording(detailsAccording.getRecordAccording());//涓嶅悎鏍艰褰曚緷鎹�
+
+                according.setFoundDepartment(departmentLimsName);//鍙戠幇閮ㄩ棬
+                according.setRecordUserId(user.getId());//璁板綍浜篿d
+                according.setRecordUserName(user.getName());//璁板綍浜�
+                according.setRecordTime(LocalDate.now());//璁板綍鏃堕棿
+
+                // 澶勭悊浜轰俊鎭�
+                User actionsUser = userMapper.selectById(detailsAccording.getActionsUserId());
+                String actionsDepartmentLims = userMapper.selectUserDepartmentLimsName(actionsUser.getId());
+
+                according.setResponsibleDepartment(actionsDepartmentLims);//璐d换閮ㄩ棬
+                according.setActionsUserId(actionsUser.getId());//澶勭悊浜篿d
+                according.setActionsUserName(actionsUser.getName());//澶勭悊浜�
+
+                according.setSupervisedUserId(detailsAccording.getSupervisedUserId());//琚洃鐫d汉id
+                // 琚洃鐫d汉
+                User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId());
+                according.setSupervisedUserName(supervisedUser.getName());//琚洃鐫d汉
+                according.setActionsTime(detailsAccording.getSupervisedTime());//琚洃鐫f椂闂�
+                qualitySuperviseDetailsAccordingMapper.insert(according);
+                break;
+
+                // 1澶勭悊鎺柦
+            case 1:
+                according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
+                according.setEliminateMeasure(detailsAccording.getEliminateMeasure());//娓呴櫎涓嶇鍚堟帾鏂�
+                according.setActionsTime(LocalDate.now());//澶勭悊鏃堕棿
+
+                // 绾犳璐熻矗浜轰俊鎭�
+                User correctsUser = userMapper.selectById(detailsAccording.getCorrectUserId());
+
+                according.setCorrectUserId(correctsUser.getId());//绾犳璐熻矗浜篿d
+                according.setCorrectUserName(correctsUser.getName());//绾犳璐熻矗浜�
+
+                qualitySuperviseDetailsAccordingMapper.updateById(according);
+                break;
+
+                // 绾犳鎺柦
+            case 2:
+                according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
+                according.setCorrectContent(detailsAccording.getCorrectContent());//绾犳鎺柦鍐呭
+                according.setIsCorrect(detailsAccording.getIsCorrect());//鏄惁绾犳澶勭悊
+                according.setCorrectTime(LocalDate.now());//绾犳濉啓鏃堕棿
+
+                // 璐ㄩ噺璐熻矗浜�
+                User qualityUser = userMapper.selectById(detailsAccording.getQualityManagerUserId());
+                according.setQualityManagerUserId(qualityUser.getId());//璐ㄩ噺璐熻矗浜篿d
+                according.setQualityManagerUserName(qualityUser.getName());//璐ㄩ噺璐熻矗浜�
+
+                qualitySuperviseDetailsAccordingMapper.updateById(according);
+                break;
+
+                //鏄惁閫氱煡瀹㈡埛鍙仮澶嶅伐浣�
+            case 3:
+                according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
+                according.setNotifyCustomer(detailsAccording.getNotifyCustomer());//閫氱煡瀹㈡埛
+                according.setBackToWork(detailsAccording.getBackToWork());//鍥炲宸ヤ綔
+
+                according.setQualityManagerTime(LocalDate.now());//鏃ユ湡
+                according.setIsFinish(1);
+                qualitySuperviseDetailsAccordingMapper.updateById(according);
+                break;
+        }
+        return true;
+    }
+
+    /**
+     * (瑁呭娴佺▼)鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param detailsAccording
+     * @return
+     */
+    @Override
+    public boolean addEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
+        if (detailsAccording.getSuperviseDetailsId() == null) {
+            throw new ErrorException("缂哄皯璐ㄩ噺鐩戠潱璇︽儏Id");
+        }
+
+        // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+        detailsAccording.setFoundDepartment(departmentLimsName);//鍙戠幇閮ㄩ棬
+        detailsAccording.setRecordUserId(user.getId());//璁板綍浜篿d
+        detailsAccording.setRecordUserName(user.getName());//璁板綍浜�
+        // 琚洃鐫d汉
+        User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId());
+        detailsAccording.setSupervisedUserName(supervisedUser.getName());//琚洃鐫�
+        qualitySuperviseDetailsAccordingMapper.insert(detailsAccording);
+
+        if (detailsAccording.getApproverUserId() != null) {
+            // 鏌ヨ璇︽儏淇℃伅
+            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(detailsAccording.getSuperviseDetailsId());
+
+            // 娑堟伅鍙戦��
+            InformationNotification info = new InformationNotification();
+            // 鍙戦�佷汉
+            info.setCreateUser(user.getName());
+            info.setMessageType("6");
+            info.setTheme("CNAS璐ㄩ噺鐩戠潱涓嶅悎鏍兼帶鍒跺崟濉啓閫氱煡");
+            info.setContent("鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱涓嶅悎鏍兼帶鍒跺崟寰呭~鍐�");
+            info.setSenderId(userId);
+            // 鎺ユ敹浜�
+            info.setConsigneeId(detailsAccording.getApproverUserId());
+            info.setJumpPath("a7-quality-control-plan");
+            informationNotificationService.addInformationNotification(info);
+
+            // 鍙戦�佷紒涓氬井淇¢�氱煡
+            threadPoolTaskExecutor.execute(() -> {
+                // 鏌ヨ鍙戦�佷汉
+                User people = userMapper.selectById(detailsAccording.getApproverUserId());
+                String message = "";
+                message += "CNAS璐ㄩ噺鐩戠潱璁板綍瀹℃壒閫氱煡";
+                message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戠潱璁″垝";
+                message += "\n" + "鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱涓嶅悎鏍兼帶鍒跺崟寰呭~鍐�";
+                //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                try {
+                    WxCpUtils.inform(people.getAccount(), message, null);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+
+        return true;
+    }
+
+    /**
+     * (瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * 鎵瑰噯瀹屾垚鍚庣粺涓�濉啓涓変釜娴佺▼浜篿d鍜岄儴闂�
+     * @param detailsAccording
+     * @return
+     */
+    @Override
+    public boolean approverEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
+        QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
+        according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
+        // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+
+        according.setResponsibleDepartment(departmentLimsName);//璐d换閮ㄩ棬
+        according.setActionsUserId(user.getId());//澶勭悊浜篿d
+        according.setActionsUserName(user.getName());//澶勭悊浜�
+
+        according.setCorrectUserId(user.getId());//绾犳璐熻矗浜篿d
+        according.setCorrectUserName(user.getName());//绾犳璐熻矗浜�
+
+        according.setQualityManagerUserId(user.getId());//璐ㄩ噺璐熻矗浜篿d
+        according.setQualityManagerUserName(user.getName());//璐ㄩ噺璐熻矗浜�
+        according.setIsFinish(1);
+        qualitySuperviseDetailsAccordingMapper.updateById(according);
+        return true;
+    }
+
+    /**
+     * 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param superviseDetailsId
+     * @return
+     */
+    @Override
+    public QualitySuperviseDetailsAccording getSuperviseDetailAccording(Integer superviseDetailsId) {
+        QualitySuperviseDetailsAccording detailsAccording;
+
+        detailsAccording = qualitySuperviseDetailsAccordingMapper.selectOne(Wrappers.<QualitySuperviseDetailsAccording>lambdaQuery()
+                .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsId, superviseDetailsId));
+
+        if (detailsAccording == null) {
+            detailsAccording = new QualitySuperviseDetailsAccording();
+            // 鏌ヨ鐩戠潱璁″垝璇︽儏
+            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
+            detailsAccording.setSupervisedUserId(superviseDetails.getSupervisedUserId());
+            detailsAccording.setSupervisedUserName(superviseDetails.getSupervisee());
+        }
+        return detailsAccording;
+    }
+
+    /**
+     * 鏌ヨ涓嶇鍚堥」
+     * @param page
+     * @param detailsAccording
+     * @return
+     */
+    @Override
+    public IPage<QualitySuperviseDetailsAccording> pageSuperviseDetailAccording(Page page, QualitySuperviseDetailsAccording detailsAccording) {
+        return qualitySuperviseDetailsAccordingMapper.pageSuperviseDetailAccording(page, QueryWrappers.queryWrappers(detailsAccording));
+    }
+
+    /**
+     * 瀵煎嚭鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+     * @param superviseDetailAccordingId
+     * @param response
+     */
+    @Override
+    public void superviseDetailAccordingExport(Integer superviseDetailAccordingId, HttpServletResponse response) {
+        QualitySuperviseDetailsAccordingDto exportDto = qualitySuperviseDetailsAccordingMapper.selectSuperviseDetailsAccording(superviseDetailAccordingId);
+        // 鍙戠幇閮ㄩ棬
+        String discovererUrl = null;
+        if (exportDto.getRecordUserId() != null) {
+            discovererUrl = userMapper.selectById(exportDto.getRecordUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(discovererUrl)) {
+                throw new ErrorException("鎵句笉鍒板彂鐜伴儴闂ㄤ汉鐨勭鍚�");
+            }
+        }
+
+        // 澶勭悊鎺柦璐熻矗浜�
+        String responsibleUrl = null;
+        if (exportDto.getCorrectUserId() != null) {
+            responsibleUrl = userMapper.selectById(exportDto.getCorrectUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(responsibleUrl)) {
+                throw new ErrorException("鎵句笉鍒板鐞嗘帾鏂借礋璐d汉鐨勭鍚�");
+            }
+        }
+
+        // 鎶�鏈礋璐d汉
+        String correctiveUrl = null;
+        if (exportDto.getQualityManagerUserId() != null) {
+            correctiveUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(correctiveUrl)) {
+                throw new ErrorException("鎵句笉鍒版妧鏈礋璐d汉鐨勭鍚�");
+            }
+        }
+
+        // 璐ㄩ噺璐熻矗浜�
+        String qualityUrl = null;
+        if (exportDto.getQualityManagerUserId() != null) {
+            qualityUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(qualityUrl)) {
+                throw new ErrorException("鎵句笉鍒拌川閲忚礋璐d汉鐨勭鍚�");
+            }
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-according.docx");
+        ConfigureBuilder builder = Configure.builder();
+        String finalDiscovererUrl = discovererUrl;
+        String finalResponsibleUrl = responsibleUrl;
+        String finalCorrectiveUrl = correctiveUrl;
+        String finalQualityUrl = qualityUrl;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("control", exportDto);
+                    put("discovererUrl", StringUtils.isNotBlank(finalDiscovererUrl) ? Pictures.ofLocal(imgUrl + "/" + finalDiscovererUrl).create() : null);
+                    put("responsibleUrl", StringUtils.isNotBlank(finalResponsibleUrl) ? Pictures.ofLocal(imgUrl + "/" + finalResponsibleUrl).create() : null);
+                    put("correctiveUrl", StringUtils.isNotBlank(finalCorrectiveUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectiveUrl).create() : null);
+                    put("qualityUrl", StringUtils.isNotBlank(finalQualityUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).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("瀵煎嚭澶辫触");
+        }
+    }
+
+    /*************************************************  绾犳鎺柦澶勭悊鍗� ********************************************************/
+
+
+    @Override
+    public boolean addSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
+        QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect();
+        // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+
+        switch (detailsCorrect.getFlowType()) {
+                // 涓嶅悎鏍兼彁鍑�
+            case 0:
+                if (detailsCorrect.getSuperviseDetailsId() == null) {
+                    throw new ErrorException("缂哄皯璐ㄩ噺鐩戠潱璇︽儏Id");
+                }
+                correct.setSuperviseDetailsId(detailsCorrect.getSuperviseDetailsId());
+                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鍘熷洜鍒嗘瀽浜�
+                qualitySuperviseDetailsCorrectMapper.insert(correct);
+
+                break;
+
+                // 鍘熷洜鍒嗘瀽
+            case 1:
+                correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
+                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绾犳浜�
+                qualitySuperviseDetailsCorrectMapper.updateById(correct);
+                break;
+
+                // 绾犳鎺柦
+            case 2:
+                correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
+                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楠岃瘉浜�
+                qualitySuperviseDetailsCorrectMapper.updateById(correct);
+                break;
+
+                // 楠岃瘉缁撴灉
+            case 3:
+                correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
+                correct.setValidationResult(detailsCorrect.getValidationResult());//3楠岃瘉缁撴灉
+                correct.setValidationTime(LocalDate.now());// 3楠岃瘉鏃堕棿
+                correct.setIsFinish(1);
+                qualitySuperviseDetailsCorrectMapper.updateById(correct);
+                break;
+        }
+
+        return true;
+    }
+
+    /**
+     * (瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊淇℃伅
+     * @return
+     */
+    @Override
+    public boolean addEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
+        if (detailsCorrect.getSuperviseDetailsId() == null) {
+            throw new ErrorException("缂哄皯璐ㄩ噺鐩戠潱璇︽儏Id");
+        }
+        // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+
+        detailsCorrect.setRaiseDepartment(departmentLimsName);//鎻愬嚭閮ㄩ棬
+        detailsCorrect.setRaiseUserId(user.getId());//鎻愬嚭浜篿d
+        detailsCorrect.setRaiseUserName(user.getName());// 鎻愬嚭浜�
+        qualitySuperviseDetailsCorrectMapper.insert(detailsCorrect);
+
+        if (detailsCorrect.getApproverUserId() != null) {
+            // 鏌ヨ璇︽儏淇℃伅
+            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(detailsCorrect.getSuperviseDetailsId());
+
+            // 娑堟伅鍙戦��
+            InformationNotification info = new InformationNotification();
+            // 鍙戦�佷汉
+            info.setCreateUser(user.getName());
+            info.setMessageType("6");
+            info.setTheme("CNAS璐ㄩ噺鐩戠潱绾犳鎺柦濉啓閫氱煡");
+            info.setContent("鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱绾犳鎺柦寰呭~鍐�");
+            info.setSenderId(userId);
+            // 鎺ユ敹浜�
+            info.setConsigneeId(detailsCorrect.getApproverUserId());
+            info.setJumpPath("a7-quality-control-plan");
+            informationNotificationService.addInformationNotification(info);
+
+            // 鍙戦�佷紒涓氬井淇¢�氱煡
+            threadPoolTaskExecutor.execute(() -> {
+                // 鏌ヨ鍙戦�佷汉
+                User people = userMapper.selectById(detailsCorrect.getApproverUserId());
+                String message = "";
+                message += "CNAS璐ㄩ噺鐩戠潱绾犳鎺柦濉啓閫氱煡";
+                message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戠潱璁″垝";
+                message += "\n" + "鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱绾犳鎺柦寰呭~鍐�";
+                //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                try {
+                    WxCpUtils.inform(people.getAccount(), message, null);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+
+        return true;
+    }
+
+    /**
+     * (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊淇℃伅
+     * @return
+     */
+    @Override
+    public boolean approveEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
+        QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect();
+        // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+        correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
+
+        correct.setCauseDepartment(departmentLimsName);//鍘熷洜鍒嗘瀽璐d换閮ㄩ棬
+        correct.setCauseUserId(user.getId());//1鍘熷洜鍒嗘瀽浜篿d
+        correct.setCauseUserName(user.getName());// 1鍘熷洜鍒嗘瀽浜�
+
+        correct.setCorrectDepartment(departmentLimsName);//2绾犳璐d换閮ㄩ棬
+        correct.setCorrectUserId(user.getId());//2绾犳浜篿d
+        correct.setCorrectUserName(user.getName());// 2绾犳浜�
+
+        correct.setValidationDepartment(departmentLimsName);//3楠岃瘉閮ㄩ棬
+        correct.setValidationUserId(user.getId());//3楠岃瘉浜篿d
+        correct.setValidationUserName(user.getName());// 3楠岃瘉浜�
+        correct.setIsFinish(1);
+        qualitySuperviseDetailsCorrectMapper.updateById(correct);
+
+        return true;
+    }
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳澶勭悊
+     * @param superviseDetailsId
+     * @return
+     */
+    @Override
+    public QualitySuperviseDetailsCorrect getSuperviseDetailCorrect(Integer superviseDetailsId) {
+        QualitySuperviseDetailsCorrect detailsCorrect;
+
+        detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectOne(Wrappers.<QualitySuperviseDetailsCorrect>lambdaQuery()
+                .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsId, superviseDetailsId));
+
+        if (detailsCorrect == null) {
+            detailsCorrect = new QualitySuperviseDetailsCorrect();
+        }
+        return detailsCorrect;
+    }
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃
+     * @param page
+     * @param detailsCorrect
+     * @return
+     */
+    @Override
+    public IPage<QualitySuperviseDetailsCorrect> pageSuperviseDetailCorrect(Page page, QualitySuperviseDetailsCorrect detailsCorrect) {
+        return qualitySuperviseDetailsCorrectMapper.pageSuperviseDetailAccording(page, QueryWrappers.queryWrappers(detailsCorrect));
+    }
+
+    /**
+     * 鏂板鐩戠潱绾犳鎺柦闄勪欢
+     * @param superviseDetailsCorrectId
+     * @param file
+     * @return
+     */
+    @Override
+    public boolean uploadSuperviseDetailCorrectFile(Integer superviseDetailsCorrectId, MultipartFile file) {
+        if (superviseDetailsCorrectId == null) {
+            throw new ErrorException("缂哄皯绾犳鎺柦id");
+        }
+
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        QualitySuperviseDetailsCorrectFile superviseDetailsCorrectFile = new QualitySuperviseDetailsCorrectFile();
+        superviseDetailsCorrectFile.setSuperviseDetailsCorrectId(superviseDetailsCorrectId);
+        superviseDetailsCorrectFile.setFileName(filename);
+        if (contentType != null && contentType.startsWith("image/")) {
+            // 鏄浘鐗�
+            path = imgUrl;
+            superviseDetailsCorrectFile.setType(1);
+        } else {
+            // 鏄枃浠�
+            path = wordUrl;
+            superviseDetailsCorrectFile.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));
+            superviseDetailsCorrectFile.setFileUrl(pathName);
+            qualitySuperviseDetailsCorrectFileMapper.insert(superviseDetailsCorrectFile);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ErrorException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ鐩戠潱绾犳鎺柦闄勪欢
+     * @param superviseDetailsCorrectId
+     * @return
+     */
+    @Override
+    public List<QualitySuperviseDetailsCorrectFile> getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId) {
+        return qualitySuperviseDetailsCorrectFileMapper.selectList(Wrappers.<QualitySuperviseDetailsCorrectFile>lambdaQuery()
+                .eq(QualitySuperviseDetailsCorrectFile::getSuperviseDetailsCorrectId, superviseDetailsCorrectId));
+    }
+
+    /**
+     * 瀵煎嚭鐩戠潱绾犳鎺柦
+     * @param superviseDetailsCorrectId
+     * @param response
+     */
+    @Override
+    public void exportSuperviseDetaillCorrect(Integer superviseDetailsCorrectId, HttpServletResponse response) {
+        QualitySuperviseDetailsCorrect detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectById(superviseDetailsCorrectId);
+        QualitySuperviseDetailsCorrectDto detailsCorrectDto = new QualitySuperviseDetailsCorrectDto();
+        BeanUtils.copyProperties(detailsCorrect, detailsCorrectDto);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        // 鎻愬嚭鏃堕棿
+        detailsCorrectDto.setRaiseTimeString(detailsCorrectDto.getRaiseTime() != null
+                ? detailsCorrectDto.getRaiseTime().format(formatter) : null);
+        // 鍘熷洜鍒嗘瀽鏃堕棿
+        detailsCorrectDto.setCauseTimeString(detailsCorrectDto.getCauseTime() != null
+                ? detailsCorrectDto.getCauseTime().format(formatter) : null);
+
+        // 绾犳鏃堕棿
+        detailsCorrectDto.setCorrectTimeString(detailsCorrectDto.getCorrectTime() != null
+                ? detailsCorrectDto.getCorrectTime().format(formatter) : null);
+
+        // 楠岃瘉鏃堕棿
+        detailsCorrectDto.setValidationTimeString(detailsCorrectDto.getValidationTime() != null
+                ? detailsCorrectDto.getValidationTime().format(formatter) : null);
+
+
+        // 鎻愬嚭浜虹鍚�
+        String raiseUrl = null;
+        if (detailsCorrectDto.getRaiseUserId() != null) {
+            raiseUrl = userMapper.selectById(detailsCorrectDto.getRaiseUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(raiseUrl)) {
+                throw new ErrorException("鎵句笉鍒版彁鍑轰汉鐨勭鍚�");
+            }
+        }
+
+        // 鍘熷洜鍒嗘瀽浜�
+        String causeUrl = null;
+        if (detailsCorrectDto.getCauseUserId() != null) {
+            causeUrl = userMapper.selectById(detailsCorrectDto.getCauseUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(causeUrl)) {
+                throw new ErrorException("鎵句笉鍒板師鍥犲垎鏋愪汉鐨勭鍚�");
+            }
+        }
+
+        // 绾犳浜�
+        String correctUrl = null;
+        if (detailsCorrectDto.getCorrectUserId() != null) {
+            correctUrl = userMapper.selectById(detailsCorrectDto.getCorrectUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(correctUrl)) {
+                throw new ErrorException("鎵句笉鍒扮籂姝d汉鐨勭鍚�");
+            }
+        }
+
+        // 楠岃瘉浜�
+        String validationUrl = null;
+        if (detailsCorrectDto.getValidationUserId() != null) {
+            validationUrl = userMapper.selectById(detailsCorrectDto.getValidationUserId()).getSignatureUrl();
+            if (StringUtils.isBlank(validationUrl)) {
+                throw new ErrorException("鎵句笉鍒伴獙璇佷汉鐨勭鍚�");
+            }
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/supervise-detail-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", detailsCorrectDto);
+                    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-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java b/cnas-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java
new file mode 100644
index 0000000..0c35317
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java
@@ -0,0 +1,66 @@
+package com.ruoyi.process.task;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.process.mapper.QualitySuperviseDetailsMapper;
+import com.ruoyi.process.pojo.QualitySuperviseDetails;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * 鍩硅璁″垝浣跨敤鎻愰啋璁板綍鎻愰啋
+ */
+@Component
+public class QualitySuperviseSchedule {
+    @Resource
+    private QualitySuperviseDetailsMapper qualitySuperviseDetailsMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+    /**
+     * 鎻愰啋濉啓璁惧浣跨敤璁板綍
+     */
+//    @Scheduled(cron = "0/5 * * * * *")
+    @Scheduled(cron = "0 0 9 1 * *") // 姣忔湀1鍙锋墽琛�
+    public void task1() {
+        // 鏌ヨ褰撴湀鐩戠潱璁″垝
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M");
+        String format = LocalDateTime.now().format(formatter);
+        List<QualitySuperviseDetails> qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.<QualitySuperviseDetails>lambdaQuery()
+                .eq(QualitySuperviseDetails::getSuperviseTime, format));
+
+        for (QualitySuperviseDetails qualitySuperviseDetail : qualitySuperviseDetails) {
+            threadPoolTaskExecutor.execute(() -> {
+                // 鏌ヨ琚洃鐫d汉淇℃伅
+                User user = userMapper.selectById(qualitySuperviseDetail.getSupervisedUserId());
+                // 浼佷笟寰俊閫氱煡鍩硅
+                String message = "";
+                message += "璐ㄩ噺鐩戠潱璁″垝鎻愰啋閫氱煡";
+                message += "\n鐩戠潱鏃ユ湡: " + qualitySuperviseDetail.getSuperviseTime();
+                message += "\n鐩戠潱鐩殑: " + qualitySuperviseDetail.getSupervisePurpose();
+                message += "\n鐩戠潱椤圭洰: " + qualitySuperviseDetail.getSuperviseProject();
+                message += "\n琚洃鐫d汉: " + qualitySuperviseDetail.getSupervisee();
+                message += "\n璁″垝褰撴湀杩涜鐩戠潱璁″垝";
+
+                //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                try {
+                    WxCpUtils.inform(user.getAccount(), message, null);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+    }
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/test.java b/cnas-process/src/main/java/com/ruoyi/process/test.java
deleted file mode 100644
index 4ce577f..0000000
--- a/cnas-process/src/main/java/com/ruoyi/process/test.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.ruoyi.process;
-
-/**
- * @Author zhuo
- * @Date 2025/2/22
- */
-public class test {
-}
diff --git a/cnas-process/src/main/resources/mapper/InconsistentDistributionDetailMapper.xml b/cnas-process/src/main/resources/mapper/InconsistentDistributionDetailMapper.xml
new file mode 100644
index 0000000..8dde5b2
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/InconsistentDistributionDetailMapper.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.ruoyi.process.mapper.InconsistentDistributionDetailMapper">
+
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/InconsistentDistributionMapper.xml b/cnas-process/src/main/resources/mapper/InconsistentDistributionMapper.xml
new file mode 100644
index 0000000..f8d88e1
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/InconsistentDistributionMapper.xml
@@ -0,0 +1,20 @@
+<?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.process.mapper.InconsistentDistributionMapper">
+
+    <!-- 涓嶇鍚堥」鍒嗛〉鏌ヨ -->
+    <select id="pageInconsistentDistribution" resultType="com.ruoyi.process.dto.InconsistentDistributionDto">
+        select *
+        from (select cid.*,
+                     u1.name create_user_name,
+                     u2.name update_user_name
+              from cnas_inconsistent_distribution cid
+                       left join user u1 on u1.id = cid.create_user
+                       left join user u2 on u2.id = cid.update_user
+              order by cid.create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/InspectionOrderDetailMapper.xml b/cnas-process/src/main/resources/mapper/InspectionOrderDetailMapper.xml
new file mode 100644
index 0000000..4cd91ee
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/InspectionOrderDetailMapper.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.ruoyi.process.mapper.InspectionOrderDetailMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.InspectionOrderDetail">
+        <id column="inspection_order_detail_id" property="inspectionOrderDetailId" />
+        <result column="inspection_order_id" property="inspectionOrderId" />
+        <result column="sample_number" property="sampleNumber" />
+        <result column="test_item" property="testItem" />
+        <result column="test_standard" property="testStandard" />
+        <result column="remark" property="remark" />
+        <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-process/src/main/resources/mapper/InspectionOrderMapper.xml b/cnas-process/src/main/resources/mapper/InspectionOrderMapper.xml
new file mode 100644
index 0000000..e43189c
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/InspectionOrderMapper.xml
@@ -0,0 +1,28 @@
+<?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.process.mapper.InspectionOrderMapper">
+
+    <!--妫�楠屽鎵樺崟鍒嗛〉鏌ヨ-->
+    <select id="pageInspectionOrder" resultType="com.ruoyi.process.dto.InspectionOrderDto">
+        select *
+        from (select *
+        from cnas_inspection_order
+        order by create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <!--濮旀墭鍗曟煡璇㈡垚鍝佽鍗�-->
+    <select id="getInsOrderOnInspection" resultType="com.ruoyi.inspect.pojo.InsOrder">
+        select *
+        from (select *
+        from ins_order
+        where state = 4 and ifs_inventory_id is null
+        order by entrust_code desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessComplainMapper.xml b/cnas-process/src/main/resources/mapper/ProcessComplainMapper.xml
new file mode 100644
index 0000000..6033fa3
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessComplainMapper.xml
@@ -0,0 +1,62 @@
+<?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.process.mapper.ProcessComplainMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessComplain">
+        <id column="id" property="id"/>
+        <result column="complain_no" property="complainNo"/>
+        <result column="complain_name" property="complainName"/>
+        <result column="ins_report_id" property="insReportId"/>
+        <result column="sample_code" property="sampleCode"/>
+        <result column="create_user" property="createUser"/>
+        <result column="complainant" property="complainant"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="complain_method" property="complainMethod"/>
+        <result column="problem_records" property="problemRecords"/>
+        <result column="problem_records_user" property="problemRecordsUser"/>
+        <result column="problem_records_time" property="problemRecordsTime"/>
+        <result column="duty_ownership" property="dutyOwnership"/>
+        <result column="duty_ownership_user" property="dutyOwnershipUser"/>
+        <result column="duty_ownership_time" property="dutyOwnershipTime"/>
+        <result column="cause_analysis" property="causeAnalysis"/>
+        <result column="cause_analysis_user" property="causeAnalysisUser"/>
+        <result column="cause_analysis_time" property="causeAnalysisTime"/>
+        <result column="corrective_action" property="correctiveAction"/>
+        <result column="corrective_action_user" property="correctiveActionUser"/>
+        <result column="corrective_action_time" property="correctiveActionTime"/>
+        <result column="corrective_action_confirmation" property="correctiveActionConfirmation"/>
+        <result column="corrective_action_confirmation_user" property="correctiveActionConfirmationUser"/>
+        <result column="corrective_action_confirmation_time" property="correctiveActionConfirmationTime"/>
+    </resultMap>
+    <select id="pageProcessComplain" resultType="com.ruoyi.process.pojo.ProcessComplain">
+        select *
+        from (select cpc.*,name complainant
+        from cnas_process_complain cpc left join user u on cpc.create_user = u.id)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+    <select id="getProcessComplain" resultType="com.ruoyi.process.dto.ProcessComplainDto">
+        select cpc.*,
+            ir.code,
+               u1.name complainant,
+               u1.phone,
+               u1.email,
+               u2.name problemRecordsUserName,
+               u3.name dutyOwnershipUserName,
+               u4.name causeAnalysisUserName,
+               u5.name correctiveActionUserName,
+               u6.name correctiveActionConfirmationUserName
+        from cnas_process_complain cpc
+                 left join user u1 on cpc.create_user = u1.id
+                 left join user u2 on cpc.problem_records_user = u2.id
+                 left join user u3 on cpc.duty_ownership_user = u3.id
+                 left join user u4 on cpc.cause_analysis_user = u4.id
+                 left join user u5 on cpc.corrective_action_user = u5.id
+                 left join user u6 on cpc.corrective_action_confirmation_user = u6.id
+            left join ins_report ir on cpc.ins_report_id = ir.id
+        where cpc.id=#{id}
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessDealMapper.xml b/cnas-process/src/main/resources/mapper/ProcessDealMapper.xml
new file mode 100644
index 0000000..b7e00d7
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessDealMapper.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.ruoyi.process.mapper.ProcessDealMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessDeal">
+        <id column="id" property="id"/>
+        <result column="sample_name" property="sampleName"/>
+        <result column="sample_code" property="sampleCode"/>
+        <result column="sample_supplier" property="sampleSupplier"/>
+        <result column="num" property="num"/>
+        <result column="deal_method" property="dealMethod"/>
+        <result column="deal_time" property="dealTime"/>
+        <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="totaldeal_id" property="totaldealId"/>
+    </resultMap>
+    <select id="pageProcessDeal" resultType="com.ruoyi.process.pojo.ProcessDeal">
+        select *
+        from (select * from cnas_process_deal) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessEvaluateMapper.xml b/cnas-process/src/main/resources/mapper/ProcessEvaluateMapper.xml
new file mode 100644
index 0000000..bea6799
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessEvaluateMapper.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.ruoyi.process.mapper.ProcessEvaluateMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessEvaluate">
+        <id column="id" property="id"/>
+        <result column="report_name" property="reportName"/>
+        <result column="report_url" property="reportUrl"/>
+        <result column="evaluate_user" property="evaluateUser"/>
+        <result column="evaluateUserName" property="evaluateUserName"/>
+        <result column="evaluate_time" property="evaluateTime"/>
+        <result column="note" property="note"/>
+        <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="pageProcessEvaluate" resultType="com.ruoyi.process.pojo.ProcessEvaluate">
+        select * from (select cpe.*,u.name evaluateUserName
+        from cnas_process_evaluate cpe
+        left join user u on cpe.evaluate_user = u.id)A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewArchivedMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewArchivedMapper.xml
new file mode 100644
index 0000000..963db04
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewArchivedMapper.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.ruoyi.process.mapper.ProcessMethodSearchNewArchivedMapper">
+
+    <select id="pageSearchNewArchived" resultType="com.ruoyi.process.dto.ProcessMethodSearchNewArchivedDto">
+        select *
+        from (select cqm.*,
+        u1.name write_name,
+        u3.name ratify_name
+        from cnas_process_method_search_new_archived cqm
+        left join user u1 on u1.id = cqm.write_user_id
+        left join user u3 on u3.id = cqm.ratify_user_id
+        order by cqm.create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewBackupsMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewBackupsMapper.xml
new file mode 100644
index 0000000..46e55a3
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewBackupsMapper.xml
@@ -0,0 +1,16 @@
+<?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.process.mapper.ProcessMethodSearchNewBackupsMapper">
+
+    <select id="pageSearchNewBackups" resultType="com.ruoyi.process.pojo.ProcessMethodSearchNewBackups">
+        select *
+        from (select *
+        from cnas_process_method_search_new_backups
+        order by create_time desc
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml
new file mode 100644
index 0000000..7be9498
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ruoyi.process.mapper.ProcessMethodSearchNewMapper">
+
+    <!-- 鏍囧噯鏌ユ柊鍒嗛〉鏌ヨ -->
+    <select id="pageMethodSearchNew" resultType="com.ruoyi.process.pojo.ProcessMethodSearchNew">
+        select *
+        from (select *
+        from cnas_process_method_search_new
+        <where>
+            <if test="beginDate != null and beginDate != '' and endDate != null and endDate != ''">
+                and create_time between #{beginDate} and #{endDate}
+            </if>
+        </where>
+        order by create_time desc
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodVerifyCalibrationsFileMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyCalibrationsFileMapper.xml
new file mode 100644
index 0000000..b5e95d0
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyCalibrationsFileMapper.xml
@@ -0,0 +1,24 @@
+<?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.process.mapper.ProcessMethodVerifyCalibrationsFileMapper">
+    <select id="selectCalibrationsFileList"
+            resultType="com.ruoyi.process.dto.ProcessMethodVerifyCalibrationsFileDto">
+        select cf.*,
+               d.device_name,
+               d.management_number
+        from cnas_process_method_verify_calibrations_file cf
+                 left join device d on d.id = cf.device_id
+        where cf.method_verify_id = #{methodVerifyId}
+    </select>
+
+    <!-- 璁惧璇佷功鏌ヨ鏍″噯璇佷功 -->
+    <select id="selectCalibrationsFile" resultType="java.lang.String">
+        select system_file_name
+        from device_metric_record
+        where device_id = #{deviceId}
+          and type = 'calibrate'
+          and status = '0yes'
+        order by create_time desc
+        limit 1
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMachineAttachmentMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMachineAttachmentMapper.xml
new file mode 100644
index 0000000..aadcf87
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMachineAttachmentMapper.xml
@@ -0,0 +1,5 @@
+<?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.process.mapper.ProcessMethodVerifyMachineAttachmentMapper">
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMapper.xml
new file mode 100644
index 0000000..ff31958
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMapper.xml
@@ -0,0 +1,22 @@
+<?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.process.mapper.ProcessMethodVerifyMapper">
+
+    <!-- 鏍囧噯鏂规硶璺熸柊楠岃瘉鍒楄〃 -->
+    <select id="pagesMethodVerify" resultType="com.ruoyi.process.pojo.ProcessMethodVerify">
+        select * from (
+        select method_verify_id,
+        method_name,
+        verify_reason,
+        technology_change,
+        confirm_date,
+        create_time,
+        operation_type
+        from cnas_process_method_verify
+        order by create_time desc
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMethodFileMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMethodFileMapper.xml
new file mode 100644
index 0000000..4bc5d74
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyMethodFileMapper.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.ruoyi.process.mapper.ProcessMethodVerifyMethodFileMapper">
+
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodVerifyWorkFileMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyWorkFileMapper.xml
new file mode 100644
index 0000000..f7dfffd
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodVerifyWorkFileMapper.xml
@@ -0,0 +1,13 @@
+<?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.process.mapper.ProcessMethodVerifyWorkFileMapper">
+
+    <!-- 鏍规嵁鐢ㄦ埛id鏌ヨ涓婂矖璇佸湴鍧� -->
+    <select id="selectWorkFile" resultType="java.lang.String">
+        select system_file_name
+        from cnas_person_post_authorization_record
+        where user_id = #{userId}
+        order by create_time desc
+        limit 1
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessReportMapper.xml b/cnas-process/src/main/resources/mapper/ProcessReportMapper.xml
new file mode 100644
index 0000000..6c06783
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessReportMapper.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.ruoyi.process.mapper.ProcessReportMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessReport">
+        <id column="id" property="id"/>
+        <result column="ins_report_code" property="insReportCode"/>
+        <result column="pages" property="pages"/>
+        <result column="number" property="number"/>
+        <result column="send" property="send"/>
+        <result column="method" property="method"/>
+        <result column="send_time" property="sendTime"/>
+        <result column="send_user" property="sendUser"/>
+        <result column="signatory" property="signatory"/>
+        <result column="remark" property="remark"/>
+        <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="pageProcessReport" resultType="com.ruoyi.process.pojo.ProcessReport">
+        select * from (select cpr.* ,
+        u1.name sendUserName
+        from cnas_process_report cpr
+        left join user u1 on send_user=u1.id )A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+    <select id="getIds" resultType="com.ruoyi.process.pojo.ProcessReport">
+        select cpr.* ,
+        u1.name sendUserName
+        from cnas_process_report cpr
+        left join user u1 on send_user=u1.id
+        where 1=1
+        and cpr.id in
+        <foreach collection="ids" separator="," item="id" open="(" close=")">
+            #{id}
+        </foreach>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessSampleMapper.xml b/cnas-process/src/main/resources/mapper/ProcessSampleMapper.xml
new file mode 100644
index 0000000..3e27bb6
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessSampleMapper.xml
@@ -0,0 +1,29 @@
+<?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.process.mapper.ProcessSampleMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessSample">
+        <id column="id" property="id" />
+        <result column="sample_name" property="sampleName" />
+        <result column="sample_code" property="sampleCode" />
+        <result column="sample_supplier" property="sampleSupplier" />
+        <result column="num" property="num" />
+        <result column="sample_state" property="sampleState" />
+        <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="total_sample_id" property="totalSampleId" />
+        <result column="receive_date" property="receiveDate" />
+        <result column="leave_date" property="leaveDate" />
+        <result column="deal_time" property="dealTime" />
+    </resultMap>
+    <select id="pageProcessSample" resultType="com.ruoyi.process.pojo.ProcessSample">
+        select *
+        from (select * from cnas_process_sample) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessTotalSampleMapper.xml b/cnas-process/src/main/resources/mapper/ProcessTotalSampleMapper.xml
new file mode 100644
index 0000000..5d8ac9c
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessTotalSampleMapper.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.ruoyi.process.mapper.ProcessTotalSampleMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessTotalSample">
+        <id column="id" property="id" />
+        <result column="examine_user" property="examineUser"/>
+        <result column="examine_state" property="examineState"/>
+        <result column="examine_url" property="examineUrl"/>
+        <result column="examineUserName" property="examineUserName"/>
+        <result column="ratify_user" property="ratifyUser"/>
+        <result column="ratify_state" property="ratifyState"/>
+        <result column="ratify_url" property="ratifyUrl"/>
+        <result column="ratifyUserName" property="ratifyUserName"/>
+        <result column="submit_user" property="submitUser"/>
+        <result column="submit_state" property="submitState"/>
+        <result column="submit_url" property="submitUrl"/>
+        <result column="submitUserName" property="submitUserName"/>
+        <result column="total_num" property="totalNum"/>
+        <result column="month" property="month"/>
+        <result column="url" property="url"/>
+    </resultMap>
+    <select id="pageProcessTotalSample" resultType="com.ruoyi.process.pojo.ProcessTotalSample">
+        select *
+        from (select cpt.*, u1.name examineUserName , u2.name ratifyUserName,u3.name submitUserName
+        from cnas_process_total_sample cpt
+        left join user u1 on u1.id = examine_user
+        left join user u2 on u2.id = ratify_user
+        left join user u3 on u3.id = submit_user) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.xml b/cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.xml
new file mode 100644
index 0000000..64f16ae
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.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.ruoyi.process.mapper.ProcessTotaldealMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessTotaldeal">
+        <id column="id" property="id"/>
+        <result column="examine_user" property="examineUser"/>
+        <result column="examine_state" property="examineState"/>
+        <result column="examine_url" property="examineUrl"/>
+        <result column="examineUserName" property="examineUserName"/>
+        <result column="ratify_user" property="ratifyUser"/>
+        <result column="ratify_state" property="ratifyState"/>
+        <result column="ratify_url" property="ratifyUrl"/>
+        <result column="ratifyUserName" property="ratifyUserName"/>
+        <result column="submit_user" property="submitUser"/>
+        <result column="submit_state" property="submitState"/>
+        <result column="submit_url" property="submitUrl"/>
+        <result column="submitUserName" property="submitUserName"/>
+        <result column="total_num" property="totalNum"/>
+        <result column="month" property="month"/>
+        <result column="url" property="url"/>
+    </resultMap>
+    <select id="pageProcessTotaldeal" resultType="com.ruoyi.process.pojo.ProcessTotaldeal">
+        select *
+        from (select cpt.*, u1.name examineUserName , u2.name ratifyUserName,u3.name submitUserName
+        from cnas_process_totaldeal cpt
+        left join user u1 on u1.id = examine_user
+        left join user u2 on u2.id = ratify_user
+        left join user u3 on u3.id = submit_user) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateFileMapper.xml b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateFileMapper.xml
new file mode 100644
index 0000000..5091ec4
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateFileMapper.xml
@@ -0,0 +1,5 @@
+<?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.process.mapper.QualityMonitorDetailsEvaluateFileMapper">
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateMapper.xml b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateMapper.xml
new file mode 100644
index 0000000..0f05609
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateMapper.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.ruoyi.process.mapper.QualityMonitorDetailsEvaluateMapper">
+
+    <!-- 鏌ヨ璐ㄩ噺鐩戞帶璇勪环 -->
+    <select id="getQualityMonitorEvaluate" resultType="com.ruoyi.process.pojo.QualityMonitorDetailsEvaluate">
+        select cqmde.*,
+               u1.name implement_name,
+               u2.name ratify_user_name
+        from cnas_quality_monitor_details_evaluate cqmde
+                 left join user u1 on u1.id = cqmde.implement_user_id
+                 left join user u2 on u2.id = cqmde.ratify_user_id
+        where cqmde.quality_monitor_details_id = #{qualityMonitorDetailsId}
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml
new file mode 100644
index 0000000..0617ad7
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.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.ruoyi.process.mapper.QualityMonitorDetailsMapper">
+    <select id="pageQualityMonitorDetail" resultType="com.ruoyi.process.pojo.QualityMonitorDetails">
+        select * from (
+        select *
+        from cnas_quality_monitor_details
+        order by quality_monitor_details_id
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualityMonitorDetailsRatifyMapper.xml b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsRatifyMapper.xml
new file mode 100644
index 0000000..4d1627b
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsRatifyMapper.xml
@@ -0,0 +1,5 @@
+<?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.process.mapper.QualityMonitorDetailsRatifyMapper">
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualityMonitorMapper.xml b/cnas-process/src/main/resources/mapper/QualityMonitorMapper.xml
new file mode 100644
index 0000000..c04764c
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualityMonitorMapper.xml
@@ -0,0 +1,20 @@
+<?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.process.mapper.QualityMonitorMapper">
+    <!-- 鐩戞帶璁″垝鍒嗛〉鏌ヨ -->
+    <select id="pageQualityMonitor" resultType="com.ruoyi.process.dto.QualityMonitorDto">
+        select *
+        from (select cqm.*,
+                     u1.name write_name,
+                     u2.name examine_name,
+                     u3.name ratify_name
+              from cnas_quality_monitor cqm
+                       left join user u1 on u1.id = cqm.write_user_id
+                       left join user u2 on u2.id = cqm.examine_user_id
+                       left join user u3 on u3.id = cqm.ratify_user_id
+              order by cqm.create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsAccordingMapper.xml b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsAccordingMapper.xml
new file mode 100644
index 0000000..be39018
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsAccordingMapper.xml
@@ -0,0 +1,57 @@
+<?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.process.mapper.QualitySuperviseDetailsAccordingMapper">
+
+    <!-- 鏌ヨ涓嶇鍚堟帶鍒跺崟鍒楄〃 -->
+    <select id="pageSuperviseDetailAccording"
+            resultType="com.ruoyi.process.pojo.QualitySuperviseDetailsAccording">
+        select *
+        from (select *
+              from cnas_quality_supervise_details_according
+              order by create_time desc
+             ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="selectSuperviseDetailsAccording"
+            resultType="com.ruoyi.process.dto.QualitySuperviseDetailsAccordingDto">
+        select sda.*,
+        DATE_FORMAT(sda.record_time, '%Y-%m-%d') discovererDateString,               <!-- 鍙戠幇鏃堕棿 -->
+        DATE_FORMAT(sda.actions_time, '%Y-%m-%d') responsibleDepartmentDateString,   <!-- 澶勭悊鏃堕棿 -->
+        DATE_FORMAT(sda.correct_time, '%Y-%m-%d') correctiveMeasureDateString,       <!-- 绾犳鏃堕棿 -->
+        DATE_FORMAT(sda.quality_manager_time, '%Y-%m-%d') qualitySupervisorDateString,<!-- 璐ㄩ噺鏃堕棿 -->
+        DATE_FORMAT(sda.supervised_time, '%Y-%m-%d') supervisedTimeString,             <!-- 琚洃鐫f椂闂� -->
+        case when sda.is_correct = 1 then '鈽�'
+        else '鈻�' end correctiveMeasureFollowTracksYes, <!-- 绾犳鎺柦澶勭悊鍗曡窡韪�(鏄�) -->
+        case when sda.is_correct = 2 then '鈽�'
+        else '鈻�' end correctiveMeasureFollowTracksNo,   <!-- 绾犳鎺柦澶勭悊鍗曡窡韪�(鍚�) -->
+        case when sda.notify_customer = 1 then '鈽�'
+        else '鈻�' end whetherInformCustomerYes,        <!-- 鍛婄煡瀹㈡埛(鏄�) -->
+        case when sda.notify_customer = 2 then '鈽�'
+        else '鈻�' end whetherInformCustomerNo,          <!-- 鍛婄煡瀹㈡埛(鍚�) -->
+        case when sda.back_to_work = 1 then '鈽�'
+        else '鈻�' end whetherResumeWorkYes,              <!-- 鎭㈠宸ヤ綔(鏄�) -->
+        case when sda.back_to_work = 2 then '鈽�'
+        else '鈻�' end whetherResumeWorkNo,                <!-- 鎭㈠宸ヤ綔(鍚�) -->
+        case when sda.find_way = 0 then '鈽�'
+        else '鈻�' end discoveryApproach0,
+        case when sda.find_way = 1 then '鈽�'
+        else '鈻�' end discoveryApproach1,
+        case when sda.find_way = 2 then '鈽�'
+        else '鈻�' end discoveryApproach2,
+        case when sda.find_way = 3 then '鈽�'
+        else '鈻�' end discoveryApproach3,
+        case when sda.find_way = 4 then '鈽�'
+        else '鈻�' end discoveryApproach4,
+        case when sda.find_way = 5 then '鈽�'
+        else '鈻�' end discoveryApproach5,
+        case when sda.find_way = 6 then '鈽�'
+        else '鈻�' end discoveryApproach6,
+        case when sda.find_way = 7 then '鈽�'
+        else '鈻�' end discoveryApproach7
+        from cnas_quality_supervise_details_according sda
+        where sda.supervise_details_id = #{superviseDetailId}
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectFileMapper.xml b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectFileMapper.xml
new file mode 100644
index 0000000..09d7fe6
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectFileMapper.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.ruoyi.process.mapper.QualitySuperviseDetailsCorrectFileMapper">
+
+
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectMapper.xml b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectMapper.xml
new file mode 100644
index 0000000..e0f4cea
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectMapper.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.ruoyi.process.mapper.QualitySuperviseDetailsCorrectMapper">
+
+    <!-- 鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃 -->
+    <select id="pageSuperviseDetailAccording" resultType="com.ruoyi.process.pojo.QualitySuperviseDetailsCorrect">
+        select *
+        from (select *
+              from cnas_quality_supervise_details_correct
+              order by create_time desc) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml
new file mode 100644
index 0000000..be608d7
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml
@@ -0,0 +1,36 @@
+<?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.process.mapper.QualitySuperviseDetailsMapper">
+
+    <!-- 璐ㄩ噺鐩戠潱璁″垝璇︽儏鍒楄〃 -->
+    <select id="pageQualitySuperviseDetail" resultType="com.ruoyi.process.dto.QualitySuperviseDetailsDto">
+        select *
+        from (select cd.*,
+                     cr.is_according,
+                     ca.is_correct,
+                     cc.supervise_details_correct_id
+              from cnas_quality_supervise_details cd
+                       left join cnas_quality_supervise_details_record cr
+                                 on cr.supervise_details_id = cd.supervise_details_id
+                       left join cnas_quality_supervise_details_according ca
+                                 on ca.supervise_details_id = cd.supervise_details_id
+                       left join cnas_quality_supervise_details_correct cc
+                                 on cc.supervise_details_id = cd.supervise_details_id
+        where 1=1
+        <choose>
+            <when test="causeType != null and causeType == 1">
+                and cd.supervise_reason not like '%鍔ㄦ��%'
+            </when>
+            <when test="causeType != null and causeType == 2">
+                and cd.supervise_reason like '%鍔ㄦ��%'
+            </when>
+            <otherwise>
+                and cd.supervise_reason not like '%鍔ㄦ��%'
+            </otherwise>
+        </choose>
+              order by STR_TO_DATE(CONCAT(cd.supervise_time, '.01'), '%Y.%m.%d')) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsRecordMapper.xml b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsRecordMapper.xml
new file mode 100644
index 0000000..1dd051f
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsRecordMapper.xml
@@ -0,0 +1,11 @@
+<?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.process.mapper.QualitySuperviseDetailsRecordMapper">
+
+    <!--瀵煎嚭鐩戠潱璁板綍琛�-->
+    <select id="selectSuperviseDetailRecord" resultType="com.ruoyi.process.pojo.QualitySuperviseDetailsRecord">
+        select cqsdr.*
+        from cnas_quality_supervise_details_record cqsdr
+        where cqsdr.supervise_details_id = #{superviseDetailsId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/cnas-process/src/main/resources/mapper/QualitySuperviseMapper.xml b/cnas-process/src/main/resources/mapper/QualitySuperviseMapper.xml
new file mode 100644
index 0000000..17f17c8
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseMapper.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.ruoyi.process.mapper.QualitySuperviseMapper">
+
+    <!-- 鐩戠潱璁″垝鍒楄〃 -->
+    <select id="pageQualitySupervise" resultType="com.ruoyi.process.pojo.QualitySupervise">
+        select *
+        from (select *
+              from cnas_quality_supervise
+              order by create_time desc ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+    <!-- 鏌ヨ璇ヨ鍒掔洃鐫e憳 -->
+
+    <select id="getRecordUser" resultType="java.util.Map">
+        select u.id   userId,
+               u.name userName
+        from user u
+                 left join cnas_quality_supervise cqs on find_in_set(u.id, cqs.record_user_ids)
+                 left join cnas_quality_supervise_details cqsd on cqs.supervise_id = cqsd.supervise_id
+        where cqsd.supervise_details_id = #{superviseDetailsId}
+    </select>
+
+</mapper>
diff --git a/cnas-process/src/main/resources/static/excel/check-records.xlsx b/cnas-process/src/main/resources/static/excel/check-records.xlsx
new file mode 100644
index 0000000..7afdfff
--- /dev/null
+++ b/cnas-process/src/main/resources/static/excel/check-records.xlsx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/inconsistent-distribution.docx b/cnas-process/src/main/resources/static/inconsistent-distribution.docx
new file mode 100644
index 0000000..d41623f
--- /dev/null
+++ b/cnas-process/src/main/resources/static/inconsistent-distribution.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/inspection-order.docx b/cnas-process/src/main/resources/static/inspection-order.docx
new file mode 100644
index 0000000..d88c7b1
--- /dev/null
+++ b/cnas-process/src/main/resources/static/inspection-order.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/method-verify.docx b/cnas-process/src/main/resources/static/method-verify.docx
new file mode 100644
index 0000000..8ab5461
--- /dev/null
+++ b/cnas-process/src/main/resources/static/method-verify.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/quality-monitor-details-ratify.docx b/cnas-process/src/main/resources/static/quality-monitor-details-ratify.docx
new file mode 100644
index 0000000..420d810
--- /dev/null
+++ b/cnas-process/src/main/resources/static/quality-monitor-details-ratify.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/quality-monitor-evaluate.docx b/cnas-process/src/main/resources/static/quality-monitor-evaluate.docx
new file mode 100644
index 0000000..c3e8a2e
--- /dev/null
+++ b/cnas-process/src/main/resources/static/quality-monitor-evaluate.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/quality-monitor.docx b/cnas-process/src/main/resources/static/quality-monitor.docx
new file mode 100644
index 0000000..8ad9990
--- /dev/null
+++ b/cnas-process/src/main/resources/static/quality-monitor.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/quality-supervise.docx b/cnas-process/src/main/resources/static/quality-supervise.docx
new file mode 100644
index 0000000..2d94d9c
--- /dev/null
+++ b/cnas-process/src/main/resources/static/quality-supervise.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/report-deal.docx b/cnas-process/src/main/resources/static/report-deal.docx
new file mode 100644
index 0000000..fdd74f4
--- /dev/null
+++ b/cnas-process/src/main/resources/static/report-deal.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/sample-deal.docx b/cnas-process/src/main/resources/static/sample-deal.docx
new file mode 100644
index 0000000..9021b0a
--- /dev/null
+++ b/cnas-process/src/main/resources/static/sample-deal.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/sample-receive.docx b/cnas-process/src/main/resources/static/sample-receive.docx
new file mode 100644
index 0000000..1035f1c
--- /dev/null
+++ b/cnas-process/src/main/resources/static/sample-receive.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/supervise-detail-correct.docx b/cnas-process/src/main/resources/static/supervise-detail-correct.docx
new file mode 100644
index 0000000..f5e3a23
--- /dev/null
+++ b/cnas-process/src/main/resources/static/supervise-detail-correct.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/supervision-detail-according.docx b/cnas-process/src/main/resources/static/supervision-detail-according.docx
new file mode 100644
index 0000000..0b2ac36
--- /dev/null
+++ b/cnas-process/src/main/resources/static/supervision-detail-according.docx
Binary files differ
diff --git a/cnas-process/src/main/resources/static/supervision-detail-record.docx b/cnas-process/src/main/resources/static/supervision-detail-record.docx
new file mode 100644
index 0000000..f31bced
--- /dev/null
+++ b/cnas-process/src/main/resources/static/supervision-detail-record.docx
Binary files differ
diff --git a/pom.xml b/pom.xml
index 9d36e98..0dbf825 100644
--- a/pom.xml
+++ b/pom.xml
@@ -278,6 +278,13 @@
                 <version>${ruoyi.version}</version>
             </dependency>
 
+            <!--cnas浜哄憳-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>cnas-personnel</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
             <!-- minio -->
             <dependency>
                 <groupId>io.minio</groupId>
@@ -392,6 +399,7 @@
         <module>cnas-manage</module>
         <module>cnas-device</module>
         <module>cnas-process</module>
+        <module>cnas-personnel</module>
     </modules>
     <packaging>pom</packaging>
 
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 7dd0fdb..485e28d 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -97,6 +97,18 @@
             <artifactId>cnas-device</artifactId>
         </dependency>
 
+        <!--cnas璧勬簮瑕佹眰-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>cnas-process</artifactId>
+        </dependency>
+
+        <!--cnas浜哄憳-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>cnas-personnel</artifactId>
+        </dependency>
+
 
     </dependencies>
 
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java
new file mode 100644
index 0000000..9fa947a
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.common.core.domain.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DepartmentDto {
+
+    private Integer id;
+
+    private String name;
+
+    private Integer userId;
+
+    private Integer fatherId;
+
+    private List<DepartmentDto> children;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java
new file mode 100644
index 0000000..4ec52e2
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java
@@ -0,0 +1,42 @@
+package com.ruoyi.common.core.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 閮ㄩ棬鏄庣粏
+ * @TableName department_lims
+ */
+@TableName(value ="department_lims")
+@Data
+public class DepartmentLims implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鐖剁骇id")
+    private Integer fatherId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private List<DepartmentLims> children;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java
new file mode 100644
index 0000000..3e2a51e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.domain.entity.DepartmentDto;
+import com.ruoyi.common.core.domain.entity.DepartmentLims;
+
+import java.util.List;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恉epartment_lims(閮ㄩ棬鏄庣粏)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-05-22 14:08:17
+* @Entity com.yuanchu.mom.pojo.DepartmentLims
+*/
+public interface DepartmentLimsMapper extends BaseMapper<DepartmentLims> {
+
+    //鑾峰彇閮ㄩ棬鏍�
+    List<DepartmentDto> selectDepartment();
+
+    //鏍规嵁閮ㄩ棬id,鏌ヨ浠栫殑鎵�鏈夊瓙绫籭d
+    List<Integer> selectSonById(Integer id);
+
+}
+
+
+
+
diff --git a/ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml
new file mode 100644
index 0000000..48c7d39
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml
@@ -0,0 +1,25 @@
+<?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.DepartmentLimsMapper">
+
+
+    <select id="selectDepartment" resultType="com.ruoyi.common.core.domain.entity.DepartmentDto">
+        SELECT id, name, father_id
+        FROM department_lims
+    </select>
+
+    <select id="selectSonById" resultType="java.lang.Integer">
+        SELECT au.id
+        FROM (SELECT * FROM department_lims WHERE father_id IS NOT NULL) au,
+             (SELECT @father_id := #{id}) pd
+        WHERE FIND_IN_SET(father_id, @father_id) > 0
+                  AND @father_id := concat(@father_id, ',', id)
+        UNION
+        SELECT id
+        FROM department_lims
+        WHERE id = #{id}
+        ORDER BY id
+    </select>
+</mapper>

--
Gitblit v1.9.3