From e1718dca22c88f2fa3db0ba7f55068e9e54ff159 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 30 九月 2026 16:23:10 +0800
Subject: [PATCH] feat(migration): 补迁 5 个 cnas 业务模块
---
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInspectionRecordDto.java | 25
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewBackupsService.java | 16
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceTraceabilityManagementDetails.java | 67
cnas-manage/src/main/java/com/ruoyi/manage/vo/MeetingParticipantsDetailsVo.java | 15
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheck.java | 80
cnas-personnel/src/main/resources/static/supervision-record.docx | 0
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java | 16
cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml | 17
cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionMapper.java | 30
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceCalibrationPlanDetail.java | 73
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessReportDto.java | 30
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumDateServiceImpl.java | 144
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentIssueRecycleMapper.java | 24
cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml | 40
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewArchivedServiceImpl.java | 20
cnas-device/src/main/resources/static/word/device-scrapped.docx | 0
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceTraceabilityManagementDetailsMapper.java | 26
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordTotal.java | 77
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCalibrationPlanDetailDto.java | 21
cnas-personnel/src/main/resources/static/supervision-control-sheet.docx | 0
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceCalibrationPlan.java | 66
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramMapper.java | 21
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMethodFileServiceImpl.java | 19
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordPersonDetailedDto.java | 26
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceBorrow.java | 132
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java | 100
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-process/src/main/java/com/ruoyi/process/controller/ProcessEvaluateController.java | 62
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsMapper.java | 21
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-require/src/main/java/com/ruoyi/require/mapper/InternalWastesMapper.java | 31
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceScrappedMapper.java | 35
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastDetailsService.java | 16
cnas-device/src/main/java/com/ruoyi/device/service/DeviceScrappedService.java | 43
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceScrappedDto.java | 26
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanServiceImpl.java | 259
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentIssueRecycleServiceImpl.java | 202
cnas-device/src/main/resources/static/word/traceability-management-details.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingDto.java | 22
cnas-manage/src/main/resources/mapper/ManageRecordVerifyMapper.xml | 23
cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java | 97
cnas-process/src/main/resources/mapper/ProcessMethodVerifyWorkFileMapper.xml | 13
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationExportDto.java | 25
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckService.java | 69
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewBackupsMapper.java | 27
cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceExaminePlanUpload.java | 37
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordDetailMapper.java | 16
cnas-personnel/src/main/resources/static/credentials-deal.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewReportServiceImpl.java | 138
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-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesList.java | 100
cnas-device/src/main/resources/mapper/DeviceMaintenancePlanMapper.xml | 23
cnas-manage/src/main/resources/mapper/ManageDocumentControlledMapper.xml | 42
cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerDetailsService.java | 16
cnas-device/src/main/resources/mapper/DeviceMapper.xml | 196
cnas-device/src/main/java/com/ruoyi/device/mapper/OperationInstructionMapper.java | 20
cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java | 21
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java | 228
cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesDetailService.java | 16
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeLightningProtectionServiceImpl.java | 27
cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumDate.java | 55
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluateFile.java | 55
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewArchivedService.java | 16
cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml | 47
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java | 22
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRiskAssessmentResultsController.java | 134
cnas-manage/src/main/resources/mapper/ManageRiskAssessmentResultsMapper.xml | 38
cnas-personnel/src/main/resources/static/person-training.docx | 0
cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java | 861
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsRatifyMapper.java | 17
cnas-manage/src/main/resources/static/internal-plan.docx | 0
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java | 116
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java | 106
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationDto.java | 21
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java | 35
cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationService.java | 29
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java | 25
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervalsTotal.java | 75
cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java | 66
cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseManagementReviewService.java | 34
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewReportMapper.java | 21
cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java | 77
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java | 66
cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java | 29
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceTraceabilityManagementDetailsDto.java | 25
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentListController.java | 76
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessDealController.java | 51
cnas-process/src/main/resources/mapper/ProcessDealMapper.xml | 39
cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java | 140
cnas-manage/src/main/resources/static/review-program.docx | 0
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java | 47
cnas-device/src/main/resources/mapper/DeviceBreakdownMaintenanceMapper.xml | 17
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceOperationInstructionServiceImpl.java | 27
cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesServiceImpl.java | 169
cnas-process/src/main/resources/static/inspection-order.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/DeviceTraceabilityManagementDetailsService.java | 16
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java | 82
cnas-manage/src/main/resources/static/audit-deal.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenancePlanDetailsService.java | 17
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-device/src/main/resources/mapper/InsOrderDeviceRecordMapper.xml | 51
cnas-device/src/main/resources/static/word/maintenance-records.docx | 0
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java | 81
cnas-process/src/main/resources/static/quality-supervise.docx | 0
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordDto.java | 28
cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionDetailService.java | 16
cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java | 82
cnas-device/src/main/resources/static/word/device-calibration-plan.docx | 0
cnas-process/src/main/java/com/ruoyi/process/service/ProcessReportService.java | 26
cnas-manage/src/main/resources/static/internal-correct.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java | 190
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordDetailServiceImpl.java | 20
cnas-device/src/main/resources/mapper/DeviceTraceabilityManagementMapper.xml | 23
cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseManagementReviewController.java | 71
cnas-process/src/main/resources/mapper/QualityMonitorMapper.xml | 20
cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCorrectController.java | 119
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeeting.java | 53
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingDetailService.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentAlterServiceImpl.java | 292
cnas-require/src/main/java/com/ruoyi/require/service/FePowerStableService.java | 33
cnas-process/src/main/resources/static/sample-receive.docx | 0
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsRecordMapper.java | 24
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java | 26
cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java | 37
cnas-require/src/main/resources/mapper/FeStandardSubstanceRecordMapper.xml | 51
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanDetailsMapper.java | 28
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java | 13
cnas-require/src/main/java/com/ruoyi/require/pojo/FeLightningProtection.java | 58
cnas-manage/src/main/resources/static/cancel-deal.docx | 0
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrastDetails.java | 69
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMachineAttachmentServiceImpl.java | 19
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableAddDto.java | 15
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java | 90
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java | 179
cnas-manage/src/main/resources/static/review-report.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java | 68
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExport.java | 19
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramFileMapper.java | 16
cnas-process/src/main/resources/mapper/ProcessMethodVerifyMachineAttachmentMapper.xml | 5
cnas-device/src/main/resources/mapper/DeviceExternalApplyMapper.xml | 23
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsAccordingDto.java | 63
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java | 20
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessComplainServiceImpl.java | 113
cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderDetailServiceImpl.java | 20
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordTotalServiceImpl.java | 430
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java | 238
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java | 43
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentControlledMapper.java | 23
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenancePlanDetailsDto.java | 32
cnas-require/src/main/java/com/ruoyi/require/controller/FeLightningProtectionController.java | 80
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplementDetail.java | 63
cnas-manage/src/main/resources/mapper/ClientSatisfactionMapper.xml | 48
cnas-process/src/main/java/com/ruoyi/process/service/ProcessOrderDeviceService.java | 19
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java | 349
cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java | 23
cnas-device/src/main/resources/mapper/DeviceExaminePlanDetailsMapper.xml | 48
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java | 87
cnas-process/src/main/resources/static/supervision-detail-according.docx | 0
cnas-process/src/main/resources/mapper/InconsistentDistributionDetailMapper.xml | 6
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordDetailsServiceImpl.java | 20
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIssueRecycle.java | 77
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceDocumentsServiceImpl.java | 14
cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalMeetingController.java | 103
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceLog.java | 29
cnas-manage/src/main/resources/static/analysis-risk-factors.docx | 0
cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumDateService.java | 30
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java | 89
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java | 20
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java | 14
cnas-manage/src/main/resources/mapper/ManageRecordCheckMapper.xml | 35
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDetailsDto.java | 65
cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java | 15
cnas-device/src/main/resources/mapper/DataConfigMapper.xml | 47
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricServiceImpl.java | 11
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java | 49
cnas-personnel/src/main/resources/static/personnel-capacity.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentControlledService.java | 34
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetails.java | 77
cnas-process/src/main/java/com/ruoyi/process/service/ProcessEvaluateService.java | 29
cnas-device/src/main/java/com/ruoyi/device/excel/DeviceRecordExportWord.java | 28
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java | 13
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessOrderDevice.java | 68
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIssueRecycleServiceImpl.java | 701
cnas-device/src/main/java/com/ruoyi/device/task/DeviceRecordSchedule.java | 104
cnas-require/src/main/java/com/ruoyi/require/pojo/FeIllumination.java | 61
cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml | 13
cnas-process/src/main/java/com/ruoyi/process/listener/NewJuOrderInspectionListener.java | 70
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanDetailMapper.java | 18
cnas-process/src/main/java/com/ruoyi/process/dto/ImageDemoData.java | 43
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDetailsDto.java | 23
cnas-manage/src/main/resources/mapper/InternalCorrectFileMapper.xml | 18
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseDetailsServiceImpl.java | 19
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java | 144
cnas-require/src/main/java/com/ruoyi/require/service/FeMeasuredQuantityService.java | 16
cnas-manage/src/main/resources/lib/license.xml | 13
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessComplain.java | 141
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java | 29
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastDetailsMapper.java | 16
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDto.java | 33
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonCommunicationAbilityServiceImpl.java | 114
cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java | 296
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java | 835
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceRecordDto.java | 14
cnas-device/src/main/resources/mapper/DeviceExamineRecordContrastMapper.xml | 39
cnas-process/src/main/resources/mapper/InconsistentDistributionMapper.xml | 20
cnas-require/src/main/java/com/ruoyi/require/controller/SupplierManagementController.java | 91
cnas-device/src/main/resources/mapper/DeviceScrappedMapper.xml | 27
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentAlter.java | 114
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java | 22
cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotaldealService.java | 32
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInstruction.java | 63
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBreakdownMaintenanceMapper.java | 27
cnas-manage/src/main/resources/mapper/InternalCheckMapper.xml | 15
cnas-require/src/main/java/com/ruoyi/require/controller/InternalWastesController.java | 96
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewBackupsMapper.xml | 16
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectMapper.xml | 15
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordTotalController.java | 55
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessSampleServiceImpl.java | 70
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSample.java | 78
cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderService.java | 86
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalReport.java | 122
cnas-device/src/main/java/com/ruoyi/device/service/DeviceTraceabilityManagementService.java | 71
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java | 14
cnas-device/src/main/resources/mapper/DeviceStateMapper.xml | 19
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesContentsService.java | 16
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java | 80
cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalPlanController.java | 125
cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalPlanDto.java | 19
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenancePlanMapper.java | 35
cnas-require/src/main/java/com/ruoyi/require/mapper/FePowerStableMapper.java | 34
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordAuditServiceImpl.java | 679
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java | 16
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java | 16
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceRecordMapper.java | 38
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricRecord.java | 88
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java | 225
cnas-require/src/main/java/com/ruoyi/require/pojo/ForeignRegister.java | 73
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentIssueRecycle.java | 108
cnas-process/src/main/resources/mapper/ProcessMethodVerifyMethodFileMapper.xml | 6
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java | 80
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonCommunicationAbilityService.java | 25
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySupervise.java | 79
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAccidentReport.java | 119
cnas-manage/src/main/resources/mapper/ManageRecordAuditMapper.xml | 50
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplement.java | 107
cnas-device/src/main/resources/static/word/device-document.docx | 0
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExternalApply.java | 122
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExternalApplyController.java | 84
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceDocumentsMapper.java | 12
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMethodFileService.java | 15
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessComplainController.java | 67
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordAuditController.java | 75
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java | 82
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java | 67
cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java | 22
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenancePlanDto.java | 30
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java | 155
cnas-require/src/main/java/com/ruoyi/require/service/impl/ForeignRegisterServiceImpl.java | 102
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyDto.java | 30
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastMapper.java | 31
cnas-process/src/main/resources/mapper/ProcessSampleMapper.xml | 28
cnas-device/src/main/resources/static/word/device-inspection-record.docx | 0
cnas-manage/src/main/resources/mapper/InternalPlanDetailMapper.xml | 6
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanDetailServiceImpl.java | 20
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsRecord.java | 117
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentControlledController.java | 82
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java | 73
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java | 197
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java | 124
cnas-process/src/main/java/com/ruoyi/process/service/ProcessSampleService.java | 24
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramController.java | 68
cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistribution.java | 44
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsMapper.java | 29
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java | 9
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeeting.java | 55
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateMapper.java | 23
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessDealDto.java | 19
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrast.java | 96
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementDetailServiceImpl.java | 19
cnas-process/src/main/resources/mapper/ProcessOrderDeviceMapper.xml | 52
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingParticipantsServiceImpl.java | 42
cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumDateMapper.java | 30
cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceCalibrationPlanDetailUpload.java | 36
cnas-device/src/main/resources/mapper/DeviceExaminePlanMapper.xml | 33
cnas-device/src/main/resources/static/word/use-record.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingMapper.java | 27
cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderExportDto.java | 51
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramServiceImpl.java | 125
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java | 51
cnas-manage/src/main/java/com/ruoyi/manage/schedule/ManageRecordTotalSchedule.java | 36
cnas-process/src/main/resources/static/report-deal.docx | 0
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java | 30
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIssueRecycleMapper.java | 21
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java | 16
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesListMapper.java | 30
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceTraceabilityManagementMapper.java | 34
cnas-require/src/main/resources/mapper/InternalWastesMapper.xml | 20
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheckDetail.java | 63
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordVerify.java | 63
cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumRecordMapper.java | 30
cnas-device/src/main/java/com/ruoyi/device/pojo/CollectBridge.java | 34
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalReportServiceImpl.java | 165
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyService.java | 87
cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsEvaluateDto.java | 16
cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionService.java | 64
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml | 21
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExternalApplyMapper.java | 34
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-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanDetailsService.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordVerifyController.java | 68
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluate.java | 87
cnas-manage/src/main/resources/mapper/InternalPlanMapper.xml | 14
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java | 36
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java | 20
cnas-require/src/main/java/com/ruoyi/require/controller/FeIlluminationController.java | 88
cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml | 23
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.java | 21
cnas-manage/src/main/java/com/ruoyi/manage/excel/ManageDocumentListListener.java | 63
cnas-require/src/main/java/com/ruoyi/require/mapper/ForeignRegisterMapper.java | 39
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceRecordController.java | 63
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 | 438
cnas-require/src/main/java/com/ruoyi/require/controller/FeTempHumDateController.java | 118
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java | 52
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectFileMapper.java | 17
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRiskAssessmentResultsService.java | 24
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesContents.java | 41
cnas-process/src/main/resources/static/supervision-detail-record.docx | 0
cnas-require/src/main/java/com/ruoyi/require/pojo/SupplierManagement.java | 109
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java | 690
cnas-require/src/main/resources/static/illumination.docx | 0
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java | 24
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceImpowerController.java | 108
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceCalibrationPlanDetailMapper.java | 27
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckServiceImpl.java | 233
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceDocuments.java | 94
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java | 21
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentCancelController.java | 83
cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java | 55
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessOrderDeviceController.java | 64
cnas-process/src/main/resources/mapper/QualitySuperviseMapper.xml | 26
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeMeasuredQuantityServiceImpl.java | 20
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementServiceImpl.java | 239
cnas-manage/src/main/java/com/ruoyi/manage/service/ClientSatisfactionService.java | 59
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementDetailService.java | 15
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingService.java | 63
cnas-process/src/main/resources/static/sample-deal.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java | 16
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedFileMapper.java | 15
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCheckMapper.java | 21
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java | 1267 +
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java | 246
cnas-device/src/main/java/com/ruoyi/device/service/DeviceStateService.java | 31
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessEvaluate.java | 73
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java | 77
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentAlterMapper.java | 24
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerDetailsMapper.java | 26
cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx | 0
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInstructionDto.java | 13
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordDetailsService.java | 16
cnas-manage/src/main/resources/static/verify-deal.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageControlPlanListController.java | 134
cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java | 46
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewReportController.java | 63
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordMapper.java | 31
cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderDetailMapper.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentList.java | 80
cnas-manage/src/main/resources/mapper/ManageMeetingMapper.xml | 32
cnas-require/src/main/java/com/ruoyi/require/dto/SupplierManagementDto.java | 67
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenancePlanDetailsMapper.java | 25
cnas-require/src/main/resources/mapper/FeStandardSubstanceAcceptanceMapper.xml | 46
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementDetailsServiceImpl.java | 20
cnas-process/src/main/resources/static/method-verify.docx | 0
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java | 27
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentAlterController.java | 89
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordDetailService.java | 16
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyCalibrationsFile.java | 56
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java | 49
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java | 9
cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java | 39
cnas-personnel/src/main/resources/static/explain-deal.docx | 0
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMethodFileMapper.java | 17
cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java | 38
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java | 47
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastService.java | 46
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAccidentReportController.java | 84
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsServiceImpl.java | 528
cnas-device/src/main/resources/mapper/DeviceMaintenanceMapper.xml | 20
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java | 70
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingDetailedServiceImpl.java | 85
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBreakdownMaintenanceController.java | 85
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordAudit.java | 133
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfaction.java | 95
cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml | 46
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceStateController.java | 87
cnas-device/src/main/resources/mapper/DeviceAccidentReportMapper.xml | 29
cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java | 439
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyCalibrationsFileService.java | 15
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetric.java | 29
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementMapper.java | 28
cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java | 138
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlanDetail.java | 82
cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateFileMapper.xml | 5
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java | 75
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceDto.java | 43
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordAuditMapper.java | 21
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlan.java | 74
cnas-device/src/main/resources/static/word/device-breakdown-maintenance.docx | 0
cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesService.java | 63
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrect.java | 130
cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java | 22
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsServiceImpl.java | 19
cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseService.java | 201
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessDealServiceImpl.java | 36
cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalImplementDto.java | 19
cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionDetailMapper.java | 18
cnas-process/src/main/resources/mapper/ProcessReportMapper.xml | 37
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java | 77
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java | 36
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanService.java | 89
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenancePlanService.java | 79
cnas-device/src/main/resources/static/word/review-examine-record-contrast.docx | 0
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java | 78
cnas-require/src/main/java/com/ruoyi/require/service/impl/SupplierManagementServiceImpl.java | 91
cnas-manage/src/main/resources/static/internal-meeting.docx | 0
cnas-process/src/main/resources/mapper/ProcessComplainMapper.xml | 62
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewArchivedMapper.xml | 19
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java | 33
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordVerifyServiceImpl.java | 157
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCancel.java | 80
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingDetailServiceImpl.java | 20
cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml | 84
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java | 486
cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageDocumentIssueRecycleDto.java | 26
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingRecordService.java | 59
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableExportDto.java | 30
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java | 26
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java | 133
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java | 59
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentControlledServiceImpl.java | 219
cnas-device/src/main/java/com/ruoyi/device/service/DeviceAccidentReportService.java | 41
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsAccordingMapper.java | 36
cnas-device/src/main/resources/mapper/DeviceMaintenancePlanDetailsMapper.xml | 20
cnas-device/src/main/java/com/ruoyi/device/mapper/CollectBridgeMapper.java | 15
cnas-process/src/main/resources/mapper/QualitySuperviseManagementReviewMapper.xml | 14
cnas-device/src/main/resources/mapper/DeviceTraceabilityManagementDetailsMapper.xml | 17
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectFileMapper.java | 18
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java | 383
cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java | 16
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCalibrationPlanDto.java | 31
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java | 93
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java | 73
cnas-process/src/main/resources/mapper/QualityMonitorDetailsRatifyMapper.xml | 5
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java | 188
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java | 109
cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.xml | 29
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java | 20
cnas-manage/src/main/resources/mapper/ManageMeetingParticipantsMapper.xml | 17
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessReportController.java | 71
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationDetectionAreaServiceImpl.java | 20
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java | 99
cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java | 104
cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java | 73
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessEvaluateMapper.java | 21
cnas-device/src/main/java/com/ruoyi/device/service/DeviceBreakdownMaintenanceService.java | 41
cnas-process/src/main/java/com/ruoyi/process/service/ProcessDealService.java | 19
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastDetailsServiceImpl.java | 20
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java | 22
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeetingDetail.java | 52
cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumRecordDto.java | 64
cnas-require/src/main/resources/mapper/FePowerStableMapper.xml | 63
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java | 27
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessDealMapper.java | 27
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java | 16
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricRecordMapper.java | 16
cnas-manage/src/main/resources/mapper/ManageRecordCancelMapper.xml | 34
cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java | 32
cnas-device/src/main/java/com/ruoyi/device/service/DeviceRecordService.java | 31
cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationDetectionAreaService.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIssueRecycleController.java | 74
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyCalibrationsFileMapper.java | 34
cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java | 54
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewArchived.java | 62
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java | 16
cnas-require/src/main/resources/mapper/FeTempHumDateMapper.xml | 25
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetails.java | 92
cnas-manage/src/main/resources/mapper/ClientSatisfactionAnalyseFileMapper.xml | 18
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageControlPlanListService.java | 24
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentListService.java | 29
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java | 60
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewBackupsDto.java | 62
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsService.java | 15
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-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonCommunicationAbility.java | 60
cnas-device/src/main/resources/static/word/device-external-apply.docx | 0
cnas-manage/src/main/resources/static/internal-check.docx | 0
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java | 114
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceBreakdownMaintenance.java | 89
cnas-manage/src/main/resources/mapper/ManageReviewProgramFileMapper.xml | 17
cnas-device/src/main/resources/static/word/quipment-details.docx | 0
cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDto.java | 22
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectFileService.java | 16
cnas-device/src/main/java/com/ruoyi/device/service/IDeviceMetricService.java | 7
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsService.java | 31
cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java | 45
cnas-device/src/main/resources/static/word/device-accident-report.docx | 0
cnas-manage/src/main/resources/static/check-deal.docx | 0
cnas-manage/src/main/resources/mapper/ManageControlPlanListMapper.xml | 33
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java | 243
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpowerDetails.java | 60
cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionDetailServiceImpl.java | 20
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricMapper.java | 9
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java | 76
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsRatify.java | 86
cnas-manage/src/main/resources/static/customer-satisfaction-questionnaire.docx | 0
cnas-device/src/main/resources/mapper/DeviceCalibrationPlanDetailMapper.xml | 17
cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java | 41
cnas-manage/src/main/resources/mapper/ManageRecordIntervalsTotalMapper.xml | 33
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessComplainMapper.java | 25
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java | 133
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingServiceImpl.java | 161
cnas-device/src/main/resources/static/word/device-status.docx | 0
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java | 124
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java | 107
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentListMapper.java | 22
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java | 14
cnas-require/src/main/java/com/ruoyi/require/pojo/FeIlluminationDetectionArea.java | 58
cnas-require/src/main/resources/mapper/FeLightningProtectionMapper.xml | 20
cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumRecordService.java | 20
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanMapper.java | 30
cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java | 34
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsTotalMapper.java | 21
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingParticipantsController.java | 53
cnas-process/src/main/java/com/ruoyi/process/excel/QualitySuperviseDetailsUpload.java | 30
cnas-device/src/main/java/com/ruoyi/device/service/DeviceDocumentsService.java | 10
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyWorkFile.java | 59
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java | 27
cnas-require/src/main/resources/mapper/FeIlluminationMapper.xml | 46
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlanDetails.java | 61
cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageControlPlanListVo.java | 20
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementService.java | 69
cnas-require/src/main/resources/mapper/FeTempHumRecordMapper.xml | 36
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMapper.java | 46
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailedFile.java | 49
cnas-manage/src/main/resources/mapper/InternalMeetingDetailMapper.xml | 6
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordListDto.java | 37
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExaminePlanController.java | 274
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java | 162
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesContentsMapper.java | 9
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramService.java | 25
cnas-manage/src/main/resources/static/internal-implement.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingService.java | 28
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java | 101
cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java | 11
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceCalibrationPlanController.java | 173
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecord.java | 92
cnas-manage/src/main/resources/static/internal-report.docx | 0
cnas-manage/src/main/resources/mapper/ManageRecordIntervalsMapper.xml | 27
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java | 90
cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java | 76
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessComplainDto.java | 23
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageControlPlanListMapper.java | 21
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRiskAssessmentResults.java | 102
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesContentsServiceImpl.java | 91
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceDocumentsController.java | 92
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java | 274
cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyCalibrationsFileServiceImpl.java | 19
cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml | 19
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentCancelMapper.java | 23
cnas-require/src/main/java/com/ruoyi/require/mapper/SupplierManagementMapper.java | 31
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java | 113
cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java | 22
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementDetailMapper.java | 17
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java | 21
cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java | 84
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java | 7
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordAuditService.java | 30
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgram.java | 80
cnas-device/src/main/java/com/ruoyi/device/service/DeviceCalibrationPlanService.java | 89
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsMapper.java | 29
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java | 69
cnas-require/src/main/resources/static/foreign-register.docx | 0
cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java | 73
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsEvaluateServiceImpl.java | 19
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCancelService.java | 29
cnas-manage/src/main/resources/mapper/ManageRecordIssueRecycleMapper.xml | 33
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityExportDto.java | 101
cnas-device/src/main/java/com/ruoyi/device/pojo/OperationInstruction.java | 87
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java | 16
cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml | 127
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java | 57
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDetailsDto.java | 16
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordAndMaintenanceDto.java | 38
cnas-process/src/main/resources/static/supervise-detail-correct.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanDetailServiceImpl.java | 20
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-require/src/main/resources/mapper/ProcurementSuppliesListMapper.xml | 71
cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java | 126
cnas-require/src/main/resources/static/temp_hum_date.docx | 0
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessReportMapper.java | 26
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanDetailsServiceImpl.java | 20
cnas-device/src/main/resources/static/word/acceptance-certificate.docx | 0
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java | 108
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java | 62
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMapper.java | 29
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java | 36
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessOrderDeviceMapper.java | 27
cnas-require/src/main/resources/mapper/ForeignRegisterMapper.xml | 39
cnas-require/src/main/resources/mapper/FeStandardSubstanceMapper.xml | 56
cnas-manage/src/main/resources/mapper/ManageReviewReportMapper.xml | 48
cnas-device/src/main/java/com/ruoyi/device/service/DeviceBorrowService.java | 28
cnas-manage/src/main/resources/mapper/ManageDocumentAlterMapper.xml | 48
cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastes.java | 43
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java | 60
cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedListener.java | 42
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java | 292
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsEvaluateService.java | 15
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java | 49
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordService.java | 43
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java | 292
cnas-device/src/main/resources/static/word/device-maintenance.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentIssueRecycleController.java | 84
cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCheckController.java | 116
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java | 40
cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java | 51
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessEvaluateServiceImpl.java | 99
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumRecordServiceImpl.java | 75
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java | 160
cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseController.java | 354
cnas-require/src/main/java/com/ruoyi/require/pojo/FePowerStable.java | 63
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java | 180
cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingDto.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCheck.java | 77
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCheckController.java | 90
ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml | 13
cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java | 17
cnas-device/src/main/resources/mapper/OperationInstructionMapper.xml | 13
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseManagementReview.java | 62
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java | 21
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckMapper.java | 28
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java | 60
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingServiceImpl.java | 203
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyWorkFileService.java | 15
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java | 93
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceScrapped.java | 104
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAccidentReportMapper.java | 35
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java | 20
cnas-require/src/main/java/com/ruoyi/require/mapper/FeMeasuredQuantityMapper.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCorrectDto.java | 26
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBorrowMapper.java | 25
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentCancel.java | 103
cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java | 62
cnas-device/src/main/resources/mapper/InstructionMapper.xml | 22
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlan.java | 94
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsTotalService.java | 25
cnas-process/src/main/resources/static/quality-monitor-details-ratify.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExternalApplyService.java | 42
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanDetailsServiceImpl.java | 20
cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java | 387
cnas-device/src/main/resources/mapper/DeviceImpowerMapper.xml | 14
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMachineAttachment.java | 60
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml | 54
cnas-device/src/main/java/com/ruoyi/device/dto/DocumentExportWordDto.java | 45
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java | 57
cnas-process/src/main/resources/static/inconsistent-distribution.docx | 0
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java | 64
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentControlled.java | 92
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectServiceImpl.java | 320
cnas-personnel/src/main/resources/static/training-record.docx | 0
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerify.java | 133
cnas-device/src/main/java/com/ruoyi/device/excel/DeviceStateExport.java | 36
cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumDateDto.java | 21
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoWorkDto.java | 16
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceRecordServiceImpl.java | 148
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java | 153
cnas-manage/src/main/resources/mapper/InternalCorrectMapper.xml | 15
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitor.java | 82
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsAccordingMapper.xml | 57
cnas-personnel/src/main/resources/static/super-vise-plan.docx | 0
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonCommunicationAbilityController.java | 61
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java | 27
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingParticipantsService.java | 20
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewBackups.java | 83
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageControlPlanList.java | 80
cnas-device/src/main/resources/mapper/DeviceBorrowMapper.xml | 21
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonCommunicationAbilityMapper.java | 21
cnas-device/src/main/java/com/ruoyi/device/service/DeviceOperationInstructionService.java | 20
cnas-process/src/main/resources/static/quality-monitor.docx | 0
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlan.java | 66
cnas-device/src/main/resources/static/word/examine-plan-detail.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCancelMapper.java | 21
cnas-device/src/main/java/com/ruoyi/device/dto/DataConfigDto.java | 39
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervals.java | 62
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java | 370
cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java | 15
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java | 16
cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesListDto.java | 15
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java | 16
cnas-personnel/src/main/resources/static/person-basic-info.docx | 0
cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderDetailService.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingMapper.java | 22
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanDetailService.java | 16
cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java | 36
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewReportService.java | 24
cnas-process/src/main/resources/mapper/InspectionOrderDetailMapper.xml | 19
cnas-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java | 142
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalReportMapper.java | 28
cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java | 15
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDto.java | 24
cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingParticipantsDto.java | 21
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectFileMapper.xml | 6
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenanceService.java | 30
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanService.java | 77
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectMapper.java | 28
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java | 65
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingDetailMapper.java | 16
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java | 20
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsRatifyServiceImpl.java | 19
cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalImplementController.java | 117
cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationDetectionAreaMapper.java | 16
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesListServiceImpl.java | 130
cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageRiskAssessmentResultsVo.java | 21
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewArchivedMapper.java | 28
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java | 161
cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesDetailServiceImpl.java | 20
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java | 60
cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml | 24
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java | 27
cnas-manage/src/main/java/com/ruoyi/manage/dto/ClientSatisfactionDto.java | 50
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectMapper.java | 23
cnas-require/src/main/java/com/ruoyi/require/mapper/FeLightningProtectionMapper.java | 21
cnas-process/src/main/resources/static/excel/check-records.xlsx | 0
cnas-require/src/main/resources/mapper/SupplierManagementMapper.xml | 81
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewArchivedDto.java | 19
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceTraceabilityManagement.java | 76
cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateMapper.xml | 15
cnas-manage/src/main/resources/mapper/ManageDocumentCancelMapper.xml | 44
cnas-device/src/main/resources/static/word/examine-record.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java | 20
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessSampleController.java | 57
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecord.java | 138
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerDetailsServiceImpl.java | 20
cnas-require/src/main/java/com/ruoyi/require/service/FeLightningProtectionService.java | 21
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotaldealMapper.java | 21
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBorrowServiceImpl.java | 116
cnas-manage/src/main/resources/mapper/ManageRecordTotalMapper.xml | 32
cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml | 118
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsTotalServiceImpl.java | 507
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationServiceImpl.java | 124
cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceImport.java | 46
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessDeal.java | 75
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsController.java | 74
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java | 65
cnas-manage/src/main/resources/static/risk-factor-identification-risk.docx | 0
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java | 52
cnas-manage/src/main/resources/static/intervals-deal.docx | 0
cnas-device/src/main/resources/static/word/device-impower.docx | 0
cnas-require/src/main/java/com/ruoyi/require/service/SupplierManagementService.java | 32
cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesDetailMapper.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrect.java | 114
cnas-require/src/main/java/com/ruoyi/require/dto/InternalWastesDto.java | 26
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java | 29
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordVerifyMapper.java | 22
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalReportService.java | 47
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIssueRecycleService.java | 31
cnas-require/src/main/java/com/ruoyi/require/controller/FePowerStableController.java | 99
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsAccording.java | 143
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateFileMapper.java | 17
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java | 27
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsTotalController.java | 55
cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckDetailMapper.java | 17
cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCheckDto.java | 19
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrectFile.java | 55
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingParticipantsMapper.java | 16
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordDetail.java | 69
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramFileServiceImpl.java | 76
cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java | 25
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessReport.java | 76
cnas-process/src/main/resources/static/quality-monitor-evaluate.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingParticipantDto.java | 32
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java | 47
cnas-device/src/main/resources/static/word/maintenance-plan.docx | 0
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java | 160
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceState.java | 106
cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderMapper.java | 41
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewReport.java | 101
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java | 11
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyCalibrationsFileDto.java | 19
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingController.java | 66
cnas-personnel/src/main/java/com/ruoyi/personnel/task/PersonTrainingSchedule.java | 65
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-manage/src/main/resources/mapper/ManageDocumentIssueRecycleMapper.xml | 54
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java | 194
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgramFile.java | 49
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRiskAssessmentResultsMapper.java | 21
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyServiceImpl.java | 455
cnas-require/src/main/java/com/ruoyi/require/service/impl/FePowerStableServiceImpl.java | 124
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyExportWordDto.java | 40
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotaldealController.java | 74
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricController.java | 35
cnas-manage/src/main/java/com/ruoyi/manage/vo/ReviewProgramDetailsVo.java | 15
cnas-manage/src/main/resources/mapper/ManageDocumentListMapper.xml | 26
cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrderDetail.java | 61
cnas-process/src/main/java/com/ruoyi/process/dto/SampleItemDto.java | 23
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentCancelService.java | 34
cnas-device/src/main/java/com/ruoyi/device/excel/DeviceMaintenanceExport.java | 45
cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java | 232
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordTotalService.java | 25
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java | 34
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java | 98
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDto.java | 47
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java | 299
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceOperationInstructionDto.java | 35
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordTotalMapper.java | 21
cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastesDetail.java | 65
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCheckServiceImpl.java | 475
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordVerifyService.java | 28
cnas-personnel/src/main/resources/static/communication-deal.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalReportController.java | 124
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerMapper.java | 36
cnas-require/src/main/resources/static/power-stable.docx | 0
cnas-manage/src/main/resources/static/review-meet.docx | 0
cnas-manage/src/main/resources/mapper/ManageReviewProgramMapper.xml | 41
cnas-device/src/main/resources/mapper/DeviceImpowerDetailsMapper.xml | 16
cnas-require/src/main/java/com/ruoyi/require/controller/ForeignRegisterController.java | 96
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java | 16
cnas-manage/src/main/resources/mapper/InternalMeetingMapper.xml | 18
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseMapper.java | 38
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java | 357
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlanDetails.java | 75
cnas-require/src/main/java/com/ruoyi/require/service/ForeignRegisterService.java | 34
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java | 32
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableDto.java | 22
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDetailsDto.java | 25
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecordDetails.java | 62
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionAnalyseFileMapper.java | 27
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMethodFile.java | 54
cnas-require/src/main/java/com/ruoyi/require/pojo/FeMeasuredQuantity.java | 53
cnas-process/src/main/resources/mapper/ProcessMethodVerifyMapper.xml | 22
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceLogMapper.java | 9
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeetingParticipants.java | 53
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceRecord.java | 69
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramFileService.java | 22
cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseDetailsService.java | 15
cnas-process/src/main/resources/static/supervise-management-eview.docx | 0
cnas-personnel/src/main/resources/static/person-training-record.docx | 0
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseManagementReviewMapper.java | 26
cnas-process/src/main/resources/mapper/ProcessEvaluateMapper.xml | 26
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java | 20
cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfactionAnalyseFile.java | 54
cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml | 64
cnas-personnel/src/main/resources/mapper/PersonTrainingDetailedMapper.xml | 55
cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java | 20
cnas-require/src/main/java/com/ruoyi/require/dto/ForeignRegisterDto.java | 32
cnas-device/src/main/java/com/ruoyi/device/service/DeviceCalibrationPlanDetailService.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentCancelServiceImpl.java | 146
cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumRecord.java | 66
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckDetailService.java | 15
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceAccidentReportDto.java | 31
cnas-device/src/main/resources/static/word/incident-report.docx | 0
cnas-manage/src/main/resources/static/recycle-deal.docx | 0
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCollectionDto.java | 28
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java | 128
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPersonnelCapacityServiceImpl.java | 160
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java | 82
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceConfigDtoPage.java | 77
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentIssueRecycleService.java | 35
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordDetailsMapper.java | 16
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessSampleMapper.java | 21
cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java | 22
cnas-process/src/main/resources/mapper/InspectionOrderMapper.xml | 27
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCheckService.java | 32
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckDetailServiceImpl.java | 19
cnas-process/src/main/resources/mapper/ProcessMethodVerifyCalibrationsFileMapper.xml | 24
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java | 88
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsRecordMapper.xml | 11
cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramFileController.java | 46
cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java | 46
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceCalibrationPlanMapper.java | 29
cnas-require/src/main/resources/static/internal-wastes.docx | 0
cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionMapper.java | 36
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageControlPlanListServiceImpl.java | 129
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseManagementReviewServiceImpl.java | 86
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorMapper.java | 28
cnas-device/src/main/resources/mapper/DeviceExamineRecordMapper.xml | 25
cnas-manage/src/main/resources/mapper/InternalReportMapper.xml | 14
cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrder.java | 109
cnas-manage/src/main/resources/mapper/InternalImplementMapper.xml | 14
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java | 76
cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java | 7
cnas-device/src/main/resources/mapper/DeviceCalibrationPlanMapper.xml | 20
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceTraceabilityManagementDto.java | 28
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpower.java | 74
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessOrderDeviceServiceImpl.java | 26
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceStateDto.java | 32
cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerService.java | 71
cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrectFile.java | 52
cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectService.java | 66
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-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesListService.java | 28
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java | 16
cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectFileServiceImpl.java | 20
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceStateMapper.java | 21
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java | 105
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanMapper.java | 35
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationAddDto.java | 15
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java | 22
cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentAlterService.java | 36
cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationMapper.java | 28
918 files changed, 56,325 insertions(+), 0 deletions(-)
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java
new file mode 100644
index 0000000..863da69
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java
@@ -0,0 +1,133 @@
+package com.ruoyi.device.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.device.pojo.DeviceAcceptance;
+import com.ruoyi.device.pojo.DeviceAcceptanceFile;
+import com.ruoyi.device.service.DeviceAcceptanceFileService;
+import com.ruoyi.device.service.DeviceAcceptanceService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭) 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:14
+ */
+@Tag(name = "璁惧楠屾敹(瑁呭)")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceAcceptance")
+public class DeviceAcceptanceController {
+
+ private DeviceAcceptanceService deviceAcceptanceService;
+ private DeviceAcceptanceFileService deviceAcceptanceFileService;
+
+ /**
+ * 璁惧楠屾敹鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧楠屾敹鍒楄〃")
+ @GetMapping("/pageDeviceAcceptance")
+ public Result<IPage<DeviceAcceptance>> pageDeviceAcceptance(Page page, DeviceAcceptance deviceAcceptance) {
+ return Result.success(deviceAcceptanceService.pageDeviceAcceptance(page, deviceAcceptance));
+ }
+
+ /**
+ * 鏌ヨ璁惧楠屾敹
+ * @return
+ */
+ @Operation(summary = "鏌ヨ璁惧楠屾敹")
+ @GetMapping("/getDeviceAcceptance")
+ public Result getDeviceAcceptance(Integer acceptanceId){
+ return Result.success(deviceAcceptanceService.getById(acceptanceId));
+ }
+
+ /**
+ * 鍒犻櫎璁惧楠屾敹
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎璁惧楠屾敹")
+ @DeleteMapping("/delDeviceAcceptance")
+ public Result delDeviceAcceptance(Integer acceptanceId){
+ return Result.success(deviceAcceptanceService.removeById(acceptanceId));
+ }
+
+ /**
+ * 鏂板璁惧楠屾敹
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧楠屾敹")
+ @PostMapping("/addDeviceAcceptance")
+ public Result addDeviceAcceptance(@RequestBody DeviceAcceptance deviceAcceptance){
+ return Result.success(deviceAcceptanceService.save(deviceAcceptance));
+ }
+
+ /**
+ * 鏂板璁惧楠屾敹
+ * @return
+ */
+ @Operation(summary = "缂栬緫璁惧楠屾敹")
+ @PostMapping("/updateDeviceAcceptance")
+ public Result updateDeviceAcceptance(@RequestBody DeviceAcceptance deviceAcceptance){
+ return Result.success(deviceAcceptanceService.updateById(deviceAcceptance));
+ }
+
+ /**
+ * 璁惧楠屾敹瀵煎嚭
+ * @param acceptanceId 璁惧楠屾敹id
+ * @param response 鍝嶅簲浣�
+ * @return
+ */
+ @Operation(summary = "璁惧楠屾敹瀵煎嚭")
+ @GetMapping("/exportDeviceAcceptance")
+ public void exportDeviceAcceptance(Integer acceptanceId, HttpServletResponse response){
+ deviceAcceptanceService.exportDeviceAcceptance(acceptanceId, response);
+ }
+
+ /**
+ * 璁惧楠屾敹闄勪欢鏂板
+ * @param acceptanceId
+ * @param file
+ * @return
+ */
+ @Operation(summary = "璁惧楠屾敹闄勪欢鏂板")
+ @PostMapping("/uploadDeviceAcceptanceFile")
+ public Result<?> uploadDeviceAcceptanceFile(Integer acceptanceId, MultipartFile file) {
+ return Result.success(deviceAcceptanceService.uploadDeviceAcceptanceFile(acceptanceId, file));
+ }
+
+
+ /**
+ * 璁惧楠屾敹闄勪欢鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧楠屾敹闄勪欢鍒楄〃")
+ @GetMapping("/getDeviceAcceptanceFileList")
+ public Result<List<DeviceAcceptanceFile>> getVerifyMethodFileList(Integer acceptanceId){
+ return Result.success(deviceAcceptanceFileService.list(Wrappers.<DeviceAcceptanceFile>lambdaQuery()
+ .eq(DeviceAcceptanceFile::getAcceptanceId, acceptanceId)));
+ }
+
+ /**
+ * 璁惧楠屾敹闄勪欢鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "璁惧楠屾敹闄勪欢鍒犻櫎")
+ @DeleteMapping("/delDeviceAcceptanceFileList")
+ public Result delDeviceAcceptanceFileList(Integer acceptanceFileId){
+ return Result.success(deviceAcceptanceFileService.removeById(acceptanceFileId));
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAccidentReportController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAccidentReportController.java
new file mode 100644
index 0000000..0406f3b
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAccidentReportController.java
@@ -0,0 +1,84 @@
+package com.ruoyi.device.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.device.pojo.DeviceAccidentReport;
+import com.ruoyi.device.service.DeviceAccidentReportService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+@Tag(name = "璁惧浜嬫晠鎶ュ憡鍗�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceAccidentReport")
+public class DeviceAccidentReportController {
+
+ private DeviceAccidentReportService deviceAccidentReportService;
+
+
+ /**
+ * 璁惧浜嬫晠鎶ュ憡鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧浜嬫晠鎶ュ憡鍒楄〃")
+ @GetMapping("/pageDeviceAccidentReport")
+ public Result<IPage<DeviceAccidentReport>> pageDeviceAccidentReport(Page page, DeviceAccidentReport deviceAccidentReport){
+ return Result.success(deviceAccidentReportService.pageDeviceAccidentReport(page, deviceAccidentReport));
+ }
+
+ /**
+ * 鏌ヨ璁惧浜嬫晠鎶ュ憡
+ * @return
+ */
+ @Operation(summary = "鏌ヨ璁惧浜嬫晠鎶ュ憡")
+ @GetMapping("/getDeviceAccidentReport")
+ public Result getDeviceAccidentReport(Integer accidentReportId){
+ return Result.success(deviceAccidentReportService.getById(accidentReportId));
+ }
+
+ /**
+ * 鍒犻櫎璁惧浜嬫晠鎶ュ憡
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎璁惧浜嬫晠鎶ュ憡")
+ @DeleteMapping("/delDeviceAccidentReport")
+ public Result delDeviceAccidentReport(Integer accidentReportId){
+ return Result.success(deviceAccidentReportService.removeById(accidentReportId));
+ }
+
+ /**
+ * 鏂板璁惧浜嬫晠鎶ュ憡
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧浜嬫晠鎶ュ憡")
+ @PostMapping("/addDeviceAccidentReport")
+ public Result addDeviceAccidentReport(@RequestBody DeviceAccidentReport deviceAccidentReport){
+ return Result.success(deviceAccidentReportService.addDeviceAccidentReport(deviceAccidentReport));
+ }
+
+ /**
+ * 瀵煎嚭璁惧浜嬫晠鎶ュ憡
+ * @param accidentReportId 璁惧浜嬫晠鎶ュ憡id
+ * @param response 鍝嶅簲
+ */
+ @Operation(summary = "瀵煎嚭璁惧浜嬫晠鎶ュ憡")
+ @GetMapping("/exportDeviceAccidentReport")
+ public Result exportDeviceAccidentReport(Integer accidentReportId, HttpServletResponse response) {
+ deviceAccidentReportService.exportDeviceAccidentReport(accidentReportId, response);
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java
new file mode 100644
index 0000000..8709b5d
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java
@@ -0,0 +1,73 @@
+package com.ruoyi.device.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.pojo.DeviceBorrow;
+import com.ruoyi.device.service.DeviceBorrowService;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 10:53:51
+ */
+@RestController
+@RequestMapping("/deviceBorrow")
+public class DeviceBorrowController {
+
+ @Resource
+ private DeviceBorrowService deviceBorrowService;
+
+
+ //鍒嗛〉
+ @GetMapping("/deviceBorrowPage")
+ public Result deviceBorrowPage(Page page, DeviceBorrow deviceBorrow) throws Exception {
+ return Result.success(deviceBorrowService.deviceBorrowPage(page, deviceBorrow));
+ }
+
+ //鏌ヨ
+ @GetMapping("/getDeviceBorrow")
+ public Result getDeviceBorrow(Integer id) {
+ return Result.success(deviceBorrowService.getDeviceBorrow(id));
+ }
+
+ //鏂板
+ @PostMapping("/saveDeviceBorrow")
+ public Result saveDeviceBorrow(@RequestBody DeviceBorrow deviceBorrow) {
+ return Result.success(deviceBorrowService.saveDeviceBorrow(deviceBorrow));
+ }
+
+ //鍒犻櫎
+ @DeleteMapping("/deleteDeviceBorrow")
+ public Result deleteDeviceBorrow(Integer id) {
+ return Result.success(deviceBorrowService.removeById(id));
+ }
+
+ //瀵煎嚭
+ @GetMapping("/deviceBorrowExport")
+ public Result deviceBorrowExport(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws Exception {
+ List<DeviceBorrow> deviceBorrows = deviceBorrowService.getDeviceBorrowBydeviceId(deviceId);
+ response.setHeader("requestType", "excel");
+ response.setHeader("Access-Control-Expose-Headers", "requestType");
+ // 璁剧疆鍗曞厓鏍兼牱寮�
+ // 淇濆瓨鍒扮涓�涓猻heet涓�
+ EasyExcel.write(response.getOutputStream())
+ .head(DeviceBorrow.class)
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+ .sheet()
+ .doWrite(deviceBorrows);
+ return Result.success();
+ }
+
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBreakdownMaintenanceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBreakdownMaintenanceController.java
new file mode 100644
index 0000000..980aa4d
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBreakdownMaintenanceController.java
@@ -0,0 +1,85 @@
+package com.ruoyi.device.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.device.dto.DeviceBreakdownMaintenance;
+import com.ruoyi.device.service.DeviceBreakdownMaintenanceService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+@Tag(name = "璁惧鏁呴殰缁翠慨琛�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceBreakdownMaintenance")
+public class DeviceBreakdownMaintenanceController {
+
+ private DeviceBreakdownMaintenanceService deviceBreakdownMaintenanceService;
+
+
+ /**
+ * 璁惧鏁呴殰缁翠慨鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧鏁呴殰缁翠慨鍒楄〃")
+ @GetMapping("/pageDeviceBreakdownMaintenance")
+ public Result<IPage<DeviceBreakdownMaintenance>> pageDeviceBreakdownMaintenance(Page page, DeviceBreakdownMaintenance deviceBreakdownMaintenance) {
+ return Result.success(deviceBreakdownMaintenanceService.pageDeviceBreakdownMaintenance(page, deviceBreakdownMaintenance));
+ }
+
+ /**
+ * 鏌ヨ璁惧鏁呴殰缁翠慨
+ * @return
+ */
+ @Operation(summary = "鏌ヨ璁惧鏁呴殰缁翠慨")
+ @GetMapping("/getDeviceBreakdownMaintenance")
+ public Result getDeviceBreakdownMaintenance(Integer maintenanceId){
+ return Result.success(deviceBreakdownMaintenanceService.getById(maintenanceId));
+ }
+
+ /**
+ * 鍒犻櫎璁惧鏁呴殰缁翠慨
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎璁惧鏁呴殰缁翠慨")
+ @DeleteMapping("/delDeviceBreakdownMaintenance")
+ public Result delDeviceBreakdownMaintenance(Integer maintenanceId){
+ return Result.success(deviceBreakdownMaintenanceService.removeById(maintenanceId));
+ }
+
+ /**
+ * 鏂板璁惧鏁呴殰缁翠慨
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧鏁呴殰缁翠慨")
+ @PostMapping("/addDeviceBreakdownMaintenance")
+ public Result addDeviceBreakdownMaintenance(@RequestBody DeviceBreakdownMaintenance deviceBreakdownMaintenance){
+ return Result.success(deviceBreakdownMaintenanceService.addDeviceBreakdownMaintenance(deviceBreakdownMaintenance));
+ }
+
+ /**
+ * 瀵煎嚭璁惧鏁呴殰缁翠慨
+ * @param maintenanceId 璁惧鏁呴殰缁翠慨id
+ * @param response 鍝嶅簲
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭璁惧鏁呴殰缁翠慨")
+ @GetMapping("/exportDeviceBreakdownMaintenance")
+ public Result exportDeviceBreakdownMaintenance(Integer maintenanceId, HttpServletResponse response){
+ deviceBreakdownMaintenanceService.exportDeviceBreakdownMaintenance(maintenanceId, response);
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceCalibrationPlanController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceCalibrationPlanController.java
new file mode 100644
index 0000000..438d008
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceCalibrationPlanController.java
@@ -0,0 +1,173 @@
+package com.ruoyi.device.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.device.dto.DeviceCalibrationPlanDto;
+import com.ruoyi.device.pojo.DeviceCalibrationPlan;
+import com.ruoyi.device.pojo.DeviceCalibrationPlanDetail;
+import com.ruoyi.device.service.DeviceCalibrationPlanDetailService;
+import com.ruoyi.device.service.DeviceCalibrationPlanService;
+import com.ruoyi.framework.exception.ErrorException;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝涓昏〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:17
+ */
+@Tag(name = "璁惧鏍″噯璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceCalibrationPlan")
+public class DeviceCalibrationPlanController {
+
+ private DeviceCalibrationPlanService deviceCalibrationPlanService;
+
+ private DeviceCalibrationPlanDetailService deviceCalibrationPlanDetailService;
+
+ /**
+ * 鏂板璁惧鏍″噯璁″垝
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧鏍″噯璁″垝")
+ @PostMapping("/addDeviceCalibrationPlan")
+ public Result addDeviceCalibrationPlan(@RequestBody DeviceCalibrationPlanDto calibrationPlanDto){
+ return Result.success(deviceCalibrationPlanService.addDeviceCalibrationPlan(calibrationPlanDto));
+ }
+
+ /**
+ * 淇敼璁惧鏍″噯璁″垝
+ * @param calibrationPlanDto 璁惧鏍″噯璁″垝
+ */
+ @Operation(summary = "鎵归噺淇敼璁惧鏍″噯璁″垝")
+ @PostMapping("/updateDeviceCalibrationPlan")
+ public Result updateDeviceCalibrationPlan(@RequestBody DeviceCalibrationPlanDto calibrationPlanDto) {
+ return Result.success(deviceCalibrationPlanService.updateDeviceCalibrationPlan(calibrationPlanDto));
+ }
+
+ /**
+ * 鏌ヨ璁惧鏍″噯璁″垝璇︽儏
+ */
+ @Operation(summary = "鏌ヨ璁惧鏍″噯璁″垝璇︽儏")
+ @GetMapping("/getDeviceCalibrationPlan")
+ public Result<DeviceCalibrationPlanDto> getDeviceCalibrationPlan(Integer planId) {
+ return Result.success(deviceCalibrationPlanService.getDeviceCalibrationPlan(planId));
+ }
+
+ /**
+ * 瀵煎叆璁惧鏍″噯璁″垝
+ * @return
+ */
+ @Operation(summary = "瀵煎叆璁惧鏍″噯璁″垝")
+ @PostMapping("/importDeviceCalibrationPlan")
+ public Result importDeviceCalibrationPlan(MultipartFile file, String planYear){
+ return Result.success(deviceCalibrationPlanService.importDeviceCalibrationPlan(file, planYear));
+ }
+
+
+ /**
+ * 璁惧鏍″噯璁″垝鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "璁惧鏍″噯璁″垝鍒犻櫎")
+ @DeleteMapping("/delDeviceCalibrationPlan")
+ public Result delDeviceCalibrationPlan(Integer planId){
+ return Result.success(deviceCalibrationPlanService.removeById(planId));
+ }
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "鎻愪氦鎵瑰噯")
+ @PostMapping("/submiatRatifyDeviceCalibrationPlan")
+ public Result submiatRatifyDeviceCalibrationPlan(@RequestBody DeviceCalibrationPlan DeviceCalibrationPlan){
+ return Result.success(deviceCalibrationPlanService.submiatRatifyDeviceCalibrationPlan(DeviceCalibrationPlan));
+ }
+
+ /**
+ * 璁惧鏍″噯璁″垝鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "璁惧鏍″噯璁″垝鎵瑰噯")
+ @PostMapping("/ratifyDeviceCalibrationPlan")
+ public Result ratifyDeviceCalibrationPlan(@RequestBody DeviceCalibrationPlan DeviceCalibrationPlan){
+ return Result.success(deviceCalibrationPlanService.ratifyDeviceCalibrationPlan(DeviceCalibrationPlan));
+ }
+
+
+ /**
+ * 璁惧鏍″噯璁″垝鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧鏍″噯璁″垝鍒楄〃")
+ @GetMapping("/pageDeviceCalibrationPlan")
+ public Result<IPage<DeviceCalibrationPlanDto>> pageDeviceCalibrationPlan(Page page, DeviceCalibrationPlan DeviceCalibrationPlan) throws Exception {
+ return Result.success(deviceCalibrationPlanService.pageDeviceCalibrationPlan(page, DeviceCalibrationPlan));
+ }
+
+ /**
+ * 璁惧鏍″噯璁″垝璇︽儏鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧鏍″噯璁″垝璇︽儏鍒楄〃")
+ @GetMapping("/pageDeviceCalibrationPlanDetail")
+ public Result<IPage<DeviceCalibrationPlanDetail>> pageDeviceCalibrationPlanDetail(Page page, DeviceCalibrationPlanDetail deviceCalibrationPlanDetails) {
+ return Result.success(deviceCalibrationPlanService.pageDeviceCalibrationPlanDetail(page, deviceCalibrationPlanDetails));
+ }
+
+ /**
+ * 鏂板璁惧鏍″噯璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧鏍″噯璁″垝璇︽儏")
+ @PostMapping("/addDeviceCalibrationPlanDetail")
+ public Result addDeviceCalibrationPlanDetail(@RequestBody DeviceCalibrationPlanDetail deviceCalibrationPlanDetail){
+ if (deviceCalibrationPlanDetail.getPlanId() == null) {
+ throw new ErrorException("缂哄皯璁惧鏍″噯璁″垝涓昏〃id");
+ }
+ return Result.success(deviceCalibrationPlanDetailService.save(deviceCalibrationPlanDetail));
+ }
+
+ /**
+ * 淇敼璁惧鏍″噯璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "淇敼璁惧鏍″噯璁″垝璇︽儏")
+ @PostMapping("/updateDeviceCalibrationPlanDetail")
+ public Result updateDeviceCalibrationPlanDetail(@RequestBody DeviceCalibrationPlanDetail deviceCalibrationPlanDetail){
+ return Result.success(deviceCalibrationPlanDetailService.updateById(deviceCalibrationPlanDetail));
+ }
+
+ /**
+ * 鍒犻櫎璁惧鏍″噯璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎璁惧鏍″噯璁″垝璇︽儏")
+ @DeleteMapping("/delDeviceCalibrationPlanDetail")
+ public Result delDeviceCalibrationPlanDetail(Integer planDetailsId){
+ return Result.success(deviceCalibrationPlanDetailService.removeById(planDetailsId));
+ }
+
+ /**
+ * 瀵煎嚭璁惧鏍″噯璁″垝
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭璁惧鏍″噯璁″垝")
+ @GetMapping("/exportDeviceCalibrationPlanDetail")
+ public void exportDeviceCalibrationPlanDetail(Integer planId, HttpServletResponse response){
+ deviceCalibrationPlanService.exportDeviceCalibrationPlanDetail(planId, response);
+ }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
new file mode 100644
index 0000000..7022e75
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
@@ -0,0 +1,228 @@
+package com.ruoyi.device.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.dto.DataConfigDto;
+import com.ruoyi.device.dto.DeviceCollectionDto;
+import com.ruoyi.device.dto.DeviceDto;
+import com.ruoyi.device.pojo.DataConfig;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.service.DataConfigService;
+import com.ruoyi.device.service.DeviceService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 璁惧(DeviceController)琛ㄦ帶鍒跺眰
+ */
+@Tag(name = "璁惧")
+@RestController
+@RequestMapping("/deviceScope")
+public class DeviceController {
+
+ @Resource
+ private DeviceService deviceService;
+
+ @Value("${file.path}")
+ private String filePath;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Autowired
+ private DataConfigService dataConfigService;
+
+ @Operation(summary = "鏌ヨ璁惧璇︽儏")
+ @GetMapping("/getDeviceById")
+ public Result getDeviceById(Integer deviceId) {
+ return Result.success(deviceService.getById(deviceId));
+ }
+
+
+ //璁惧宸ュ叿鏄庣粏
+ @Operation(summary = "鏌ヨ璁惧璇︽儏鍒楄〃")
+ @GetMapping("/selectDeviceParameter")
+ public Result selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull) {
+ return Result.success(deviceService.selectDeviceParameter(page, itemParameter, laboratoryNameIsNull));
+ }
+
+ @Operation(summary = "娣诲姞璁惧璇︽儏鍙傛暟")
+ @PostMapping("/addDeviceParameter")
+ public Result addDeviceParameter(@RequestBody Device itemParameter) {
+ return Result.success(deviceService.addDeviceParameter(itemParameter));
+ }
+
+ @Operation(summary = "鍒犻櫎璁惧璇︽儏鍙傛暟")
+ @DeleteMapping("/delDeviceParameter")
+ public Result<?> delDeviceParameter(Integer id) {
+ return Result.success(deviceService.delDeviceParameter(id));
+ }
+
+ @Operation(summary = "淇敼璁惧璇︽儏鍙傛暟")
+ @PostMapping("/upDeviceParameter")
+ public Result<?> upDeviceParameter(@RequestBody Device itemParameter) {
+ return Result.success(deviceService.upDeviceParameter(itemParameter));
+ }
+
+ @Operation(summary = "鑾峰彇璁惧鎬昏")
+ @GetMapping("/selectEquipmentOverview")
+ public Result selectEquipmentOverview() {
+ return Result.success(deviceService.selectEquipmentOverview());
+ }
+
+ @Operation(summary = "鑾峰彇琚巿鏉冧汉")
+ @GetMapping("/authorizedPerson")
+ public Result authorizedPerson() {
+ return Result.success(deviceService.authorizedPerson());
+ }
+
+ @Operation(summary = "鎼滅储")
+ @GetMapping("/search")
+ public Result search(Integer status, String deviceName, String specificationModel, String largeCategory) {
+ return Result.success(deviceService.search(status, deviceName, specificationModel, largeCategory));
+ }
+
+ //鍥剧墖涓婁紶
+ @Operation(summary = "璁惧鏂囦欢涓婁紶")
+ @PostMapping("/uploadFile")
+ public Result uploadFile(MultipartFile file) {
+ String urlString;
+ String pathName;
+ String filename = file.getOriginalFilename();
+ String path;
+ try {
+ String contentType = file.getContentType();
+ if (contentType != null && contentType.startsWith("image/")) {
+ // 鏄浘鐗�
+ path = filePath;
+ } else {
+ // 鏄枃浠�
+ 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));
+ HashMap<String, String> map = new HashMap<>();
+ map.put("name", filename);
+ map.put("url", pathName);
+ return Result.success(map);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("鏂囦欢涓婁紶閿欒");
+ return null;
+ }
+ }
+
+ @Operation(summary = "閫氳繃椤圭洰鑾峰彇璁惧鍒楄〃")
+ @GetMapping("/selectDeviceByCategory")
+ public Result selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass, String laboratory) {
+ return Result.success(deviceService.selectDeviceByCategory(inspectionItem, inspectionItemSubclass, laboratory));
+ }
+
+ @Operation(summary = "閫氳繃璁惧缂栧彿鑾峰彇璁惧鍒楄〃")
+ @GetMapping("/selectDeviceByCode")
+ public Result<DeviceDto> selectDeviceByCode(Integer id) {
+ return Result.success(deviceService.selectDeviceByCode(id));
+ }
+
+
+ @Operation(summary = "/鏁伴噰-鏁版嵁閲囬泦")
+ @PostMapping("/dataCollection")
+ public Result<?> dataAcquisition(HttpServletRequest request, @RequestBody DeviceCollectionDto dto) {
+ return deviceService.dataAcquisition(request, dto);
+ }
+
+ @Operation(summary = "缁存姢璁惧鏂囦欢閰嶇疆")
+ @PostMapping("/saveDeviceFileConfiguration")
+ public Result<?> saveDeviceFileConfiguration(@RequestBody DataConfigDto dataConfigList) {
+ dataConfigService.saveDeviceFileConfiguration(dataConfigList);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏌ヨ鏁伴噰閰嶇疆")
+ @GetMapping("/queryDataAcquisitionConfiguration")
+ public Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig) {
+ return dataConfigService.queryDataAcquisitionConfiguration(dataConfig);
+ }
+
+ @Operation(summary = "鏌ヨ妫�楠岄」鏁伴噰閰嶇疆")
+ @GetMapping("/queryProductConfiguration")
+ public Result<?> queryProductConfiguration(DataConfig dataConfig) {
+ return dataConfigService.queryProductConfiguration(dataConfig);
+ }
+
+ @Operation(summary = "缁存姢鏁伴噰閰嶇疆")
+ @PostMapping("/saveDataAcquisitionConfiguration")
+ public Result<?> saveDataAcquisitionConfiguration(@RequestBody DataConfigDto dataConfigList) {
+ dataConfigService.saveDataAcquisitionConfiguration(dataConfigList);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "鏌ヨ缁戝畾浜嗕絾鏄病鏈夐厤缃殑妫�楠岄」")
+ @GetMapping("/getNoConfigProduct")
+ public Result<?> getNoConfigProduct(Page page, Integer deviceId) {
+ return Result.success(dataConfigService.getNoConfigProduct(page, deviceId));
+ }
+
+ @Operation(summary = "鍒犻櫎鏁伴噰閰嶇疆")
+ @DeleteMapping("/deleteDataAcquisitionConfiguration")
+ public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("ids") String ids) {
+ List<String> split = Arrays.asList(ids.split(","));
+ List<String> collect = split.stream().distinct().collect(Collectors.toList());
+ dataConfigService.removeBatchByIds(collect);
+ return Result.success();
+ }
+
+ @Operation(summary = "宸︿晶璁惧鏍戝舰鏍�")
+ @GetMapping("/treeDevice")
+ public Result treeDevice(String deviceName) {
+ return Result.success(deviceService.treeDevice(deviceName));
+ }
+
+
+ @Operation(summary = "璁惧妗f瀵煎嚭")
+ @GetMapping("/exportDeviceFile")
+ public void exportDeviceFile(@RequestParam Integer deviceId, HttpServletResponse response) {
+ deviceService.exportDeviceFile(deviceId, response);
+ }
+
+ @Operation(summary = "浠櫒璁惧涓�瑙堣〃瀵煎嚭")
+ @GetMapping("/exportEquipmentDetails")
+ public void exportEquipmentDetails(HttpServletResponse response) {
+ deviceService.exportEquipmentDetails(response);
+ }
+
+ @Operation(summary = "涓嬭浇璁惧瀵煎叆妯℃澘")
+ @GetMapping("/importTemplate")
+ public void importTemplate(HttpServletResponse response) {
+ deviceService.downloadImportTemplate(response);
+ }
+
+ @Operation(summary = "瀵煎叆璁惧")
+ @PostMapping("/importDevice")
+ public Result importDevice(MultipartFile file) {
+ return Result.success(deviceService.importDevice(file));
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceDocumentsController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceDocumentsController.java
new file mode 100644
index 0000000..653c072
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceDocumentsController.java
@@ -0,0 +1,92 @@
+package com.ruoyi.device.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.pojo.DeviceDocuments;
+import com.ruoyi.device.service.DeviceDocumentsService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+
+
+/**
+ * 璁惧妗f鏂囨。
+ *
+ * @author zhuo
+ * @since 2025-02-28
+ */
+@RestController
+@Tag(name = "璁惧妗f鏂囨。")
+@RequestMapping("/deviceDocuments")
+public class DeviceDocumentsController {
+
+ @Resource
+ private DeviceDocumentsService deviceDocumentsService;
+
+
+ /**
+ * 鏂板璁惧妗f
+ * @param document
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧妗f")
+ @PostMapping("/addDocument")
+ public Result addDocument(@RequestBody DeviceDocuments document) {
+ if (document.getDeviceId() == null) {
+ throw new RuntimeException("璁惧id涓虹┖");
+ }
+ deviceDocumentsService.save(document);
+ return Result.success();
+ }
+
+ /**
+ * 鏌ヨ璁惧妗f淇℃伅
+ * @param id
+ * @return
+ */
+ @Operation(summary = "鏌ヨ璁惧妗f淇℃伅")
+ @GetMapping("/getDocumentById")
+ public Result getDocumentById(Integer id) {
+ return Result.success(deviceDocumentsService.getById(id));
+ }
+
+ /**
+ * 淇敼璁惧妗f
+ * @param document
+ * @return
+ */
+ @Operation(summary = "淇敼璁惧妗f")
+ @PostMapping("/updateDocument")
+ public Result updateDocument(@RequestBody DeviceDocuments document) {
+ return Result.success(deviceDocumentsService.updateById(document));
+ }
+
+ /**
+ * 鍒犻櫎璁惧妗f
+ * @param id
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎璁惧妗f")
+ @DeleteMapping("/deleteDocumentById")
+ public Result deleteDocumentById(Integer id) {
+ return Result.success(deviceDocumentsService.removeById(id));
+ }
+
+ /**
+ * 鏌ヨ璁惧妗f鍒楄〃
+ * @param deviceId
+ * @return
+ */
+ @Operation(summary = "鏌ヨ璁惧妗f鍒楄〃")
+ @GetMapping("/getAllDocuments")
+ public Result getAllDocuments(Integer deviceId) {
+ LambdaQueryWrapper<DeviceDocuments> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(DeviceDocuments::getDeviceId, deviceId);
+ return Result.success(deviceDocumentsService.list(lambdaQueryWrapper));
+ }
+
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExaminePlanController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExaminePlanController.java
new file mode 100644
index 0000000..deeeb1c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExaminePlanController.java
@@ -0,0 +1,274 @@
+package com.ruoyi.device.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.device.dto.DeviceExaminePlanDetailsDto;
+import com.ruoyi.device.dto.DeviceExaminePlanDto;
+import com.ruoyi.device.dto.DeviceExamineRecordContrastDto;
+import com.ruoyi.device.dto.DeviceExamineRecordDto;
+import com.ruoyi.device.pojo.DeviceExaminePlan;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import com.ruoyi.device.service.DeviceExaminePlanDetailsService;
+import com.ruoyi.device.service.DeviceExaminePlanService;
+import com.ruoyi.device.service.DeviceExamineRecordContrastService;
+import com.ruoyi.device.service.DeviceExamineRecordService;
+import com.ruoyi.framework.exception.ErrorException;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝涓昏〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:04
+ */
+@Tag(name = "璁惧鏍告煡璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceExaminePlan")
+public class DeviceExaminePlanController {
+
+ private DeviceExaminePlanService deviceExaminePlanService;
+
+ private DeviceExaminePlanDetailsService deviceExaminePlanDetailsService;
+
+ private DeviceExamineRecordService deviceExamineRecordService;
+
+ private DeviceExamineRecordContrastService deviceExamineRecordContrastService;
+
+
+ /**
+ * 鏂板璁惧鏍告煡璁″垝
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧鏍告煡璁″垝")
+ @PostMapping("/addDeviceExaminePlan")
+ public Result addDeviceExaminePlan(@RequestBody DeviceExaminePlanDto examinePlanDto){
+ return Result.success(deviceExaminePlanService.addDeviceExaminePlan(examinePlanDto));
+ }
+
+ /**
+ * 淇敼璁惧鏍告煡璁″垝
+ * @param examinePlanDto 璁惧鏍告煡璁″垝
+ */
+ @Operation(summary = "鎵归噺淇敼璁惧鏍告煡璁″垝")
+ @PostMapping("/updateDeviceExaminePlan")
+ public Result updateDeviceExaminePlan(@RequestBody DeviceExaminePlanDto examinePlanDto) {
+ return Result.success(deviceExaminePlanService.updateDeviceExaminePlan(examinePlanDto));
+ }
+
+ /**
+ * 鏌ヨ璁惧鏍告煡璁″垝璇︽儏
+ */
+ @Operation(summary = "鏌ヨ璁惧鏍告煡璁″垝璇︽儏")
+ @GetMapping("/getDeviceExaminePlan")
+ public Result<DeviceExaminePlanDto> getDeviceExaminePlan(Integer planId) {
+ return Result.success(deviceExaminePlanService.getDeviceExaminePlan(planId));
+ }
+
+ /**
+ * 瀵煎叆璁惧鏍告煡璁″垝
+ * @return
+ */
+ @Operation(summary = "瀵煎叆璁惧鏍告煡璁″垝")
+ @PostMapping("/importDeviceExaminePlan")
+ public Result importDeviceExaminePlan(MultipartFile file){
+ return Result.success(deviceExaminePlanService.importDeviceExaminePlan(file));
+ }
+
+
+ /**
+ * 璁惧鏍告煡璁″垝鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "璁惧鏍告煡璁″垝鍒犻櫎")
+ @DeleteMapping("/delDeviceExaminePlan")
+ public Result delDeviceExaminePlan(Integer planId){
+ return Result.success(deviceExaminePlanService.removeById(planId));
+ }
+
+
+ /**
+ * 璁惧鏍告煡璁″垝鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "鎻愪氦鎵瑰噯")
+ @PostMapping("/submitRatifyDeviceExaminePlan")
+ public Result submitRatifyDeviceExaminePlan(@RequestBody DeviceExaminePlan DeviceExaminePlan){
+ return Result.success(deviceExaminePlanService.submitRatifyDeviceExaminePlan(DeviceExaminePlan));
+ }
+
+ /**
+ * 璁惧鏍告煡璁″垝鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "璁惧鏍告煡璁″垝鎵瑰噯")
+ @PostMapping("/ratifyDeviceExaminePlan")
+ public Result ratifyDeviceExaminePlan(@RequestBody DeviceExaminePlan DeviceExaminePlan){
+ return Result.success(deviceExaminePlanService.ratifyDeviceExaminePlan(DeviceExaminePlan));
+ }
+
+
+ /**
+ * 璁惧鏍告煡璁″垝鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧鏍告煡璁″垝鍒楄〃")
+ @GetMapping("/pageDeviceExaminePlan")
+ public Result<IPage<DeviceExaminePlanDto>> pageDeviceExaminePlan(Page page, DeviceExaminePlan DeviceExaminePlan) {
+ return Result.success(deviceExaminePlanService.pageDeviceExaminePlan(page, DeviceExaminePlan));
+ }
+
+ /**
+ * 璁惧鏍告煡璁″垝璇︽儏鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧鏍告煡璁″垝璇︽儏鍒楄〃")
+ @GetMapping("/pageDeviceExaminePlanDetail")
+ public Result<IPage<DeviceExaminePlanDetailsDto>> pageDeviceExaminePlanDetail(Page page, DeviceExaminePlanDetails deviceExaminePlanDetails) {
+ return Result.success(deviceExaminePlanService.pageDeviceExaminePlanDetail(page, deviceExaminePlanDetails));
+ }
+
+ /**
+ * 鏂板璁惧鏍告煡璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧鏍告煡璁″垝璇︽儏")
+ @PostMapping("/addDeviceExaminePlanDetail")
+ public Result addDeviceExaminePlanDetail(@RequestBody DeviceExaminePlanDetails deviceExaminePlanDetail){
+ if (deviceExaminePlanDetail.getPlanId() == null) {
+ throw new ErrorException("缂哄皯璁惧鏍告煡璁″垝涓昏〃id");
+ }
+ return Result.success(deviceExaminePlanDetailsService.save(deviceExaminePlanDetail));
+ }
+
+ /**
+ * 淇敼璁惧鏍告煡璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "淇敼璁惧鏍告煡璁″垝璇︽儏")
+ @PostMapping("/updateDeviceExaminePlanDetail")
+ public Result updateDeviceExaminePlanDetail(@RequestBody DeviceExaminePlanDetails deviceExaminePlanDetail){
+ return Result.success(deviceExaminePlanDetailsService.updateById(deviceExaminePlanDetail));
+ }
+
+ /**
+ * 鍒犻櫎璁惧鏍告煡璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎璁惧鏍告煡璁″垝璇︽儏")
+ @DeleteMapping("/delDeviceExaminePlanDetail")
+ public Result delDeviceExaminePlanDetail(Integer planDetailsId){
+ return Result.success(deviceExaminePlanDetailsService.removeById(planDetailsId));
+ }
+
+ /**
+ * 瀵煎嚭璁惧鏍告煡璁″垝
+ * @param planId 璁惧鏍告煡璁″垝id
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭璁惧鏍告煡璁″垝")
+ @GetMapping("/exportDeviceExaminePlanDetail")
+ public void exportDeviceExaminePlanDetail(Integer planId, HttpServletResponse response){
+ deviceExaminePlanService.exportDeviceExaminePlanDetail(planId, response);
+ }
+
+ /*********************************************** 鎶ュ憡 **************************************************/
+
+ /**
+ * 鏌ヨ鏍告煡璁板綍
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鏍告煡璁板綍")
+ @GetMapping("/getExamineRecord")
+ public Result<DeviceExamineRecordDto> getExamineRecord(Integer planDetailsId){
+ return Result.success(deviceExamineRecordService.getExamineRecord(planDetailsId));
+ }
+
+ /**
+ * 鏂板鏍告煡璁板綍
+ * @return
+ */
+ @Operation(summary = "鏂板鏍告煡璁板綍")
+ @PostMapping("/addExamineRecord")
+ public Result addExamineRecord(@RequestBody DeviceExamineRecordDto deviceExamineRecordDto){
+ return Result.success(deviceExamineRecordService.addExamineRecord(deviceExamineRecordDto));
+ }
+
+
+ /**
+ * 澶嶆牳鏍告煡璁板綍
+ * @return
+ */
+ @Operation(summary = "澶嶆牳鏍告煡璁板綍")
+ @PostMapping("/reviewExamineRecord")
+ public Result reviewExamineRecord(@RequestBody DeviceExamineRecordDto deviceExamineRecordDto){
+ return Result.success(deviceExamineRecordService.reviewExamineRecord(deviceExamineRecordDto));
+ }
+
+ /**
+ * 瀵煎嚭澶嶆牳鏍告煡璁板綍
+ * @param planDetailsId
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭澶嶆牳鏍告煡璁板綍")
+ @GetMapping("/exportReviewExamineRecordDetail")
+ public void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response){
+ deviceExamineRecordService.exportReviewExamineRecordDetail(planDetailsId, response);
+ }
+
+ /*********************************************** 鎶ュ憡瀵规瘮 **************************************************/
+
+
+ /**
+ * 鏌ヨ鏍告煡瀵规瘮璁板綍
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鏍告煡瀵规瘮璁板綍")
+ @GetMapping("/getExamineRecordContrast")
+ public Result<DeviceExamineRecordContrastDto> getExamineRecordContrast(Integer planDetailsId){
+ return Result.success(deviceExamineRecordContrastService.getExamineRecordContrast(planDetailsId));
+ }
+
+ /**
+ * 鏂板鏍告煡瀵规瘮璁板綍
+ * @return
+ */
+ @Operation(summary = "鏂板鏍告煡瀵规瘮璁板綍")
+ @PostMapping("/addExamineRecordContrast")
+ public Result addExamineRecordContrast(@RequestBody DeviceExamineRecordContrastDto deviceExamineRecordContrastDto){
+ return Result.success(deviceExamineRecordContrastService.addExamineRecordContrast(deviceExamineRecordContrastDto));
+ }
+
+
+ /**
+ * 瀹℃牳鏍告煡瀵规瘮璁板綍
+ * @return
+ */
+ @Operation(summary = "瀹℃牳鏍告煡瀵规瘮璁板綍")
+ @PostMapping("/reviewExamineRecordContrast")
+ public Result reviewExamineRecordContrast(@RequestBody DeviceExamineRecordContrastDto deviceExamineRecordContrastDto){
+ return Result.success(deviceExamineRecordContrastService.reviewExamineRecordContrast(deviceExamineRecordContrastDto));
+ }
+
+ /**
+ * 瀵煎嚭瀹℃牳鏍告煡瀵规瘮璁板綍
+ * @param planDetailsId
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭瀹℃牳鏍告煡瀵规瘮璁板綍")
+ @GetMapping("/exportReviewExamineRecordContrast")
+ public Result exportReviewExamineRecordContrast(Integer planDetailsId, HttpServletResponse response){
+ deviceExamineRecordContrastService.exportReviewExamineRecordContrast(planDetailsId, response);
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExternalApplyController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExternalApplyController.java
new file mode 100644
index 0000000..0081ade
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExternalApplyController.java
@@ -0,0 +1,84 @@
+package com.ruoyi.device.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.device.pojo.DeviceExternalApply;
+import com.ruoyi.device.service.DeviceExternalApplyService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍒╃敤澶栭儴璁惧鐢宠琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 10:28:43
+ */
+@Tag(name = "鍒╃敤澶栭儴璁惧鐢宠琛�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceExternalApply")
+public class DeviceExternalApplyController {
+
+ private DeviceExternalApplyService deviceExternalApplyService;
+
+
+ /**
+ * 鍒╃敤澶栭儴璁惧鐢宠鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鍒╃敤澶栭儴璁惧鐢宠鍒楄〃")
+ @GetMapping("/pageDeviceExternalApply")
+ public Result<IPage<DeviceExternalApply>> pageDeviceExternalApply(Page page, DeviceExternalApply deviceExternalApply) throws Exception {
+ return Result.success(deviceExternalApplyService.pageDeviceExternalApply(page, deviceExternalApply));
+ }
+
+ /**
+ * 鏌ヨ鍒╃敤澶栭儴璁惧鐢宠
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鍒╃敤澶栭儴璁惧鐢宠")
+ @GetMapping("/getDeviceExternalApply")
+ public Result getDeviceExternalApply(Integer externalApplyId){
+ return Result.success(deviceExternalApplyService.getById(externalApplyId));
+ }
+
+ /**
+ * 鍒犻櫎鍒╃敤澶栭儴璁惧鐢宠
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎鍒╃敤澶栭儴璁惧鐢宠")
+ @DeleteMapping("/delDeviceExternalApply")
+ public Result delDeviceExternalApply(Integer externalApplyId){
+ return Result.success(deviceExternalApplyService.removeById(externalApplyId));
+ }
+
+ /**
+ * 鏂板鍒╃敤澶栭儴璁惧鐢宠
+ * @return
+ */
+ @Operation(summary = "鏂板鍒╃敤澶栭儴璁惧鐢宠")
+ @PostMapping("/addDeviceExternalApply")
+ public Result addDeviceExternalApply(@RequestBody DeviceExternalApply deviceExternalApply){
+ return Result.success(deviceExternalApplyService.addDeviceExternalApply(deviceExternalApply));
+ }
+
+ /**
+ * 瀵煎嚭鍒╃敤澶栭儴璁惧鐢宠
+ * @param externalApplyId 澶栭儴璁惧鐢宠id
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭鍒╃敤澶栭儴璁惧鐢宠")
+ @GetMapping("/exportDeviceExternalApply")
+ public Result exportDeviceExternalApply(Integer externalApplyId, HttpServletResponse response){
+ deviceExternalApplyService.exportDeviceExternalApply(externalApplyId, response);
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceImpowerController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceImpowerController.java
new file mode 100644
index 0000000..453f99d
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceImpowerController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.device.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.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.service.DeviceImpowerService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鎺堟潈琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+@Tag(name = "璁惧浣跨敤鎺堟潈琛�")
+@RestController
+@RequestMapping("/deviceImpower")
+public class DeviceImpowerController {
+
+ @Resource
+ private DeviceImpowerService deviceImpowerService;
+
+ /**
+ * 鍒嗛〉鏌ヨ浣跨敤鎺堟潈
+ * @return
+ */
+ @Operation(summary = "鍒嗛〉鏌ヨ浣跨敤鎺堟潈")
+ @GetMapping("selectDeviceImpowerByPage")
+ public Result<IPage<DeviceImpower>> selectDeviceImpowerByPage(Page page, DeviceImpowerDto itemParameter){
+ return deviceImpowerService.selectDeviceImpowerByPage(page, itemParameter);
+ }
+
+ /**
+ * 鏂板浣跨敤鎺堟潈
+ * @param deviceImpowerDto 浣跨敤鎺堟潈
+ */
+ @Operation(summary = "鏂板浣跨敤鎺堟潈")
+ @PostMapping("/addImpower")
+ public Result addImpower(@RequestBody DeviceImpowerDto deviceImpowerDto) {
+ return deviceImpowerService.addImpower(deviceImpowerDto);
+ }
+
+ /**
+ * 淇敼浣跨敤鎺堟潈
+ * @param deviceImpowerDto 浣跨敤鎺堟潈
+ */
+ @Operation(summary = "淇敼浣跨敤鎺堟潈")
+ @PostMapping("/updateImpower")
+ public Result updateImpower(@RequestBody DeviceImpowerDto deviceImpowerDto) {
+ return deviceImpowerService.updateImpower(deviceImpowerDto);
+ }
+
+ /**
+ * 鍒犻櫎浣跨敤鎺堟潈
+ * @param deviceImpowerDto 浣跨敤鎺堟潈
+ */
+ @Operation(summary = "鍒犻櫎浣跨敤鎺堟潈")
+ @DeleteMapping("/deleteImpower")
+ public Result deleteImpower(DeviceImpowerDto deviceImpowerDto) {
+ return deviceImpowerService.deleteImpower(deviceImpowerDto);
+ }
+
+ /**
+ * 鏌ヨ浣跨敤鎺堟潈璇︽儏
+ */
+ @Operation(summary = "鏌ヨ浣跨敤鎺堟潈璇︽儏")
+ @GetMapping("/getImpowerDetail")
+ public Result<DeviceImpowerDto> getImpowerDetail(Integer impowerId) {
+ return deviceImpowerService.getImpowerDetail(impowerId);
+ }
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ */
+ @Operation(summary = "鎻愪氦鎵瑰噯閫氱煡")
+ @PostMapping("/submitReviewImpowerStatus")
+ public Result submitReviewImpowerStatus(@RequestBody DeviceImpowerDto deviceImpowerDto) {
+ return deviceImpowerService.submitReviewImpowerStatus(deviceImpowerDto);
+ }
+
+ /**
+ * 浣跨敤鎺堟潈鎵瑰噯
+ */
+ @Operation(summary = "鎺堟潈鎵瑰噯")
+ @PostMapping("/reviewImpowerStatus")
+ public Result reviewImpowerStatus(@RequestBody DeviceImpowerDto deviceImpowerDto) {
+ return deviceImpowerService.reviewImpowerStatus(deviceImpowerDto);
+ }
+
+ /**
+ * 瀵煎嚭浣跨敤鎺堟潈
+ */
+ @Operation(summary = "瀵煎嚭浣跨敤鎺堟潈")
+ @GetMapping("/exportDeviceImpower")
+ public void exportDeviceImpower(@RequestParam("impowerId") Integer impowerId, HttpServletResponse response) {
+ deviceImpowerService.exportDeviceImpowerDto(impowerId, response);
+ }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java
new file mode 100644
index 0000000..2948d54
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java
@@ -0,0 +1,99 @@
+package com.ruoyi.device.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.device.dto.DeviceInspectionRecordDto;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+import com.ruoyi.device.service.DeviceInspectionRecordService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.SneakyThrows;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧鐐规璁板綍琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+@Tag(name = "璁惧鐐规璁板綍")
+@RestController
+@RequestMapping("/deviceInspectionRecord")
+public class DeviceInspectionRecordController {
+ @Resource
+ private DeviceInspectionRecordService deviceInspectionRecordService;
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+ */
+ @Operation(summary = "鍒嗛〉鏌ヨ璁惧鐐规璁板綍")
+ @GetMapping("/getDeviceInspectionRecordByPage")
+ public Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(Page page, DeviceInspectionRecordDto itemParameter) {
+ return deviceInspectionRecordService.getDeviceInspectionRecordByPage(page, itemParameter);
+ }
+
+ /**
+ * 鏌ヨ鐐规璇︽儏
+ */
+ @Operation(summary = "鏌ヨ鐐规璇︽儏")
+ @GetMapping("/getDeviceInspectionRecord")
+ public Result getDeviceInspectionRecord(Integer inspectionRecordId) {
+ return deviceInspectionRecordService.getDeviceInspectionRecord(inspectionRecordId);
+ }
+
+ /**
+ * 鏂板璁惧鐐规璁板綍
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ @Operation(summary = "鏂板璁惧鐐规璁板綍")
+ @PostMapping("/addDeviceInspectionRecord")
+ public Result addDeviceInspectionRecord(@RequestBody DeviceInspectionRecordDto deviceInspectionRecord) {
+ return deviceInspectionRecordService.addDeviceInspectionRecord(deviceInspectionRecord);
+ }
+
+ /**
+ * 淇敼璁惧鐐规璁板綍
+ */
+ @Operation(summary = "淇敼璁惧鐐规璁板綍")
+ @PostMapping("/updateDeviceInspectionRecord")
+ public Result updateDeviceInspectionRecord(@RequestBody DeviceInspectionRecordDto deviceInspectionRecord) {
+ return deviceInspectionRecordService.updateInspectionRecordAndDetails(deviceInspectionRecord);
+ }
+
+ /**
+ * 鍒犻櫎璁惧鐐规璁板綍
+ */
+ @Operation(summary = "鍒犻櫎璁惧鐐规璁板綍")
+ @DeleteMapping("/deleteDeviceInspectionRecord")
+ public Result deleteDeviceInspectionRecord(DeviceInspectionRecordDto deviceInspectionRecord) {
+ return deviceInspectionRecordService.deleteDeviceInspectionRecordOrDetails(deviceInspectionRecord);
+ }
+
+
+ /**
+ * 澶嶆牳鐐规璁板綍
+ * @return
+ */
+ @Operation(summary = "澶嶆牳鏍告煡璁板綍")
+ @PostMapping("/reviewDeviceInspectionRecord")
+ public Result reviewDeviceInspectionRecord(@RequestBody DeviceInspectionRecordDto deviceExamineRecordDto){
+ return deviceInspectionRecordService.reviewDeviceInspectionRecord(deviceExamineRecordDto);
+ }
+
+
+ /**
+ * 瀵煎嚭璁惧鐐规璁板綍
+ */
+ @Operation(summary = "瀵煎嚭璁惧鐐规璁板綍")
+ @GetMapping("/exportDeviceInspectionRecord")
+ public Result exportDeviceInspectionRecord(@RequestParam("inspectionRecordId") Integer inspectionRecordId, HttpServletResponse response) {
+ return deviceInspectionRecordService.exportDeviceInspectionRecord(inspectionRecordId, response);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java
new file mode 100644
index 0000000..7d2a469
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.device.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.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceInstructionDto;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.DeviceInstruction;
+import com.ruoyi.device.pojo.OperationInstruction;
+import com.ruoyi.device.service.DeviceInstructionService;
+import com.ruoyi.device.service.DeviceOperationInstructionService;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:29:18
+ */
+@RestController
+@RequestMapping("/deviceInstruction")
+public class DeviceInstructionController {
+
+ @Autowired
+ private DeviceInstructionService deviceInstructionService;
+
+ @Autowired
+ private DeviceOperationInstructionService deviceOperationInstructionService;
+
+
+ @Operation(summary = "浣滀笟鎸囧涔﹀垎椤�")
+ @GetMapping("/pageByPageQueryOfHomeworkInstructions")
+ public Result<IPage<DeviceOperationInstructionDto>> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto){
+ return Result.success(deviceInstructionService.pageByPageQueryOfHomeworkInstructions(page, operationInstructionDto));
+ }
+
+ @Operation(summary = "浣滀笟鎸囧涔︽柊澧�")
+ @PostMapping("/newHomeworkGuidebookAdded")
+ public Result newHomeworkGuidebookAdded(@RequestBody DeviceInstructionDto instructionDto){
+ deviceInstructionService.newHomeworkGuidebookAdded(instructionDto);
+ return Result.success();
+ }
+
+ @Operation(summary = "浣滀笟鎸囧涔﹁鎯�")
+ @GetMapping("/homeworkGuidebookEditor")
+ public Result<Map<String, Object>> homeworkGuidebookEditor(Integer instructionId){
+ DeviceInstruction instruction = deviceInstructionService.getById(instructionId);
+ List<DeviceOperationInstructionDto> list = deviceOperationInstructionService.homeworkGuidebookEditor(instructionId);
+ HashMap<String, Object> map = new HashMap<>();
+ map.put("list", list);
+ map.put("instruction", instruction);
+ return Result.success(map);
+ }
+
+ @Operation(summary = "浣滀笟鎸囧涔﹀彈鎺ф枃浠跺垹闄�")
+ @DeleteMapping("/deleteHomeworkGuidebook")
+ public Result deleteHomeworkGuidebook(String ids){
+ if (ObjectUtils.isNotEmpty(ids)) {
+ String[] idArray = ids.split(",");
+ deviceOperationInstructionService.removeBatchByIds(Arrays.asList(idArray));
+ }
+ return Result.success();
+ }
+
+ @Operation(summary = "浣滀笟鎸囧涔﹀垹闄�")
+ @DeleteMapping("/homeworkGuidebook")
+ public Result homeworkGuidebook(String id, String instructionId){
+ // 鍒犻櫎瀛愯〃鏁版嵁
+ deviceOperationInstructionService.removeById(id);
+ // 濡傛灉瀛愯〃鏁版嵁涓虹┖
+ long count = deviceOperationInstructionService.count(Wrappers.<OperationInstruction>lambdaQuery()
+ .eq(OperationInstruction::getInstructionId, instructionId));
+ // 閭d箞灏卞垹闄ょ埗琛ㄦ暟鎹�
+ if (count < 1) {
+ deviceInstructionService.removeById(id);
+ }
+ return Result.success();
+ }
+
+ @Operation(summary = "浣滀笟鎸囧涔﹀鎵�")
+ @PostMapping("/approvalOfHomeworkInstructionManual")
+ public Result approvalOfHomeworkInstructionManual(@RequestBody Map<String,Object> map){
+ Integer id =(Integer) map.get("id");
+ Boolean status =(Boolean) map.get("status");
+ deviceOperationInstructionService.update(Wrappers.<OperationInstruction>lambdaUpdate()
+ .eq(OperationInstruction::getId, id)
+ .set(OperationInstruction::getStatus, status)
+ .set(OperationInstruction::getApproverId, SecurityUtils.getUserId().intValue())
+ .set(OperationInstruction::getEntryIntoForceTime, LocalDateTime.now()));
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
new file mode 100644
index 0000000..7220c40
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -0,0 +1,81 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.pojo.DeviceMaintenance;
+import com.ruoyi.device.service.DeviceMaintenanceService;
+import com.ruoyi.system.mapper.UserMapper;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * todo: 瀛欐渤婊�
+ */
+@RestController
+@Tag(name = "璁惧缁存姢淇濆吇")
+@RequestMapping("/deviceMaintain")
+public class DeviceMaintenanceController {
+
+ @Autowired
+ private DeviceMaintenanceService deviceMaintenanceService;
+
+ @Autowired
+ private UserMapper userMapper;
+
+
+ /**
+ * 璁惧缁存姢鍒嗛〉鏌ヨ
+ * @param deviceMaintenance
+ * @return
+ */
+ @Operation(summary = "璁惧缁存姢鍒嗛〉鏌ヨ")
+ @GetMapping("/selectDeviceMaintenancePage")
+ public Result selectDeviceMaintenancePage(Page page, DeviceMaintenanceDto deviceMaintenance){
+ return Result.success(deviceMaintenanceService.selectDeviceMaintenancePage(page, deviceMaintenance));
+ }
+
+
+ /**
+ * 鏂板淇敼璁惧缁存姢淇濆吇
+ * @param deviceMaintenance
+ * @return
+ */
+ @Operation(summary = "鏂板淇敼璁惧缁存姢淇濆吇")
+ @PostMapping("/addDeviceMaintenance")
+ public Result addDeviceMaintenance(@RequestBody DeviceMaintenance deviceMaintenance){
+ if (deviceMaintenance.getDeviceId() == null) {
+ throw new RuntimeException("缂哄皯璁惧id");
+ }
+ User user = userMapper.selectById(deviceMaintenance.getMaintenanceUserId());
+ deviceMaintenance.setMaintenanceUserName(user.getName());
+
+ return Result.success(deviceMaintenanceService.saveOrUpdate(deviceMaintenance));
+ }
+
+ /**
+ * 鍒犻櫎淇敼璁惧缁存姢淇濆吇
+ * @param id
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎淇敼璁惧缁存姢淇濆吇")
+ @DeleteMapping("/deleteDeviceMaintenance")
+ public Result deleteDeviceMaintenance(Integer id){
+ return Result.success(deviceMaintenanceService.removeById(id));
+ }
+
+ /**
+ * 瀵煎嚭璁惧缁存姢淇濆吇
+ */
+ @Operation(summary = "瀵煎嚭璁惧缁存姢淇濆吇")
+ @GetMapping("/exportDeviceMaintenance")
+ public void exportDeviceMaintenance(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) {
+ deviceMaintenanceService.exportDeviceMaintenance(deviceId, response);
+ }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java
new file mode 100644
index 0000000..81be805
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.device.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.device.dto.DeviceMaintenancePlanDto;
+import com.ruoyi.device.pojo.DeviceMaintenancePlan;
+import com.ruoyi.device.service.DeviceMaintenancePlanService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.SneakyThrows;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:10:52
+ */
+@Tag(name = "璁惧淇濆吇璁″垝")
+@RestController
+@RequestMapping("/deviceMaintenancePlan")
+public class DeviceMaintenancePlanController {
+ @Resource
+ private DeviceMaintenancePlanService deviceMaintenancePlanService;
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧淇濆吇璁″垝
+ * @return
+ */
+ @Operation(summary = "鍒嗛〉鏌ヨ璁惧淇濆吇璁″垝")
+ @GetMapping("selectDeviceMaintenancePlanByPage")
+ public Result<IPage<DeviceMaintenancePlan>> selectDeviceMaintenancePlanByPage(Page page, DeviceMaintenancePlanDto itemParameter){
+ return deviceMaintenancePlanService.selectDeviceMaintenancePlanByPage(page, itemParameter);
+ }
+
+ /**
+ * 鏂板璁惧淇濆吇璁″垝
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ @Operation(summary = "鏂板璁惧淇濆吇璁″垝")
+ @PostMapping("/addMaintenancePlan")
+ public Result addMaintenancePlan(@RequestBody DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ return deviceMaintenancePlanService.addMaintenancePlan(deviceMaintenancePlanDto);
+ }
+
+ /**
+ * 淇敼璁惧淇濆吇璁″垝
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ @Operation(summary = "淇敼璁惧淇濆吇璁″垝")
+ @PostMapping("/updateMaintenancePlan")
+ public Result updateMaintenancePlan(@RequestBody DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ return deviceMaintenancePlanService.updateMaintenancePlan(deviceMaintenancePlanDto);
+ }
+
+ /**
+ * 鍒犻櫎璁惧淇濆吇璁″垝
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ @Operation(summary = "鍒犻櫎璁惧淇濆吇璁″垝")
+ @DeleteMapping("/deleteMaintenancePlan")
+ public Result deleteMaintenancePlan(DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ return deviceMaintenancePlanService.deleteMaintenancePlan(deviceMaintenancePlanDto);
+ }
+
+ /**
+ * 鏌ヨ璁惧淇濆吇璁″垝璇︽儏
+ */
+ @Operation(summary = "鏌ヨ璁惧淇濆吇璁″垝璇︽儏")
+ @GetMapping("/getMaintenancePlanDetail")
+ public Result<DeviceMaintenancePlanDto> getMaintenancePlanDetail(Integer maintenancePlanId) {
+ return deviceMaintenancePlanService.getMaintenancePlanDetail(maintenancePlanId);
+ }
+
+ /**
+ * 瀵煎嚭璁惧淇濆吇璁″垝
+ */
+ @Operation(summary = "瀵煎嚭璁惧淇濆吇璁″垝")
+ @GetMapping("/exportDeviceMaintenancePlan")
+ public Result exportDeviceMaintenancePlan(@RequestParam("maintenancePlanId") Integer maintenancePlanId, HttpServletResponse response) {
+ return deviceMaintenancePlanService.exportDeviceMaintenancePlanDto(maintenancePlanId, response);
+ }
+
+ /**
+ * 鎻愪氦瀹℃牳
+ */
+ @Operation(summary = "鎻愪氦瀹℃牳")
+ @PostMapping("/submitReviewMaintenancePlanStatus")
+ public Result submitReviewMaintenancePlanStatus(@RequestBody DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ return deviceMaintenancePlanService.submitReviewMaintenancePlanStatus(deviceMaintenancePlanDto);
+ }
+
+ /**
+ * 瀹℃牳璁惧淇濆吇璁″垝鐘舵��
+ */
+ @Operation(summary = "瀹℃牳璁惧淇濆吇璁″垝鐘舵��")
+ @PostMapping("/reviewMaintenancePlanStatus")
+ public Result reviewMaintenancePlanStatus(@RequestBody DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ return deviceMaintenancePlanService.reviewMaintenancePlanStatus(deviceMaintenancePlanDto);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricController.java
new file mode 100644
index 0000000..82dcefd
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricController.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.pojo.DeviceMetric;
+import com.ruoyi.device.service.IDeviceMetricService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/deviceMetrics")
+public class DeviceMetricController {
+
+ @Autowired
+ private IDeviceMetricService deviceMetricService;
+
+ @PostMapping("/saveOrUpdateDeviceMetric")
+ public Result create(@RequestBody DeviceMetric deviceMetric) {
+ return Result.success(deviceMetricService.saveOrUpdate(deviceMetric));
+ }
+
+ @GetMapping("/selectDeviceMetric")
+ public Result read(@RequestParam("deviceId") Integer deviceId, @RequestParam("type") String type) {
+ return Result.success(deviceMetricService.list(Wrappers.<DeviceMetric>lambdaQuery()
+ .eq(DeviceMetric::getDeviceId,deviceId)
+ .eq(DeviceMetric::getType,type)));
+ }
+
+ @DeleteMapping("/deleteDeviceMetrics")
+ public Result delete(@RequestParam("id") Integer id) {
+ return Result.success(deviceMetricService.removeById(id));
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java
new file mode 100644
index 0000000..2f52724
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java
@@ -0,0 +1,89 @@
+package com.ruoyi.device.controller;
+
+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.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.common.utils.FileSaveUtil;
+import com.ruoyi.device.dto.DeviceMetricRecordDto;
+import com.ruoyi.device.pojo.DeviceMetricRecord;
+import com.ruoyi.device.pojo.DeviceMetricsCopy;
+import com.ruoyi.device.service.DeviceMetricRecordService;
+import com.ruoyi.device.service.DeviceMetricsCopyService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:01
+ */
+@Tag(name = "璁惧 - 璁惧鏍″噯")
+@RestController
+@RequestMapping("/deviceMetricRecord")
+public class DeviceMetricRecordController {
+
+ @Autowired
+ private DeviceMetricRecordService deviceMetricRecordService;
+
+ @Autowired
+ private DeviceMetricsCopyService deviceMetricsCopyService;
+
+ @Autowired
+ private NumberGenerator<DeviceMetricRecord> numberGenerator;
+
+ @Operation(summary = "璁惧鏍″噯鍒嗛〉鏌ヨ")
+ @GetMapping("/deviceMetricRecordPage")
+ public Result deviceMetricRecordPage(@RequestParam("deviceId") Integer deviceId, Page page, @RequestParam("type") String type) {
+ return Result.success(deviceMetricRecordService.page(page, Wrappers.<DeviceMetricRecord>lambdaQuery()
+ .eq(DeviceMetricRecord::getDeviceId, deviceId)
+ .eq(DeviceMetricRecord::getType, type)));
+ }
+
+ @Operation(summary = "璁惧鏍″噯 鏂板 鏇存柊")
+ @PostMapping("/addOrUpdateDeviceMetricRecord")
+ public Result addOrUpdateDeviceMetricRecord(@RequestBody DeviceMetricRecordDto deviceMetricRecordDto) {
+ if (ObjectUtils.isEmpty(deviceMetricRecordDto.getProcessNumber())) {
+ String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
+ String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
+ String processNumber = numberGenerator.generateNumberWithPrefix(5, "SBJZ" + year + month, DeviceMetricRecord::getProcessNumber);
+ deviceMetricRecordDto.setProcessNumber(processNumber);
+ }
+ deviceMetricRecordService.saveOrUpdate(deviceMetricRecordDto);
+ if (CollectionUtils.isNotEmpty(deviceMetricRecordDto.getDeviceMetricsCopyList())) {
+ deviceMetricRecordDto.getDeviceMetricsCopyList().forEach(i -> i.setDeviceMetricsId(deviceMetricRecordDto.getId()));
+ deviceMetricsCopyService.saveOrUpdateBatch(deviceMetricRecordDto.getDeviceMetricsCopyList());
+ }
+ return Result.success();
+ }
+
+ @Operation(summary = "璁惧鏍″噯 鍒犻櫎")
+ @DeleteMapping("/deleteDeviceMetricRecord")
+ public Result deleteDeviceMetricRecord(@RequestParam("id") Integer id) {
+ DeviceMetricRecord deviceMetricRecord = deviceMetricRecordService.getById(id);
+ deviceMetricsCopyService.remove(Wrappers.<DeviceMetricsCopy>lambdaQuery()
+ .eq(DeviceMetricsCopy::getDeviceMetricsId, id));
+ // 鍒犻櫎鏂囦欢
+ FileSaveUtil.DeleteFile(deviceMetricRecord.getSystemFileName());
+ return Result.success(deviceMetricRecordService.removeById(id));
+ }
+
+ @Operation(summary = "璁惧鏍″噯 鏍″噯鏉$洰鏌ヨ")
+ @GetMapping("/showDeviceMetricsCopy")
+ public Result showDeviceMetricsCopy(@RequestParam("id") Integer id, @RequestParam("type") String type) {
+ return Result.success(deviceMetricsCopyService.list(Wrappers.<DeviceMetricsCopy>lambdaQuery()
+ .eq(DeviceMetricsCopy::getDeviceMetricsId, id)
+ .eq(DeviceMetricsCopy::getType, type)));
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceRecordController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceRecordController.java
new file mode 100644
index 0000000..cec5390
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceRecordController.java
@@ -0,0 +1,63 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.device.pojo.DeviceRecord;
+import com.ruoyi.device.service.DeviceRecordService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 11:06:47
+ */
+@Tag(name = "璁惧浣跨敤璁板綍")
+@RestController
+@RequestMapping("/deviceRecord")
+public class DeviceRecordController {
+ @Autowired
+ private DeviceRecordService deviceRecordService;
+
+ @Operation(summary = "澶囦娇鐢ㄨ褰曟煡璇�")
+ @GetMapping("/deviceRecordPage")
+ public Result deviceRecordPage(Integer deviceId, Page page, String sampleCode, String managementNumber) {
+ return Result.success(deviceRecordService.deviceRecordPage(deviceId, page, sampleCode, managementNumber));
+ }
+
+ @Operation(summary = "鏂板")
+ @PostMapping("/saveDeviceRecord")
+ public Result saveDeviceRecords(@RequestBody DeviceRecord deviceRecord) {
+ return Result.success(deviceRecordService.save(deviceRecord));
+ }
+
+ /**
+ * 缂栬緫璁惧浣跨敤璁板綍
+ * @param deviceRecord
+ * @return
+ */
+ @Operation(summary = "淇敼")
+ @PostMapping("/updateDeviceRecord")
+ public Result updateDeviceRecord(@RequestBody DeviceRecord deviceRecord) {
+ return Result.success(deviceRecordService.updateById(deviceRecord));
+ }
+
+ @DeleteMapping("/deleteDeviceRecord")
+ public Result deleteDeviceRecords(@RequestParam("id") Integer id) {
+ return Result.success(deviceRecordService.removeById(id));
+ }
+
+ @Operation(summary = "璁惧浣跨敤璁板綍瀵煎嚭")
+ @GetMapping("/exportUseRecord")
+ public void exportUseRecord(Integer deviceId, String exportDate, HttpServletResponse response){
+ deviceRecordService.exportUseRecord(deviceId, exportDate, response);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java
new file mode 100644
index 0000000..daad128
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java
@@ -0,0 +1,82 @@
+package com.ruoyi.device.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.device.pojo.DeviceScrapped;
+import com.ruoyi.device.service.DeviceScrappedService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧鎶ュ簾鐢宠琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 01:53:47
+ */
+@Tag(name = "璁惧鎶ュ簾鐢宠琛�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceScrapped")
+public class DeviceScrappedController {
+
+ private DeviceScrappedService deviceScrappedService;
+
+
+ /**
+ * 璁惧鎶ュ簾鐢宠鍒楄〃
+ * @return
+ */
+ @Operation(summary = "璁惧鎶ュ簾鐢宠鍒楄〃")
+ @GetMapping("/pageDeviceScrapped")
+ public Result<IPage<DeviceScrapped>> pageDeviceScrapped(Page page, DeviceScrapped deviceScrapped) {
+ return Result.success(deviceScrappedService.pageDeviceScrapped(page, deviceScrapped));
+ }
+
+ /**
+ * 鏌ヨ璁惧鎶ュ簾鐢宠
+ * @return
+ */
+ @Operation(summary = "鏌ヨ璁惧鎶ュ簾鐢宠")
+ @GetMapping("/getDeviceScrapped")
+ public Result getDeviceScrapped(Integer scrappedId){
+ return Result.success(deviceScrappedService.getById(scrappedId));
+ }
+
+ /**
+ * 鍒犻櫎璁惧鏍告煡璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎璁惧鎶ュ簾鐢宠")
+ @DeleteMapping("/delDeviceScrapped")
+ public Result delDeviceScrapped(Integer scrappedId){
+ return Result.success(deviceScrappedService.removeById(scrappedId));
+ }
+
+ /**
+ * 鏂板璁惧鎶ュ簾鐢宠
+ * @return
+ */
+ @Operation(summary = "鏂板璁惧鎶ュ簾鐢宠")
+ @PostMapping("/addDeviceScrapped")
+ public Result addDeviceScrapped(@RequestBody DeviceScrapped deviceScrapped){
+ return Result.success(deviceScrappedService.addDeviceScrapped(deviceScrapped));
+ }
+
+ /**
+ * 瀵煎嚭璁惧鎶ュ簾鐢宠
+ */
+ @Operation(summary = "瀵煎嚭璁惧鎶ュ簾鐢宠")
+ @GetMapping("/exportDeviceScrapped")
+ public Result exportDeviceScrapped(Integer scrappedId, HttpServletResponse response) {
+ return deviceScrappedService.exportDeviceScrapped(scrappedId, response);
+ }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceStateController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceStateController.java
new file mode 100644
index 0000000..c888fc4
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceStateController.java
@@ -0,0 +1,87 @@
+package com.ruoyi.device.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.device.dto.DeviceStateDto;
+import com.ruoyi.device.excel.DeviceStateExport;
+import com.ruoyi.device.pojo.DeviceState;
+import com.ruoyi.device.service.DeviceStateService;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * <p>
+ * 璁惧鍋滅敤/鍚敤 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-09-26 09:51:40
+ */
+@RestController
+@RequestMapping("/deviceState")
+public class DeviceStateController {
+
+ @Autowired
+ private DeviceStateService deviceStateService;
+
+ @Autowired
+ private NumberGenerator<DeviceState> numberGenerator;
+
+ @PostMapping("saveDeviceState")
+ public Result saveIncidentReportData(@RequestBody DeviceState deviceState) {
+ if (ObjectUtils.isEmpty(deviceState.getProcessNumber())) {
+ String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
+ String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
+ String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceState::getProcessNumber);
+ deviceState.setProcessNumber(processNumber);
+ }
+ deviceStateService.saveOrUpdate(deviceState);
+ return Result.success();
+ }
+
+ @GetMapping("/getDeviceStatePage")
+ public Result getDeviceStatePage(@RequestParam("deviceId") Integer deviceId, Page page, String processNumber){
+ return Result.success(deviceStateService.getDeviceStatePage(deviceId, page, processNumber));
+ }
+
+ @DeleteMapping("/deleteDeviceState")
+ public Result deleteDeviceState(@RequestParam("stateId") Integer stateId){
+ return Result.success(deviceStateService.removeById(stateId));
+ }
+
+ @GetMapping("/deviceStateExport")
+ public Result deviceStateExport(@RequestParam("deviceId") Integer deviceId, String processNumber, HttpServletResponse response) throws Exception {
+ IPage<DeviceStateDto> deviceBorrows = deviceStateService.getDeviceStatePage(deviceId, new Page<>(-1, -1), processNumber);
+ List<DeviceStateExport> studentList = JSONObject.parseArray(JSON.toJSONString(deviceBorrows.getRecords()), DeviceStateExport.class);
+ response.setHeader("requestType", "excel");
+ response.setHeader("Access-Control-Expose-Headers", "requestType");
+ // 璁剧疆鍗曞厓鏍兼牱寮�
+ // 淇濆瓨鍒扮涓�涓猻heet涓�
+ EasyExcel.write(response.getOutputStream())
+ .head(DeviceStateExport.class)
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+ .sheet("sheet")
+ .doWrite(studentList);
+ return Result.success();
+ }
+
+ @Operation(summary = "璁惧鍚姩/鍋滄瀵煎嚭")
+ @GetMapping("/exportDeviceStatus")
+ public void exportDeviceStatus(@RequestParam("processNumber") String processNumber,@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws Exception {
+ deviceStateService.exportDeviceStatus(deviceId, processNumber, response);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java
new file mode 100644
index 0000000..e334202
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java
@@ -0,0 +1,106 @@
+package com.ruoyi.device.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.device.dto.DeviceTraceabilityManagementDto;
+import com.ruoyi.device.pojo.DeviceTraceabilityManagement;
+import com.ruoyi.device.service.DeviceTraceabilityManagementService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:44
+ */
+@Tag(name = "璁惧閲忓�兼函婧愯鍒�")
+@RestController
+@RequestMapping("/deviceTraceabilityManagement")
+public class DeviceTraceabilityManagementController {
+ @Resource
+ private DeviceTraceabilityManagementService deviceTraceabilityManagementService;
+
+ /**
+ * 鍒嗛〉鏌ヨ閲忓�兼函婧愯鍒�
+ * @return
+ */
+ @Operation(summary = "鍒嗛〉鏌ヨ閲忓�兼函婧愯鍒�")
+ @GetMapping("selectDeviceTraceabilityManagementByPage")
+ public Result<IPage<DeviceTraceabilityManagement>> selectDeviceTraceabilityManagementByPage(Page page, DeviceTraceabilityManagementDto itemParameter){
+ return deviceTraceabilityManagementService.selectDeviceTraceabilityManagementByPage(page, itemParameter);
+ }
+
+ /**
+ * 鏂板閲忓�兼函婧愯鍒�
+ * @param deviceTraceabilityManagementDto 閲忓�兼函婧愯鍒�
+ */
+ @Operation(summary = "鏂板閲忓�兼函婧愯鍒�")
+ @PostMapping("/addTraceabilityManagement")
+ public Result addTraceabilityManagement(@RequestBody DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ return deviceTraceabilityManagementService.addTraceabilityManagement(deviceTraceabilityManagementDto);
+ }
+
+ /**
+ * 淇敼閲忓�兼函婧愯鍒�
+ * @param deviceTraceabilityManagementDto 閲忓�兼函婧愯鍒�
+ */
+ @Operation(summary = "淇敼閲忓�兼函婧愯鍒�")
+ @PostMapping("/updateTraceabilityManagement")
+ public Result updateTraceabilityManagement(@RequestBody DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ return deviceTraceabilityManagementService.updateTraceabilityManagement(deviceTraceabilityManagementDto);
+ }
+
+ /**
+ * 鍒犻櫎閲忓�兼函婧愯鍒�
+ * @param deviceTraceabilityManagementDto 閲忓�兼函婧愯鍒�
+ */
+ @Operation(summary = "鍒犻櫎閲忓�兼函婧愯鍒�")
+ @DeleteMapping("/deleteTraceabilityManagement")
+ public Result deleteTraceabilityManagement(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ return deviceTraceabilityManagementService.deleteTraceabilityManagement(deviceTraceabilityManagementDto);
+ }
+
+ /**
+ * 鏌ヨ閲忓�兼函婧愯鍒掕鎯�
+ */
+ @Operation(summary = "鏌ヨ閲忓�兼函婧愯鍒掕鎯�")
+ @GetMapping("/getTraceabilityManagementDetail")
+ public Result<DeviceTraceabilityManagementDto> getTraceabilityManagementDetail(Integer traceabilityManagementId) {
+ return deviceTraceabilityManagementService.getTraceabilityManagementDetail(traceabilityManagementId);
+ }
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ */
+ @Operation(summary = "鎻愪氦鎵瑰噯")
+ @PostMapping("/submitReviewTraceabilityManagementStatus")
+ public Result submitReviewTraceabilityManagementStatus(@RequestBody DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ return deviceTraceabilityManagementService.submitReviewTraceabilityManagementStatus(deviceTraceabilityManagementDto);
+ }
+
+ /**
+ * 閲忓�兼函婧愯鍒掓壒鍑�
+ */
+ @Operation(summary = "閲忓�兼函婧愯鍒掓壒鍑�")
+ @PostMapping("/reviewTraceabilityManagementStatus")
+ public Result reviewTraceabilityManagementStatus(@RequestBody DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ return deviceTraceabilityManagementService.reviewTraceabilityManagementStatus(deviceTraceabilityManagementDto);
+ }
+
+ /**
+ * 瀵煎嚭閲忓�兼函婧愯鍒�
+ */
+ @Operation(summary = "瀵煎嚭閲忓�兼函婧愯鍒�")
+ @GetMapping("/exportDeviceTraceabilityManagement")
+ public Result exportDeviceTraceabilityManagement(@RequestParam("traceabilityManagementId") Integer traceabilityManagementId, HttpServletResponse response) {
+ return deviceTraceabilityManagementService.exportDeviceTraceabilityManagementDto(traceabilityManagementId, response);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DataConfigDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DataConfigDto.java
new file mode 100644
index 0000000..d8ca336
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DataConfigDto.java
@@ -0,0 +1,39 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DataConfig;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DataConfigDto {
+
+ private List<DataConfig> dataConfigList;
+
+ private Boolean isDevice;
+
+ @Schema(description = "鏂囦欢鍚庣紑")
+ private String fileType;
+
+ @Schema(description = "閲囬泦鍦板潃")
+ private String collectUrl;
+
+ @Schema(description = "瀛樺偍鍦板潃")
+ private String storageUrl;
+
+ @Schema(description = "璁惧IP")
+ private String ip;
+
+ @Schema(description = "鏁伴噰-濮旀墭瀛楁")
+ private String entrustCode;
+
+ @Schema(description = "鏁伴噰-鏍峰搧瀛楁")
+ private String sampleCode;
+
+ @Schema(description = "鏁伴噰-db锛宮db鏂囦欢鍚嶇О")
+ private String dbFileName;
+
+ @Schema(description = "璁惧ID")
+ private Integer deviceId;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceAccidentReportDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceAccidentReportDto.java
new file mode 100644
index 0000000..fb280c7
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceAccidentReportDto.java
@@ -0,0 +1,31 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceAccidentReport;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-18 鏄熸湡涓� 10:00:48
+ * Description:
+ */
+@Data
+public class DeviceAccidentReportDto extends DeviceAccidentReport {
+ @Schema(description = "鏃堕棿")
+ private String accidentDateStr;
+
+ @Schema(description = "鎶ュ憡浜哄~鍐欐椂闂�")
+ private String reportDateStr;
+
+ @Schema(description = "璇勪及浜哄~鍐欐椂闂�")
+ private String assessorDateStr;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private String departmentHeadDateStr;
+
+ @Schema(description = "鎶�鏈礋璐d汉濉啓鏃堕棿")
+ private String technicalDirectorDateStr;
+
+ @Schema(description = "涓讳换濉啓鏃堕棿")
+ private String directorHeadDateStr;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceBreakdownMaintenance.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceBreakdownMaintenance.java
new file mode 100644
index 0000000..083d50c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceBreakdownMaintenance.java
@@ -0,0 +1,89 @@
+package com.ruoyi.device.dto;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+@Getter
+@Setter
+@TableName("device_breakdown_maintenance")
+@Schema(description = "璁惧鏁呴殰缁翠慨琛�")
+public class DeviceBreakdownMaintenance {
+
+ @TableId(value = "maintenance_id", type = IdType.AUTO)
+ private Integer maintenanceId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "瀹夎鍦板潃")
+ private String location;
+
+ @Schema(description = "鎹熷潖鎴栨晠闅滄儏鍐�")
+ private String damageOrMalfunction;
+
+ @Schema(description = "鐢宠浜篿d")
+ private Integer applicantUserId;
+
+ @Schema(description = "鐢宠浜�")
+ private String applicantUser;
+
+ @Schema(description = "瑕佹眰淇鏃堕棿")
+ private LocalDate repairDate;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜烘剰瑙�")
+ private String departmentHeadOpinion;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜篿d")
+ private Integer departmentHeadUserId;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜�")
+ private String departmentHeadUser;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private LocalDate departmentHeadDate;
+
+ @Schema(description = "缁翠慨璁颁簨")
+ private String maintenanceRecord;
+
+ @Schema(description = "缁翠慨浜�")
+ private String maintenanceUser;
+
+ @Schema(description = "缁翠慨鏃堕棿")
+ private LocalDate maintenanceDate;
+
+ @Schema(description = "鏄惁缁撴潫,0 鏈粨鏉�, 1缁撴潫")
+ private Integer isFinish;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @Schema(description = "娴佺▼, 0:鐢宠, 1鐢宠閮ㄩ棬璐熻矗浜烘剰瑙�, 2:缁翠慨璁颁簨")
+ private Integer flowType;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCalibrationPlanDetailDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCalibrationPlanDetailDto.java
new file mode 100644
index 0000000..73ef496
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCalibrationPlanDetailDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceCalibrationPlanDetail;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-17 鏄熸湡浜� 10:05:08
+ * Description:
+ */
+@Data
+public class DeviceCalibrationPlanDetailDto extends DeviceCalibrationPlanDetail {
+
+ @Schema(description = "搴忓彿")
+ private Integer index;
+ @Schema(description = "鏈�杩戞瀹氭椂闂碨tr")
+ private String lastDateStr;
+ @Schema(description = "鏈勾璁″垝鏍″噯鏃堕棿Str")
+ private String planDateStr;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCalibrationPlanDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCalibrationPlanDto.java
new file mode 100644
index 0000000..ba6c597
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCalibrationPlanDto.java
@@ -0,0 +1,31 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceCalibrationPlan;
+import com.ruoyi.device.pojo.DeviceCalibrationPlanDetail;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/16
+ */
+@Data
+public class DeviceCalibrationPlanDto extends DeviceCalibrationPlan {
+
+ @Schema(description = "缂栧埗浜�")
+ private String writeName;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private String ratifyName;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ private String writeTimeStr;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ private String ratifyTimeStr;
+
+ @Schema(description = "鏍″噯璁″垝璇︽儏")
+ private List<DeviceCalibrationPlanDetail> calibrationPlanDetailList;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCollectionDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCollectionDto.java
new file mode 100644
index 0000000..323a0f7
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCollectionDto.java
@@ -0,0 +1,28 @@
+package com.ruoyi.device.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 璁惧閲囬泦瀵硅薄
+ *
+ * @Author zhuo
+ * @Date 2024/12/3
+ */
+@Data
+public class DeviceCollectionDto {
+
+ @Schema(description = "鏍峰搧id")
+ private Integer id;
+
+ @Schema(description = "璁㈠崟缂栧彿")
+ private String entrustCode;
+
+ @Schema(description = "鏍峰搧缂栧彿")
+ private String sampleCode;
+
+ @Schema(description = "閲囬泦鐨勬楠岄」id")
+ private List<Integer> itemIds;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceConfigDtoPage.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceConfigDtoPage.java
new file mode 100644
index 0000000..889e3e6
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceConfigDtoPage.java
@@ -0,0 +1,77 @@
+package com.ruoyi.device.dto;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class DeviceConfigDtoPage{
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "鍒涘缓鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏂囦欢鍚庣紑")
+ private String fileType;
+
+ @Schema(description = "閲囬泦鍦板潃")
+ private String collectUrl;
+
+ @Schema(description = "瀛樺偍鍦板潃")
+ private String storageUrl;
+
+ @Schema(description = "IP鍦板潃")
+ private String ip;
+
+ @Schema(description = "妫�楠岄」鍒嗙被")
+ private String inspectionItemClass;
+
+ @Schema(description = "妫�楠岄」")
+ private String inspectionItem;
+
+ @Schema(description = "妫�楠岄」瀛愰」")
+ private String inspectionItemSubclass;
+
+ @Schema(description = "鍏紡")
+ private String formula;
+
+ @Schema(description = "鍙傜収X")
+ private String referx;
+
+ @Schema(description = "X")
+ private String x;
+
+ @Schema(description = "鍙傜収Y")
+ private String refery;
+
+
+ @Schema(description = "Y")
+ private String y;
+
+ @Schema(description = "鍒悕")
+ private String anotherName;
+
+ @Schema(description = "鍖归厤鍚嶇О")
+ private String matchingName;
+
+ private Integer id;
+
+ @Schema(description = "妫�楠屽璞�")
+ private String sample;
+
+ @Schema(description = "妫�楠岄」鐩甶d")
+ private Integer structureItemParameterId;
+
+ @Schema(description = "鏁伴噰-濮旀墭瀛楁")
+ private String entrustCode;
+
+ @Schema(description = "鏁伴噰-鏍峰搧瀛楁")
+ private String sampleCode;
+
+ @Schema(description = "鏁伴噰-db锛宮db鏂囦欢鍚嶇О")
+ private String dbFileName;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceDto.java
new file mode 100644
index 0000000..cbcaf97
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceDto.java
@@ -0,0 +1,43 @@
+package com.ruoyi.device.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.ruoyi.device.pojo.Device;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeviceDto extends Device {
+
+ @Schema(description = "绠$悊浜�")
+ private String equipmentManagerUser;
+
+ @Schema(description = "鎵�灞為儴闂�")
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ private String laboratoryName;
+
+ @Schema(description = "妫�楠岄」鐩�")
+ private String insProductItem;
+
+ @Schema(description = "绠$悊浜哄鍚�")
+ private String equipmentManagerName;
+
+ @Schema(description = "琚巿鏉冧汉濮撳悕")
+ private String authorizedPersonName;
+
+ @Schema(description = "鏍稿噯璇佷功缂栧彿")
+ private String calibrateNo;
+
+ @Schema(description = "鏈�杩戞牎鍑嗘棩鏈�")
+ private LocalDateTime lastCalibrationDateTwo;
+
+ @Schema(description = "涓嬫鏍″噯鏃ユ湡")
+ private LocalDateTime nextCalibrationDateTwo;
+
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDetailsDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDetailsDto.java
new file mode 100644
index 0000000..08a320c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDetailsDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-17 鏄熸湡浜� 15:34:44
+ * Description:
+ */
+@Data
+public class DeviceExaminePlanDetailsDto extends DeviceExaminePlanDetails {
+ @Schema(description = "搴忓彿")
+ private Integer index;
+
+ @Schema(description = "璁板綍鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:閫氳繃, 3:涓嶉�氳繃")
+ private Integer recordStatus;
+
+ @Schema(description = "瀵规瘮鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:閫氳繃, 3:涓嶉�氳繃")
+ private Integer recordContrastStatus;
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDto.java
new file mode 100644
index 0000000..41cd442
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDto.java
@@ -0,0 +1,33 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceExaminePlan;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/16
+ */
+@Data
+public class DeviceExaminePlanDto extends DeviceExaminePlan {
+
+ @Schema(description = "缂栧埗浜�")
+ private String writeName;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private String ratifyName;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ private String writeTimeStr;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ private String ratifyTimeStr;
+
+ @Schema(description = "骞村害")
+ private String year;
+
+ private List<DeviceExaminePlanDetails> examinePlanDetailsList;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDetailsDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDetailsDto.java
new file mode 100644
index 0000000..0f0eb22
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDetailsDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-17 鏄熸湡浜� 13:59:37
+ * Description:
+ */
+@Data
+public class DeviceExamineRecordContrastDetailsDto extends DeviceExamineRecordContrastDetails {
+ @Schema(description = "搴忓彿")
+ private Integer index;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDto.java
new file mode 100644
index 0000000..0841375
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDto.java
@@ -0,0 +1,47 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceExamineRecordContrast;
+import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/16
+ */
+@Data
+public class DeviceExamineRecordContrastDto extends DeviceExamineRecordContrast {
+
+ @Schema(description = "鏍告煡璁板綍瀵规瘮璇︽儏")
+ private List<DeviceExamineRecordContrastDetails> recordContrastDetailsList;
+
+
+ @Schema(description = "A璁惧鍚嶇О")
+ private String aDeviceName;
+
+ @Schema(description = "A璁惧缂栧彿")
+ private String aDeviceNumber;
+
+ @Schema(description = "b璁惧鍚嶇О")
+ private String bDeviceName;
+
+ @Schema(description = "b璁惧缂栧彿")
+ private String bDeviceNumber;
+
+ @Schema(description = "c璁惧鍚嶇О")
+ private String cDeviceName;
+
+ @Schema(description = "c璁惧缂栧彿")
+ private String cDeviceNumber;
+
+ @Schema(description = "鏍告煡鏃ユ湡")
+ private String checkerTimeStr;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private String reviewTimeStr;
+
+ @Schema(description = "瀹為獙瀹�")
+ private String labName;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordDto.java
new file mode 100644
index 0000000..b0e36ab
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordDto.java
@@ -0,0 +1,28 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceExamineRecord;
+import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/16
+ */
+@Data
+public class DeviceExamineRecordDto extends DeviceExamineRecord {
+
+ @Schema(description = "鏍告煡璁板綍璇︽儏")
+ private List<DeviceExamineRecordDetail> recordDetailList;
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "璁惧缂栧彿")
+ private String deviceNumber;
+
+ @Schema(description = "鏈�鍚庝竴娆′慨鏀规棩鏈�")
+ private String updateTimeStr;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExport.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExport.java
new file mode 100644
index 0000000..7e312d8
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExport.java
@@ -0,0 +1,19 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.Device;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-10 鏄熸湡浜� 15:55:29
+ * Description:
+ */
+@Data
+public class DeviceExport extends Device {
+ @Schema(description = "绠$悊浜�")
+ private String equipmentManagerName;
+
+ @Schema(description = "搴忓彿")
+ private Integer index;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDetailsDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDetailsDto.java
new file mode 100644
index 0000000..2eb09ac
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDetailsDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2025/4/17
+ */
+@Data
+public class DeviceImpowerDetailsDto extends DeviceImpowerDetails {
+
+ @Schema(description = "搴忓彿")
+ private Integer index;
+
+ @Schema(description = "浠櫒璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "浠櫒璁惧鍨嬪彿")
+ private String specificationModel;
+
+ @Schema(description = "浠櫒缂栧彿")
+ private String managementNumber;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDto.java
new file mode 100644
index 0000000..e4cc815
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDto.java
@@ -0,0 +1,24 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceImpower;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2025/4/17
+ */
+@Data
+public class DeviceImpowerDto extends DeviceImpower {
+
+ @Schema(description = "璇︽儏")
+ private List<DeviceImpowerDetailsDto> deviceImpowerDetails;
+
+ @Schema(description = "鎺堟潈鏃ユ湡涓枃")
+ private String auditDateCH;
+
+ @Schema(description = "鎺堟潈鏃ユ湡鑻辨枃")
+ private String auditDateEN;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInspectionRecordDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInspectionRecordDto.java
new file mode 100644
index 0000000..bc1ce28
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInspectionRecordDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-16 鏄熸湡涓� 17:23:22
+ * Description:
+ */
+@Data
+public class DeviceInspectionRecordDto extends DeviceInspectionRecord {
+
+ @TableField(exist = false)
+ @Schema(description = "娴嬭瘯璇︽儏鍐呭")
+ private List<DeviceInspectionRecordDetails> details;
+
+ @Schema(description = "娴嬭瘯鏃堕棿")
+ private String testDateString;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInstructionDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInstructionDto.java
new file mode 100644
index 0000000..11244b4
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInstructionDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceInstruction;
+import com.ruoyi.device.pojo.OperationInstruction;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeviceInstructionDto extends DeviceInstruction {
+
+ private List<OperationInstruction> feTempHumRecordList;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
new file mode 100644
index 0000000..162f445
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceMaintenance;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2025/4/17
+ */
+@Data
+public class DeviceMaintenanceDto extends DeviceMaintenance {
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "璁惧缂栧彿")
+ private String managementNumber;
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenancePlanDetailsDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenancePlanDetailsDto.java
new file mode 100644
index 0000000..00185c1
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenancePlanDetailsDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceMaintenancePlanDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-17 鏄熸湡浜� 9:26:48
+ * Description: 璁惧淇濆吇璁″垝璇︽儏
+ */
+@Data
+public class DeviceMaintenancePlanDetailsDto extends DeviceMaintenancePlanDetails {
+
+ @Schema(description = "搴忓彿")
+ private Integer index;
+
+ @Schema(description = "浠櫒璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "浠櫒璁惧缂栧彿")
+ private String deviceNumber;
+
+ @Schema(description = "浠櫒璁惧鍨嬪彿")
+ private String specificationModel;
+
+ @Schema(description = "浠櫒缂栧彿")
+ private String managementNumber;
+
+ @Schema(description = "褰掑睘瀹為獙瀹�")
+ private String storagePoint;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenancePlanDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenancePlanDto.java
new file mode 100644
index 0000000..9f59025
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMaintenancePlanDto.java
@@ -0,0 +1,30 @@
+package com.ruoyi.device.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.device.pojo.DeviceMaintenancePlan;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-16 鏄熸湡涓� 18:26:59
+ * Description:
+ */
+@Data
+public class DeviceMaintenancePlanDto extends DeviceMaintenancePlan {
+
+ @Schema(description = "璁惧淇濆吇璁″垝璇︽儏")
+ @TableField(exist = false)
+ private List<DeviceMaintenancePlanDetailsDto> deviceMaintenancePlanDetails;
+
+ @Schema(description = "缂栧埗鏃ユ湡")
+ private String datePreparationStr;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private String auditDateStr;
+
+ @Schema(description = "璁惧Id")
+ private Integer deviceId;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordAndMaintenanceDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordAndMaintenanceDto.java
new file mode 100644
index 0000000..9c5303f
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordAndMaintenanceDto.java
@@ -0,0 +1,38 @@
+package com.ruoyi.device.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-13 鏄熸湡浜� 10:43:06
+ * Description: 浠櫒璁惧妗f鍗′腑鏄剧ず鐨勮澶囨牎鍑嗚褰曞拰缁存姢璁板綍鐨勫垪琛ㄥ璞�
+ */
+@Data
+public class DeviceMetricRecordAndMaintenanceDto {
+ @Schema(description = "搴忓彿")
+ private Integer index;
+
+ // 鏍″噯琛ㄤ腑鐨勬暟鎹�
+ @Schema(description = "鏍″噯鏃ユ湡")
+ private String calibrationDateString;
+
+ @Schema(description = "璇佷功鏍囧彿")
+ private String certificateNumber;
+
+ @Schema(description = "鏍″噯鏈夋晥鏃ユ湡")
+ private String validityDateString;
+
+ @Schema(description = "鍒ゅ畾")
+ private String judgement;
+
+ // 缁翠慨璁板綍琛ㄤ腑鐨勬暟鎹�
+ @Schema(description = "缁翠慨鏃ユ湡")
+ private String maintenanceDateString;
+
+ @Schema(description = "澶勭悊鏂瑰紡")
+ private String handlingMethod;
+
+ @Schema(description = "澶囨敞")
+ private String comments;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java
new file mode 100644
index 0000000..bf0918c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceMetricRecord;
+import com.ruoyi.device.pojo.DeviceMetricsCopy;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeviceMetricRecordDto extends DeviceMetricRecord {
+
+ private List<DeviceMetricsCopy> deviceMetricsCopyList;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceOperationInstructionDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceOperationInstructionDto.java
new file mode 100644
index 0000000..0a69de0
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceOperationInstructionDto.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.OperationInstruction;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class DeviceOperationInstructionDto extends OperationInstruction {
+ @Schema(description = "鐢宠缂栧彿")
+ private String applicationNumber;
+
+ @Schema(description = "鐢宠閮ㄩ棬")
+ private String applicationDepartment;
+
+ @Schema(description = "璐d换浜�")
+ private String personLiable;
+
+ @Schema(description = "鍙楁帶鐢宠璇存槑")
+ private String controlledApplicationDescription;
+
+ @Schema(description = "绠$悊缂栧彿")
+ private String deviceNumber;
+
+ @Schema(description = "鍨嬪彿")
+ private String deviceModel;
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "涓婁紶浜�")
+ private String uploaderName;
+
+ @Schema(description = "瀹℃壒浜�")
+ private String approverName;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceRecordDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceRecordDto.java
new file mode 100644
index 0000000..57c90a5
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceRecordDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceRecord;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class DeviceRecordDto extends DeviceRecord {
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+ @Schema(description = "璁惧缂栧彿")
+ private String managementNumber;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceScrappedDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceScrappedDto.java
new file mode 100644
index 0000000..b3d40b0
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceScrappedDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceScrapped;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-17 鏄熸湡浜� 18:34:17
+ * Description:
+ */
+@Data
+public class DeviceScrappedDto extends DeviceScrapped {
+
+ @Schema(description = "鐢宠鏃堕棿")
+ private String applicantDateStr;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private String departmentHeadDateStr;
+
+ @Schema(description = "璁¢噺瀹や汉濉啓鏃堕棿")
+ private String meteringRoomDateStr;
+
+ @Schema(description = "鎵瑰噯浜哄~鍐欐椂闂�")
+ private String approverDateStr;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceStateDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceStateDto.java
new file mode 100644
index 0000000..a96428e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceStateDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class DeviceStateDto extends DeviceState {
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "瑙勬牸鍨嬪彿")
+ private String specificationModel;
+
+ @Schema(description = "绠$悊缂栧彿")
+ private String managementNumber;
+
+ @Schema(description = "鎿嶄綔鏃ユ湡 yyyy-MM-dd")
+ private String submitDateString;
+
+ @Schema(description = "璐熻矗浜哄鎵规棩鏈� yyyy-MM-dd")
+ private String departmentDateString;
+
+ @Schema(description = "璁¢噺瀹ゅ鎵规棩鏈� yyyy-MM-dd")
+ private String measuringRoomDateString;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡 yyyy-MM-dd")
+ private String approvalDateString;
+
+ @Schema(description = "璁惧绫诲瀷")
+ private String largeCategory;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceTraceabilityManagementDetailsDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceTraceabilityManagementDetailsDto.java
new file mode 100644
index 0000000..fa9adcc
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceTraceabilityManagementDetailsDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceTraceabilityManagementDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-20 鏄熸湡浜� 15:05:02
+ * Description:
+ */
+@Data
+public class DeviceTraceabilityManagementDetailsDto extends DeviceTraceabilityManagementDetails {
+ @Schema(description = "搴忓彿")
+ private Integer index;
+
+ @Schema(description = "浠櫒璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "浠櫒璁惧鍨嬪彿")
+ private String specificationModel;
+
+ @Schema(description = "浠櫒缂栧彿")
+ private String managementNumber;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceTraceabilityManagementDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceTraceabilityManagementDto.java
new file mode 100644
index 0000000..51b846e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceTraceabilityManagementDto.java
@@ -0,0 +1,28 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceTraceabilityManagement;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-20 鏄熸湡浜� 14:30:45
+ * Description:
+ */
+@Data
+public class DeviceTraceabilityManagementDto extends DeviceTraceabilityManagement {
+
+ @Schema(description = "璁惧閲忓�兼函婧愯鍒掕鎯�")
+ private List<DeviceTraceabilityManagementDetailsDto> deviceTraceabilityManagementDetails;
+
+ @Schema(description = "缂栧埗鏃ユ湡")
+ private String datePreparationStr;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private String auditDateStr;
+
+ @Schema(description = "璁惧Id")
+ private Integer deviceId;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DocumentExportWordDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DocumentExportWordDto.java
new file mode 100644
index 0000000..921020b
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DocumentExportWordDto.java
@@ -0,0 +1,45 @@
+package com.ruoyi.device.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-13 鏄熸湡浜� 8:45:34
+ * Description: 鐢ㄤ簬浠櫒璁惧妗f鍗$殑瀵煎嚭
+ */
+@Data
+public class DocumentExportWordDto {
+
+ // 璁惧妗f宸﹀垪琛�
+ @Schema(description = "搴忓彿")
+ private Integer index1;
+
+ @Schema(description = "妗f鍚嶇О")
+ private String name1;
+
+ @Schema(description = "浠芥暟")
+ private Integer quantity1;
+
+ @Schema(description = "椤电爜")
+ private Integer pageCount1;
+
+ @Schema(description = "褰掓。鏃ユ湡")
+ private String archiveDateString1;
+
+ // 璁惧妗f鍙冲垪琛�
+ @Schema(description = "搴忓彿")
+ private Integer index2;
+
+ @Schema(description = "妗f鍚嶇О")
+ private String name2;
+
+ @Schema(description = "浠芥暟")
+ private Integer quantity2;
+
+ @Schema(description = "椤电爜")
+ private Integer pageCount2;
+
+ @Schema(description = "褰掓。鏃ユ湡")
+ private String archiveDateString2;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceMaintenanceExport.java b/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceMaintenanceExport.java
new file mode 100644
index 0000000..d2cde7e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceMaintenanceExport.java
@@ -0,0 +1,45 @@
+package com.ruoyi.device.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+@Data
+public class DeviceMaintenanceExport {
+
+ @ColumnWidth(20)
+ @ExcelProperty("璁惧鍚嶇О")
+ private String deviceName;
+
+ @ColumnWidth(20)
+ @ExcelProperty("娴佺▼缂栧彿")
+ private String deviceNumber;
+
+ @ColumnWidth(20)
+ @ExcelProperty("绠$悊缂栧彿")
+ private String managementNumber;
+
+ @ColumnWidth(50)
+ @ExcelProperty("缁存姢鍐呭")
+ private String content;
+
+ @ColumnWidth(20)
+ @ExcelProperty("缁存姢鏃堕棿")
+ private String date;
+
+ @ColumnWidth(20)
+ @ExcelProperty("涓嬫缁存姢鏃堕棿")
+ private String nextDate;
+
+ @ColumnWidth(20)
+ @ExcelProperty("缁存姢绫诲瀷")
+ private String maintenanceType;
+
+ @ColumnWidth(20)
+ @ExcelProperty("缁存姢浜�")
+ private String name;
+
+ @ColumnWidth(50)
+ @ExcelProperty("澶囨敞")
+ private String comments;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceRecordExportWord.java b/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceRecordExportWord.java
new file mode 100644
index 0000000..db56f63
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceRecordExportWord.java
@@ -0,0 +1,28 @@
+package com.ruoyi.device.excel;
+
+import com.ruoyi.device.pojo.DeviceRecord;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-10 鏄熸湡浜� 17:19:22
+ * Description:
+ */
+@Data
+public class DeviceRecordExportWord extends DeviceRecord {
+ @Schema(description = "浣跨敤鍓�0浠h〃涓嶆甯�1浠h〃姝e父")
+ private String useBeforeString;
+
+ @Schema(description = "浣跨敤鍚�0浠h〃涓嶆甯�1浠h〃姝e父")
+ private String useAfterString;
+
+ @Schema(description = "鎿嶄綔鏃堕棿 String yyyy-MM-dd")
+ private String operationDate;
+
+ @Schema(description = "浣跨敤寮�濮嬫棩鏈� String yyyy-MM-dd \n HH:mm:ss")
+ private String useStartDateString;
+
+ @Schema(description = "浣跨敤缁撴潫鏃ユ湡 String yyyy-MM-dd \n HH:mm:ss")
+ private String useEndDateString;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceStateExport.java b/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceStateExport.java
new file mode 100644
index 0000000..f4e5592
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/excel/DeviceStateExport.java
@@ -0,0 +1,36 @@
+package com.ruoyi.device.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class DeviceStateExport {
+ @ExcelProperty(value = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @ExcelProperty(value = "瑙勬牸鍨嬪彿")
+ private String specificationModel;
+
+ @ExcelProperty(value = "绠$悊缂栧彿")
+ private String managementNumber;
+
+ @ExcelProperty("璁惧鐘舵��")
+ private String deviceStatus;
+
+ @ExcelProperty("鍋滅敤鍚敤鐞嗙敱")
+ private String reason;
+
+ @ExcelProperty("鎻愪氦浜�")
+ private String createUser;
+
+ @ExcelProperty("鎻愪氦鏃ユ湡")
+ private LocalDateTime createTime;
+
+ @ExcelProperty("褰撳墠鐘舵��")
+ private String currentState;
+
+ @ExcelProperty("褰撳墠璐熻矗浜�")
+ private String currentResponsible;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceCalibrationPlanDetailUpload.java b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceCalibrationPlanDetailUpload.java
new file mode 100644
index 0000000..b1e6f2a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceCalibrationPlanDetailUpload.java
@@ -0,0 +1,36 @@
+package com.ruoyi.device.excel.upload;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/20
+ */
+@Data
+public class DeviceCalibrationPlanDetailUpload {
+
+ @Schema(description = "璁惧鍚嶇О鍙婂瀷鍙�")
+ private String deviceName;
+
+ @Schema(description = "璁惧鏁伴噺")
+ private String deviceAmount;
+
+ @Schema(description = "浠櫒缂栧彿")
+ private String deviceNumber;
+
+ @Schema(description = "妫�瀹氬崟浣�")
+ private String verificationUnit;
+
+ @Schema(description = "妫�瀹氬懆鏈�")
+ private String verificationCycles;
+
+ @Schema(description = "鏈�杩戞瀹氭椂闂�")
+ private String lastDate;
+
+ @Schema(description = "鏈勾璁″垝鏍″噯鏃堕棿")
+ private String planDate;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceExaminePlanUpload.java b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceExaminePlanUpload.java
new file mode 100644
index 0000000..f61bd00
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceExaminePlanUpload.java
@@ -0,0 +1,37 @@
+package com.ruoyi.device.excel.upload;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/20
+ */
+@Data
+public class DeviceExaminePlanUpload {
+
+ @Schema(description = "璁惧缂栧彿")
+ private String deviceNumber;
+
+ @Schema(description = "璁″垝鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "鏍告煡鏃堕棿")
+ private String checkTime;
+
+ @Schema(description = "鏍告煡鎸囨爣")
+ private String checkIndex;
+
+ @Schema(description = "鏍告煡鏂规硶")
+ private String checkMethod;
+
+ @Schema(description = "缁撴灉濡備綍鍒ゅ畾")
+ private String howResults;
+
+ @Schema(description = "鏍告煡璐d换浜�")
+ private String checkChargerUser;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java
new file mode 100644
index 0000000..86904df
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java
@@ -0,0 +1,73 @@
+package com.ruoyi.device.excel.upload;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+@Data
+@ColumnWidth(22)
+public class DeviceImport {
+
+ @ExcelProperty("浠櫒鍚嶇О*")
+ private String deviceName;
+
+ @ExcelProperty("瑙勬牸鍨嬪彿*")
+ private String specificationModel;
+
+ @ExcelProperty("绠$悊缂栧彿*")
+ private String managementNumber;
+
+ @ExcelProperty("鏍″噯鏈夋晥鏈�*(yyyy-MM-dd)")
+ private String activationDate;
+
+ @ExcelProperty("鎵�灞為儴闂�*")
+ private String laboratoryName;
+
+ @ExcelProperty("褰撳墠鐘舵��*")
+ private String deviceStatus;
+
+ @ExcelProperty("鏍″噯鍛ㄦ湡(鏈�)*")
+ private String calibrationDate;
+
+ @ExcelProperty("鑻辨枃鍚嶇О")
+ private String enDeviceName;
+
+ @ExcelProperty("鐢熶骇鍘傚")
+ private String manufacturer;
+
+ @ExcelProperty("鍑哄巶缂栧彿")
+ private String factoryNo;
+
+ @ExcelProperty("璧勪骇缂栫爜")
+ private String assetCode;
+
+ @ExcelProperty("浜у湴")
+ private String origin;
+
+ @ExcelProperty("璐疆鏃ユ湡(yyyy-MM-dd)")
+ private String acquisitionDate;
+
+ @ExcelProperty("璐熻矗浜�")
+ private String equipmentManagerName;
+
+ @ExcelProperty("瀛樻斁鐐�")
+ private String storagePoint;
+
+ @ExcelProperty("鎶�鏈寚鏍�")
+ private String technicalIndicators;
+
+ @ExcelProperty("鏍″噯鏈嶅姟鏈烘瀯")
+ private String calibrationServices;
+
+ @ExcelProperty("鏈�杩戞牎鍑嗘棩鏈�(yyyy-MM-dd)")
+ private String lastCalibrationDate;
+
+ @ExcelProperty("涓嬫鏍″噯鏃ユ湡(yyyy-MM-dd)")
+ private String nextCalibrationDate;
+
+ @ExcelProperty("璁惧绫诲瀷")
+ private String largeCategory;
+
+ @ExcelProperty("鍗曚环(涓囧厓)")
+ private String unitPrice;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/CollectBridgeMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/CollectBridgeMapper.java
new file mode 100644
index 0000000..7392b4e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/CollectBridgeMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.CollectBridge;
+
+/**
+ * 鏁板瓧鐢垫ˉ閲囬泦
+ *
+ * @author zhuo
+ * @since 2025-02-19
+ */
+public interface CollectBridgeMapper extends BaseMapper<CollectBridge> {
+
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
new file mode 100644
index 0000000..18f5c99
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
@@ -0,0 +1,32 @@
+package com.ruoyi.device.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.device.dto.DeviceConfigDtoPage;
+import com.ruoyi.device.pojo.DataConfig;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-07-13 12:23:00
+ */
+public interface DataConfigMapper extends BaseMapper<DataConfig> {
+
+ List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId);
+
+ List<Integer> deleteDataConfig();
+
+ /**
+ * 鏌ヨ浜嗙粦瀹氫絾鏄病鏈夐厤缃殑妫�楠岄」
+ * @param deviceId
+ * @return
+ */
+ IPage<DataConfig> getNoConfigProduct(@Param("page") Page page, @Param("deviceId") Integer deviceId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java
new file mode 100644
index 0000000..e6eb335
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceAcceptanceFile;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭)闄勪欢琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:26
+ */
+public interface DeviceAcceptanceFileMapper extends BaseMapper<DeviceAcceptanceFile> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java
new file mode 100644
index 0000000..31bdb87
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.device.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.device.pojo.DeviceAcceptance;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭) Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:14
+ */
+public interface DeviceAcceptanceMapper extends BaseMapper<DeviceAcceptance> {
+
+ /**
+ * 璁惧楠屾敹鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceAcceptance> pageDeviceAcceptance(Page page, @Param("ew") QueryWrapper<DeviceAcceptance> ew);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAccidentReportMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAccidentReportMapper.java
new file mode 100644
index 0000000..25de891
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAccidentReportMapper.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.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.device.dto.DeviceAccidentReportDto;
+import com.ruoyi.device.pojo.DeviceAccidentReport;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+public interface DeviceAccidentReportMapper extends BaseMapper<DeviceAccidentReport> {
+
+ /**
+ * 璁惧浜嬫晠鎶ュ憡鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceAccidentReport> pageDeviceAccidentReport(Page page, @Param("ew") QueryWrapper<DeviceAccidentReport> ew);
+
+ /**
+ * 鏌ヨ璁惧浜嬫晠鎶ュ憡璇︽儏
+ * @param accidentReportId 璁惧浜嬫晠鎶ュ憡id
+ * @return
+ */
+ DeviceAccidentReportDto selectDeviceAccidentReportById(Integer accidentReportId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBorrowMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBorrowMapper.java
new file mode 100644
index 0000000..498e972
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBorrowMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.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.device.pojo.DeviceBorrow;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 10:53:51
+ */
+public interface DeviceBorrowMapper extends BaseMapper<DeviceBorrow> {
+
+ IPage<DeviceBorrow> deviceBorrowPage(Page page, @Param("ew")QueryWrapper<DeviceBorrow> ew);
+
+ List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBreakdownMaintenanceMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBreakdownMaintenanceMapper.java
new file mode 100644
index 0000000..78e9da2
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBreakdownMaintenanceMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.device.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.device.dto.DeviceBreakdownMaintenance;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+public interface DeviceBreakdownMaintenanceMapper extends BaseMapper<DeviceBreakdownMaintenance> {
+
+ /**
+ * 璁惧鏁呴殰缁翠慨鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceBreakdownMaintenance> pageDeviceBreakdownMaintenance(Page page, @Param("ew") QueryWrapper<DeviceBreakdownMaintenance> ew);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceCalibrationPlanDetailMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceCalibrationPlanDetailMapper.java
new file mode 100644
index 0000000..3f45575
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceCalibrationPlanDetailMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.device.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.device.pojo.DeviceCalibrationPlanDetail;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:29
+ */
+public interface DeviceCalibrationPlanDetailMapper extends BaseMapper<DeviceCalibrationPlanDetail> {
+
+ /**
+ * 璁惧鏍″噯璁″垝璇︽儏鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceCalibrationPlanDetail> pageDeviceCalibrationPlanDetail(Page page, @Param("ew") QueryWrapper<DeviceCalibrationPlanDetail> ew);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceCalibrationPlanMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceCalibrationPlanMapper.java
new file mode 100644
index 0000000..deedc46
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceCalibrationPlanMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.device.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.device.dto.DeviceCalibrationPlanDto;
+import com.ruoyi.device.pojo.DeviceCalibrationPlan;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝涓昏〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:17
+ */
+public interface DeviceCalibrationPlanMapper extends BaseMapper<DeviceCalibrationPlan> {
+
+ /**
+ * 璁惧鏍″噯璁″垝鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceCalibrationPlanDto> pageDeviceCalibrationPlan(Page page, @Param("ew") QueryWrapper<DeviceCalibrationPlan> ew);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceDocumentsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceDocumentsMapper.java
new file mode 100644
index 0000000..e786646
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceDocumentsMapper.java
@@ -0,0 +1,12 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceDocuments;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 璁惧妗f
+ */
+@Mapper
+public interface DeviceDocumentsMapper extends BaseMapper<DeviceDocuments> {
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanDetailsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanDetailsMapper.java
new file mode 100644
index 0000000..228f0ad
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanDetailsMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.device.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.device.dto.DeviceExaminePlanDetailsDto;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:16
+ */
+public interface DeviceExaminePlanDetailsMapper extends BaseMapper<DeviceExaminePlanDetails> {
+
+ /**
+ * 璁惧鏍告煡璁″垝璇︽儏鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceExaminePlanDetailsDto> pageDeviceExaminePlanDetail(Page page, @Param("ew") QueryWrapper<DeviceExaminePlanDetails> ew);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanMapper.java
new file mode 100644
index 0000000..2161630
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanMapper.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.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.device.dto.DeviceExaminePlanDto;
+import com.ruoyi.device.pojo.DeviceExaminePlan;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝涓昏〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:04
+ */
+public interface DeviceExaminePlanMapper extends BaseMapper<DeviceExaminePlan> {
+
+ /**
+ * 璁惧鏍告煡璁″垝鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceExaminePlanDto> deviceExaminePlanDetailsMapper(Page page, @Param("ew") QueryWrapper<DeviceExaminePlan> ew);
+
+ /**
+ * 鏌ヨ璁惧鏍告煡璁″垝璇︽儏
+ * @param deviceExaminePlanId 璁惧鏍告煡璁″垝id
+ * @return
+ */
+ DeviceExaminePlanDto selectExamineExaminePlanDto(@Param("deviceExaminePlanId") Integer deviceExaminePlanId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastDetailsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastDetailsMapper.java
new file mode 100644
index 0000000..07c67b8
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastDetailsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍瀵规瘮璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:57
+ */
+public interface DeviceExamineRecordContrastDetailsMapper extends BaseMapper<DeviceExamineRecordContrastDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastMapper.java
new file mode 100644
index 0000000..c20a385
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastMapper.java
@@ -0,0 +1,31 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.dto.DeviceExamineRecordContrastDto;
+import com.ruoyi.device.pojo.DeviceExamineRecordContrast;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍瀵规瘮琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:43
+ */
+public interface DeviceExamineRecordContrastMapper extends BaseMapper<DeviceExamineRecordContrast> {
+
+ /**
+ * 鏌ヨ鏍告煡瀵规瘮璁板綍
+ * @param planDetailsId
+ * @return
+ */
+ DeviceExamineRecordContrastDto getExamineRecordContrast(Integer planDetailsId);
+
+ /**
+ * 鏌ヨ瀵规瘮璁板綍鐢ㄤ簬瀵煎嚭
+ * @param planDetailsId
+ * @return
+ */
+ DeviceExamineRecordContrastDto selectExamineRecordContrastDto(@Param("planDetailsId") Integer planDetailsId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordDetailMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordDetailMapper.java
new file mode 100644
index 0000000..990c345
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordDetailMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:15:11
+ */
+public interface DeviceExamineRecordDetailMapper extends BaseMapper<DeviceExamineRecordDetail> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordMapper.java
new file mode 100644
index 0000000..145a768
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordMapper.java
@@ -0,0 +1,31 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.dto.DeviceExamineRecordDto;
+import com.ruoyi.device.pojo.DeviceExamineRecord;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:28
+ */
+public interface DeviceExamineRecordMapper extends BaseMapper<DeviceExamineRecord> {
+
+ /**
+ * 鏌ヨ璁惧鏍告煡璁板綍
+ * @param planDetailsId
+ * @return
+ */
+ DeviceExamineRecordDto getExamineRecord(Integer planDetailsId);
+
+ /**
+ * 澶嶆牳鏍告煡璁板綍
+ * @param planDetailsId 澶嶆牳鏍告煡璁板綍id
+ * @return
+ */
+ DeviceExamineRecordDto selectReviewExamineRecordDto(@Param("planDetailsId") Integer planDetailsId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExternalApplyMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExternalApplyMapper.java
new file mode 100644
index 0000000..b87c009
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExternalApplyMapper.java
@@ -0,0 +1,34 @@
+package com.ruoyi.device.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.device.pojo.DeviceExternalApply;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍒╃敤澶栭儴璁惧鐢宠琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 10:28:43
+ */
+public interface DeviceExternalApplyMapper extends BaseMapper<DeviceExternalApply> {
+
+ /**
+ * 鍒╃敤澶栭儴璁惧鐢宠鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceExternalApply> pageDeviceExternalApply(Page page, @Param("ew") QueryWrapper<DeviceExternalApply> ew);
+
+ /**
+ * 瀵煎嚭鏌ヨ鍒╃敤澶栭儴璁惧鐢宠
+ * @param externalApplyId 澶栭儴璁惧鐢宠琛╥d
+ * @return
+ */
+ DeviceExternalApply selectDeviceExternalById(@Param("externalApplyId") Integer externalApplyId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerDetailsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerDetailsMapper.java
new file mode 100644
index 0000000..200e9a9
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerDetailsMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.device.mapper;
+
+import com.ruoyi.device.dto.DeviceImpowerDetailsDto;
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:39
+ */
+public interface DeviceImpowerDetailsMapper extends BaseMapper<DeviceImpowerDetails> {
+
+ /**
+ * 鏌ヨ璁惧浣跨敤璇︽儏
+ * @param impowerId
+ * @return
+ */
+ List<DeviceImpowerDetailsDto> deviceImpowerDetailsList(@Param("impowerId") Integer impowerId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerMapper.java
new file mode 100644
index 0000000..8fb2b91
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerMapper.java
@@ -0,0 +1,36 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.dto.DeviceTraceabilityManagementDto;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+public interface DeviceImpowerMapper extends BaseMapper<DeviceImpower> {
+
+ /**
+ * 鍒嗛〉鏌ヨ浣跨敤鎺堟潈
+ * @param page
+ * @param deviceImpowerDtoQueryWrapper
+ * @return
+ */
+ IPage<DeviceImpower> selectDeviceParameterPage(@Param("page") Page page, @Param("ew") QueryWrapper<DeviceImpowerDto> deviceImpowerDtoQueryWrapper);
+
+ /**
+ * 鏍规嵁id鏌ヨ璁惧浣跨敤鎺堟潈
+ * @param traceabilityManagementId
+ * @return
+ */
+ DeviceTraceabilityManagementDto selectDeviceTraceabilityManagementById(@Param("traceabilityManagementId") Integer traceabilityManagementId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordDetailsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordDetailsMapper.java
new file mode 100644
index 0000000..66d10cd
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordDetailsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:27:32
+ */
+public interface DeviceInspectionRecordDetailsMapper extends BaseMapper<DeviceInspectionRecordDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java
new file mode 100644
index 0000000..9a05395
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.device.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.device.dto.DeviceInspectionRecordDto;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+public interface DeviceInspectionRecordMapper extends BaseMapper<DeviceInspectionRecord> {
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+ * @param page
+ * @param queryWrappers
+ * @return
+ */
+ IPage<DeviceInspectionRecord> selectDeviceParameterPage(Page page, @Param("ew") QueryWrapper<DeviceInspectionRecordDto> queryWrappers);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceLogMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceLogMapper.java
new file mode 100644
index 0000000..193b5b6
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceLogMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceLog;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DeviceLogMapper extends BaseMapper<DeviceLog> {
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
new file mode 100644
index 0000000..e538a31
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.device.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.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.pojo.DeviceMaintenance;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 璁惧缁存姢淇濆吇
+ */
+@Mapper
+public interface DeviceMaintenanceMapper extends BaseMapper<DeviceMaintenance> {
+
+ /**
+ * 璁惧缁存姢鍒嗛〉鏌ヨ
+ * @param page
+ * @return
+ */
+ IPage<DeviceMaintenanceDto> selectDeviceMaintenancePage(@Param("page") Page page, @Param("ew") QueryWrapper<DeviceMaintenanceDto> ew);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenancePlanDetailsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenancePlanDetailsMapper.java
new file mode 100644
index 0000000..86760eb
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenancePlanDetailsMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.dto.DeviceMaintenancePlanDetailsDto;
+import com.ruoyi.device.pojo.DeviceMaintenancePlanDetails;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:11:46
+ */
+public interface DeviceMaintenancePlanDetailsMapper extends BaseMapper<DeviceMaintenancePlanDetails> {
+
+ /**
+ * 鏌ヨ璁惧淇濆吇璇︽儏
+ * @param maintenancePlanId 璁惧淇濆吇璁″垝id
+ */
+ List<DeviceMaintenancePlanDetailsDto> deviceInspectionRecordDetailsList(@Param("maintenancePlanId") Integer maintenancePlanId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenancePlanMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenancePlanMapper.java
new file mode 100644
index 0000000..eb9cd0a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenancePlanMapper.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.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.device.dto.DeviceMaintenancePlanDto;
+import com.ruoyi.device.pojo.DeviceMaintenancePlan;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:10:52
+ */
+public interface DeviceMaintenancePlanMapper extends BaseMapper<DeviceMaintenancePlan> {
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧淇濆吇璁″垝
+ * @param page 褰撳墠椤�
+ * @param queryWrappers 鏌ヨ鏉′欢
+ * @return
+ */
+ IPage<DeviceMaintenancePlan> selectDeviceParameterPage(Page page, @Param("ew") QueryWrapper<DeviceMaintenancePlanDto> queryWrappers);
+
+ /**
+ * 鏍规嵁淇濆吇璁″垝id鏌ヨ璁惧淇濆吇璁″垝
+ * @param maintenancePlanId 淇濆吇璁″垝id
+ * @return
+ */
+ DeviceMaintenancePlanDto selectMaintenancePlanById(@Param("maintenancePlanId") Integer maintenancePlanId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMapper.java
new file mode 100644
index 0000000..be50081
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMapper.java
@@ -0,0 +1,46 @@
+package com.ruoyi.device.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.device.dto.DeviceDto;
+import com.ruoyi.device.pojo.Device;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璁惧(Device)琛ㄦ暟鎹簱璁块棶灞�
+ */
+public interface DeviceMapper extends BaseMapper<Device> {
+
+ IPage<Device> selectDeviceParameter(Page page, QueryWrapper<Device> ew);
+ List<Device> selectEquipmentOverview(Page page, QueryWrapper<Device> ew);
+
+ //鑾峰彇琚巿鏉冧汉
+ List<Device> authorizedPerson();
+
+ //鏌ヨ
+ List<Device> search(@Param(value = "status") Integer status, @Param(value = "deviceName") String deviceName,
+ @Param(value = "specificationModel") String specificationModel, @Param(value = "largeCategory") String largeCategory);
+
+ //鑾峰彇鍥剧墖鏁版嵁
+ void selectDeviceImage(@Param(value = "name") String name ,@Param(value = "id") Integer id);
+
+ IPage<DeviceDto> selectDeviceParameterPage(Page page, @Param("ew") QueryWrapper<DeviceDto> queryWrappers, @Param("laboratoryNameIsNull") Boolean laboratoryNameIsNull);
+
+ List<Map<String, Object>> getInspectionItemSubclass(@Param("id") Integer id);
+
+ List<Map<String, Object>> treeDevice(@Param("deviceName") String deviceName);
+
+ DeviceDto selectDeviceByCode(Integer id);
+
+ /**
+ * 鏌ヨ鍒拌揪鏍″噯鏈夋晥鏈熺殑璁惧-鎻愬墠5澶�
+ * @return
+ */
+ List<Device> selectOverdueDevice();
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricMapper.java
new file mode 100644
index 0000000..6304f16
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceMetric;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DeviceMetricMapper extends BaseMapper<DeviceMetric> {
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricRecordMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricRecordMapper.java
new file mode 100644
index 0000000..65f45dd
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricRecordMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceMetricRecord;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:01
+ */
+public interface DeviceMetricRecordMapper extends BaseMapper<DeviceMetricRecord> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java
new file mode 100644
index 0000000..f5a66ca
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceMetricsCopy;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍 - 鏍″噯鏉$洰 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:11
+ */
+public interface DeviceMetricsCopyMapper extends BaseMapper<DeviceMetricsCopy> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceRecordMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceRecordMapper.java
new file mode 100644
index 0000000..66e47cf
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceRecordMapper.java
@@ -0,0 +1,38 @@
+package com.ruoyi.device.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.device.dto.DeviceRecordDto;
+import com.ruoyi.device.pojo.DeviceRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 11:06:47
+ */
+public interface DeviceRecordMapper extends BaseMapper<DeviceRecord> {
+
+ IPage<DeviceRecordDto> deviceRecordPage(@Param("deviceId") Integer deviceId, @Param("page") Page page, @Param("sampleCode") String sampleCode, @Param("managementNumber") String managementNumber, @Param("userId") Integer userId);
+
+
+ /**
+ * 鏌ヨ鏈~鍐欑殑璁惧
+ * @return
+ */
+ List<DeviceRecordDto> selectNotFilled();
+
+ /**
+ * 鏌ヨ瀵煎嚭璁惧浣跨敤璁板綍
+ * @param deviceId
+ * @param exportDate
+ * @return
+ */
+ List<DeviceRecord> selectExportList(@Param("deviceId") Integer deviceId, @Param("exportDate") String exportDate);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceScrappedMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceScrappedMapper.java
new file mode 100644
index 0000000..bf6266f
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceScrappedMapper.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.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.device.dto.DeviceScrappedDto;
+import com.ruoyi.device.pojo.DeviceScrapped;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鎶ュ簾鐢宠琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 01:53:47
+ */
+public interface DeviceScrappedMapper extends BaseMapper<DeviceScrapped> {
+
+ /**
+ * 璁惧鎶ュ簾鐢宠鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceScrapped> pageDeviceScrapped(Page page, @Param("ew") QueryWrapper<DeviceScrapped> ew);
+
+ /**
+ * 鏍规嵁id鏌ヨ璁惧鎶ュ簾鐢宠
+ * @param scrappedId
+ * @return
+ */
+ DeviceScrappedDto selectDeviceScrappedById(@Param("scrappedId") Integer scrappedId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceStateMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceStateMapper.java
new file mode 100644
index 0000000..5f2bc41
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceStateMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.device.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.device.dto.DeviceStateDto;
+import com.ruoyi.device.pojo.DeviceState;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鍋滅敤/鍚敤 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-09-26 09:51:40
+ */
+public interface DeviceStateMapper extends BaseMapper<DeviceState> {
+
+ IPage<DeviceStateDto> getDeviceStatePage(@Param("deviceId") Integer deviceId, @Param("page") Page page, @Param("processNumber") String processNumber);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceTraceabilityManagementDetailsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceTraceabilityManagementDetailsMapper.java
new file mode 100644
index 0000000..6834f74
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceTraceabilityManagementDetailsMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.dto.DeviceTraceabilityManagementDetailsDto;
+import com.ruoyi.device.pojo.DeviceTraceabilityManagementDetails;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:58
+ */
+public interface DeviceTraceabilityManagementDetailsMapper extends BaseMapper<DeviceTraceabilityManagementDetails> {
+
+ /**
+ * 鏍规嵁婧簮璁″垝id鏌ヨ婧簮璁″垝璇︽儏
+ * @param traceabilityManagementId 婧簮璁″垝id
+ * @return 婧簮璁″垝璇︽儏
+ */
+ List<DeviceTraceabilityManagementDetailsDto> deviceTraceabilityManagementDetailsList(@Param("traceabilityManagementId") Integer traceabilityManagementId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceTraceabilityManagementMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceTraceabilityManagementMapper.java
new file mode 100644
index 0000000..12b5fbb
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceTraceabilityManagementMapper.java
@@ -0,0 +1,34 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.device.dto.DeviceTraceabilityManagementDto;
+import com.ruoyi.device.pojo.DeviceTraceabilityManagement;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:44
+ */
+public interface DeviceTraceabilityManagementMapper extends BaseMapper<DeviceTraceabilityManagement> {
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧閲忓�兼函婧愯鍒�
+ * @param page
+ * @param queryWrappers
+ * @return
+ */
+ IPage<DeviceTraceabilityManagement> selectDeviceParameterPage(IPage page, @Param("ew") QueryWrapper<DeviceTraceabilityManagementDto> ew);
+
+ /**
+ * 鏍规嵁id鏌ヨ璁惧閲忓�兼函婧愯鍒�
+ * @param traceabilityManagementId
+ * @return
+ */
+ DeviceTraceabilityManagementDto selectDeviceTraceabilityManagementById(@Param("traceabilityManagementId") Integer traceabilityManagementId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java
new file mode 100644
index 0000000..ad93c15
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.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.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.DeviceInstruction;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:29:18
+ */
+public interface InstructionMapper extends BaseMapper<DeviceInstruction> {
+
+
+ IPage<DeviceOperationInstructionDto> pageByPageQueryOfHomeworkInstructions(Page page, @Param("ew") QueryWrapper<DeviceOperationInstructionDto> ew);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/OperationInstructionMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/OperationInstructionMapper.java
new file mode 100644
index 0000000..6c6576d
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/OperationInstructionMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.OperationInstruction;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧 - 浣滀笟鎸囧涔� 娣诲姞鍙楁帶鏂囦欢 瀛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:43:32
+ */
+public interface OperationInstructionMapper extends BaseMapper<OperationInstruction> {
+
+ List<DeviceOperationInstructionDto> homeworkGuidebookEditor(Integer instructionId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/CollectBridge.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/CollectBridge.java
new file mode 100644
index 0000000..3f28a03
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/CollectBridge.java
@@ -0,0 +1,34 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鏁板瓧鐢垫ˉ閲囬泦
+ *
+ * @author zhuo
+ * @since 2025-02-19
+ */
+@Data
+@TableName("collect_bridge")
+public class CollectBridge {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "濮旀墭缂栧彿")
+ private String entrustCode;
+
+ @Schema(description = "閲囬泦鍊�")
+ private String collectValue;
+
+ @Schema(description = "鏃堕棿")
+ private LocalDateTime collectDate;
+
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java
new file mode 100644
index 0000000..ee93d20
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java
@@ -0,0 +1,82 @@
+package com.ruoyi.device.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.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-07-13 12:23:00
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("device_data_config")
+@Schema(description = "")
+public class DataConfig implements Serializable {
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鍏紡")
+ private String formula;
+
+ @Schema(description = "鍙傜収X")
+ private String referx;
+
+ @Schema(description = "鍙傜収Y")
+ private String refery;
+
+ @Schema(description = "x")
+ private String x;
+
+ @Schema(description = "y")
+ private String y;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "妫�楠岄」鍒嗙被")
+ private String inspectionItemClass;
+
+ @Schema(description = "妫�楠岄」鐩�")
+ private String inspectionItem;
+
+ @Schema(description = "妫�楠岄」瀛愰」")
+ private String inspectionItemSubclass;
+
+ @TableField(exist = false)
+ @Schema(description = "妫�楠岄」瀛愰」")
+ private String insProductItem;
+
+ @Schema(description = "妫�楠岄」id")
+ private Integer structureItemParameterId;
+
+ @Schema(description = "搴忓彿")
+ private String serialNumber;
+
+ @Schema(description = "鍒悕")
+ private String anotherName;
+
+ @Schema(description = "鍖归厤鍚嶇О")
+ private String matchingName;
+
+ @TableField(select = false, exist = false)
+ private Boolean isDevice;
+
+ @TableField(select = false, exist = false)
+ private String sample;
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
new file mode 100644
index 0000000..ef47471
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
@@ -0,0 +1,138 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 璁惧(Device)琛ㄥ璞�
+ */
+@TableName(value = "device")
+@Data
+public class Device implements Serializable {
+
+ @Schema(description = "涓婚敭")
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "en璁惧鍚嶇О")
+ private String enDeviceName;
+
+ @Schema(description = "瑙勬牸鍨嬪彿")
+ private String specificationModel;
+
+ @Schema(description = "鐢熶骇鍘傚")
+ private String manufacturer;
+
+ @Schema(description = "鍑哄巶缂栧彿")
+ private String factoryNo;
+
+ @Schema(description = "绠$悊缂栧彿")
+ private String managementNumber;
+
+ @Schema(description = "鎶�鏈寚鏍�")
+ private String technicalIndicators;
+
+ @Schema(description = "璐疆鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime acquisitionDate;
+
+ @Schema(description = "鏍″噯鏈夋晥鏃ユ湡")
+ private LocalDateTime activationDate;
+
+ @Schema(description = "绠$悊浜篒d")
+ private Integer equipmentManager;
+
+ @Schema(description = "瀛樻斁鐐�")
+ private String storagePoint;
+
+ @Schema(description = "鎵�灞為儴闂↖d")
+ private Integer subordinateDepartmentsId;
+
+ @Schema(description = "妫�楠岄」鐩甀d")
+ private String insProductIds;
+
+ @Schema(description = "鏍″噯鏈嶅姟鏈烘瀯")
+ private String calibrationServices;
+
+ @Schema(description = "鏈�杩戞牎鍑嗘棩鏈�")
+ private LocalDateTime lastCalibrationDate;
+
+ @Schema(description = "涓嬫鏍″噯鏃ユ湡")
+ private LocalDateTime nextCalibrationDate;
+
+ @Schema(description = "璁惧绫诲瀷")
+ private String largeCategory;
+
+ @Schema(description = "鍗曚环")
+ private BigDecimal unitPrice;
+
+ @Schema(description = "璁惧鐘舵��")
+ private Integer deviceStatus;
+
+ @Schema(description = "鏍″噯鍛ㄦ湡(鏈�)")
+ private String calibrationDate;
+
+ @Schema(description = "鍥剧墖涓婁紶")
+ private String imageUpload;
+
+ @Schema(description = "鍥剧墖澶囨敞")
+ private String imageName;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏁伴噰-鏂囦欢鍚庣紑")
+ private String fileType;
+
+ @Schema(description = "鏁伴噰-閲囬泦鍦板潃")
+ private String collectUrl;
+
+ @Schema(description = "鏁伴噰-瀛樺偍鍦板潃")
+ private String storageUrl;
+
+ @Schema(description = "鏁伴噰-璁惧IP")
+ private String ip;
+
+ @Schema(description = "鏁伴噰-鏄惁涓烘暟閲囪澶�")
+ @TableField(exist = false)
+ private Boolean isItADataAcquisitionDevice;
+
+ @Schema(description = "鏁伴噰-濮旀墭瀛楁")
+ private String entrustCode;
+
+ @Schema(description = "鏁伴噰-鏍峰搧瀛楁")
+ private String sampleCode;
+
+ @Schema(description = "鏁伴噰-db锛宮db鏂囦欢鍚嶇О")
+ private String dbFileName;
+
+ @Schema(description = "琚巿鏉冧汉")
+ private String authorizedPerson;
+
+ @Schema(description = "璧勪骇缂栫爜")
+ private String assetCode;
+
+ @Schema(description = "浜у湴")
+ private String origin;
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java
new file mode 100644
index 0000000..8f91e9a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java
@@ -0,0 +1,76 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭)
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:14
+ */
+@Getter
+@Setter
+@TableName("device_acceptance")
+@Schema(description = "璁惧楠屾敹(瑁呭)")
+public class DeviceAcceptance {
+
+ @TableId(value = "acceptance_id", type = IdType.AUTO)
+ private Integer acceptanceId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "鍒拌揣鏃ユ湡")
+ private LocalDate arrivalDate;
+
+ @Schema(description = "閲戦")
+ private String goldAmount;
+
+ @Schema(description = "缁翠慨鍗曚綅")
+ private String maintenanceunit;
+
+ @Schema(description = "鏀惰澶囦富鏈哄拰澶囦唤鎯呭喌")
+ private String spareParts;
+
+ @Schema(description = "瀹夎鍜岃皟璇曟儏鍐�")
+ private String installationDebugging;
+
+ @Schema(description = "楠屾敹鎯呭喌")
+ private String checkSituation;
+
+ @Schema(description = "鎺ユ敹绛惧瓧")
+ private String receivingSignature;
+
+ @Schema(description = "鍘傚浠h〃")
+ private String producer;
+
+ @Schema(description = "鎺ユ敹浜�")
+ private String recipient;
+
+ @Schema(description = "鎺ユ敹鏃堕棿")
+ private String recipientDate;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java
new file mode 100644
index 0000000..5888234
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java
@@ -0,0 +1,57 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭)闄勪欢琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:26
+ */
+@Getter
+@Setter
+@TableName("device_acceptance_file")
+@Schema(description = "璁惧楠屾敹(瑁呭)闄勪欢琛�")
+public class DeviceAcceptanceFile implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "acceptance_file_id", type = IdType.AUTO)
+ private Integer acceptanceFileId;
+
+ @Schema(description = "璁惧楠屾敹id")
+ private Integer acceptanceId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAccidentReport.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAccidentReport.java
new file mode 100644
index 0000000..be242b0
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAccidentReport.java
@@ -0,0 +1,119 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+@Getter
+@Setter
+@TableName("device_accident_report")
+@Schema(description = "璁惧浜嬫晠鎶ュ憡鍗�")
+public class DeviceAccidentReport {
+
+ @TableId(value = "accident_report_id", type = IdType.AUTO)
+ private Integer accidentReportId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "鍦板潃")
+ private String address;
+
+ @Schema(description = "鏃堕棿")
+ private LocalDateTime accidentDate;
+
+ @Schema(description = "浜嬫晠鎯呭喌鎻忚堪")
+ private String descriptionOfAccident;
+
+ @Schema(description = "鎶ュ憡浜篿d")
+ private Integer reportUserId;
+
+ @Schema(description = "鎶ュ憡浜�")
+ private String reportUser;
+
+ @Schema(description = "鎶ュ憡浜哄~鍐欐椂闂�")
+ private LocalDate reportDate;
+
+ @Schema(description = "璇勪及浜烘剰瑙�")
+ private String assessorOpinion;
+
+ @Schema(description = "璇勪及浜篿d")
+ private Integer assessorUserId;
+
+ @Schema(description = "璇勪及浜�")
+ private String assessorUser;
+
+ @Schema(description = "璇勪及浜哄~鍐欐椂闂�")
+ private LocalDate assessorDate;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜烘剰瑙�")
+ private String departmentHeadOpinion;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜篿d")
+ private Integer departmentHeadUserId;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜�")
+ private String departmentHeadUser;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private LocalDate departmentHeadDate;
+
+ @Schema(description = "鎶�鏈礋璐d汉鎰忚")
+ private String technicalDirectorOpinion;
+
+ @Schema(description = "鎶�鏈礋璐d汉id")
+ private Integer technicalDirectorUserId;
+
+ @Schema(description = "鎶�鏈礋璐d汉")
+ private String technicalDirectorUser;
+
+ @Schema(description = "鎶�鏈礋璐d汉濉啓鏃堕棿")
+ private LocalDate technicalDirectorDate;
+
+ @Schema(description = "涓讳换鎰忚")
+ private String directorHeadOpinion;
+
+ @Schema(description = "涓讳换id")
+ private Integer directorHeadUserId;
+
+ @Schema(description = "涓讳换")
+ private String directorHeadUser;
+
+ @Schema(description = "涓讳换濉啓鏃堕棿")
+ private LocalDate directorHeadDate;
+
+ @Schema(description = "鏄惁缁撴潫,0 鏈粨鏉�, 1缁撴潫")
+ private Integer isFinish;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @Schema(description = "娴佺▼, 0:鎶ュ憡, 1璇勪及, 2:閮ㄩ棬璐熻矗浜烘剰瑙�, 3:鎶�鏈礋璐d汉鎰忚, 4:涓讳换鎰忚")
+ private Integer flowType;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceBorrow.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceBorrow.java
new file mode 100644
index 0000000..ba32816
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceBorrow.java
@@ -0,0 +1,132 @@
+package com.ruoyi.device.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+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.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 10:53:51
+ */
+@Getter
+@Setter
+@TableName("device_borrow")
+@Schema(description = "璁惧鍊熺敤")
+@ExcelIgnoreUnannotated
+public class DeviceBorrow implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "娴佺▼缂栧彿")
+ @ExcelProperty(value = "娴佺▼缂栧彿")
+ private String processNumber;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "绠$悊缂栧彿")
+ @ExcelProperty(value = "绠$悊缂栧彿")
+ private String unifyNumber;
+
+ @Schema(description = "鍊熺敤浜�")
+ @ExcelProperty(value = "鍊熺敤浜�")
+ private String recipientUser;
+
+ @ExcelProperty(value = "鍊熺敤浜鸿仈绯绘柟寮�")
+ @Schema(description = "鍊熺敤浜鸿仈绯绘柟寮�")
+ private String borrowerContactInformation;
+
+ @Schema(description = "鍊熺敤鏃剁姸鎬�")
+ @ExcelProperty(value = "鍊熺敤鏃剁姸鎬�")
+ //0鍚堟牸;1缁翠慨;2鍋滅敤;3鎶ュ簾
+ private Integer recipientState;
+
+ @Schema(description = "鍊熺敤鏃ユ湡")
+ @ExcelProperty(value = "鎻愪氦鏃ユ湡")
+ private Date recipientTime;
+
+ @Schema(description = "鍊熷嚭浜�")
+ @ExcelProperty(value = "鍊熷嚭浜�")
+ private String submitUser;
+
+ @Schema(description = "鍊熷嚭鏃ユ湡")
+ @ExcelProperty(value = "鍊熷嚭鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "褰撳墠鐘舵��")
+ @ExcelProperty(value = "褰撳墠鐘舵��")
+ private String nowState;
+
+ @Schema(description = "褰撳墠璐d换浜�")
+ @ExcelProperty(value = "褰撳墠璐d换浜�")
+ private String nowUser;
+
+ @Schema(description = "闄勪欢")
+ //璺緞
+ private String url;
+
+ @Schema(description = "闄勪欢")
+ @ExcelProperty(value = "闄勪欢")
+ //鏂囦欢鍚�
+ private String fileName;
+
+ @Schema(description = "涓嬬幆鑺傝矗浠讳汉")
+ private String nextUser;
+
+ @Schema(description = "鎻愪氦鎿嶄綔浜�")
+ private String submitOperationUser;
+
+ @Schema(description = "鎻愪氦鎿嶄綔鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime submitOperationTime;
+
+ @Schema(description = "褰掕繕浜�")
+ private String rebackUser;
+
+ @Schema(description = "褰掕繕鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime rebackTime;
+
+ @Schema(description = "鎺ュ彈鐘舵��0鍚堟牸;1缁翠慨;2鍋滅敤;3鎶ュ簾")
+ private Integer receiveState;
+
+ @Schema(description = "璁惧璐d换浜�")
+ private String deviceUser;
+
+ @Schema(description = "澶囨敞")
+ private String note;
+
+ @Schema(description = "鎺ユ敹鎿嶄綔浜�")
+ private String receiveOperationUser;
+
+ @Schema(description = "鎺ユ敹鎿嶄綔鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime receiveOperationTime;
+
+ @Schema(description = "璁惧鍚嶇О")
+ @TableField(select = false, exist = false)
+ @ExcelProperty(value = "璁惧鍚嶇О")
+ private String deviceName;
+
+
+ @Schema(description = "娴佺▼璺熻釜")
+ @TableField(select = false, exist = false)
+ private List<DeviceLog> deviceLogs;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceCalibrationPlan.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceCalibrationPlan.java
new file mode 100644
index 0000000..e19f3a0
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceCalibrationPlan.java
@@ -0,0 +1,66 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝涓昏〃
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:17
+ */
+@Getter
+@Setter
+@TableName("device_calibration_plan")
+@Schema(description = "璁惧鏍″噯璁″垝涓昏〃")
+public class DeviceCalibrationPlan{
+
+ @TableId(value = "plan_id", type = IdType.AUTO)
+ private Integer planId;
+
+ @Schema(description = "璁″垝鍚嶇О")
+ private String planName;
+
+ @Schema(description = "璁″垝骞翠唤")
+ private String planYear;
+
+ @Schema(description = "缂栧埗浜�")
+ private Integer writeUserId;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ private LocalDateTime writeTime;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鎵瑰噯鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "鎵瑰噯淇℃伅")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceCalibrationPlanDetail.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceCalibrationPlanDetail.java
new file mode 100644
index 0000000..ec5e252
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceCalibrationPlanDetail.java
@@ -0,0 +1,73 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝璇︽儏琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:29
+ */
+@Getter
+@Setter
+@TableName("device_calibration_plan_detail")
+@Schema(description = "璁惧鏍″噯璁″垝璇︽儏琛�")
+public class DeviceCalibrationPlanDetail{
+
+ @TableId(value = "plan_detail_id", type = IdType.AUTO)
+ private Integer planDetailId;
+
+ @Schema(description = "璁″垝涓昏〃id")
+ private Integer planId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "璁惧鍚嶇О鍙婂瀷鍙�")
+ private String deviceName;
+
+ @Schema(description = "璁惧鏁伴噺")
+ private String deviceAmount;
+
+ @Schema(description = "浠櫒缂栧彿")
+ private String deviceNumber;
+
+ @Schema(description = "妫�瀹氬崟浣�")
+ private String verificationUnit;
+
+ @Schema(description = "妫�瀹氬懆鏈�")
+ private String verificationCycles;
+
+ @Schema(description = "鏈�杩戞瀹氭椂闂�")
+ private LocalDate lastDate;
+
+ @Schema(description = "鏈勾璁″垝鏍″噯鏃堕棿")
+ private LocalDate planDate;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceDocuments.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceDocuments.java
new file mode 100644
index 0000000..1d52a7d
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceDocuments.java
@@ -0,0 +1,94 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+/**
+ * 璁惧妗f
+ */
+@Data
+@TableName(value = "device_documents")
+public class DeviceDocuments implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 涓婚敭ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 鏂囨。绫诲瀷锛堟灇涓撅級
+ */
+ private String documentType;
+
+ /**
+ * 鍚嶇О
+ */
+ private String name;
+
+ /**
+ * 鐗堟湰鍙�
+ */
+ private String version;
+
+ /**
+ * 鏁伴噺
+ */
+ private Integer quantity;
+
+ /**
+ * 椤垫暟
+ */
+ private Integer pageCount;
+
+ /**
+ * 鎻愪緵鍟�
+ */
+ private String provider;
+
+ /**
+ * 鎻愪緵鏃ユ湡
+ */
+ private LocalDateTime provideDate;
+
+ /**
+ * 澶囨敞
+ */
+ private String comments;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime createTime;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "璧勪骇缂栧彿")
+ private String number;
+
+ @Schema(description = "鍘熷鏂囦欢鍚嶇О")
+ private String systemFileName;
+
+ @Schema(description = "绯荤粺鐢熸垚鏂囦欢鍚嶇О")
+ private String fileName;
+
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlan.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlan.java
new file mode 100644
index 0000000..28d14ee
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlan.java
@@ -0,0 +1,66 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝涓昏〃
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:04
+ */
+@Getter
+@Setter
+@TableName("device_examine_plan")
+@Schema(description = "璁惧鏍告煡璁″垝涓昏〃")
+public class DeviceExaminePlan{
+
+ @TableId(value = "plan_id", type = IdType.AUTO)
+ private Integer planId;
+
+ @Schema(description = "璁″垝鍚嶇О")
+ private String planName;
+
+ @Schema(description = "璁″垝鍚嶇О")
+ private String planYear;
+
+ @Schema(description = "缂栧埗浜�")
+ private Integer writeUserId;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ private LocalDateTime writeTime;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鎵瑰噯鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "鎵瑰噯淇℃伅")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlanDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlanDetails.java
new file mode 100644
index 0000000..bc8c1c3
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlanDetails.java
@@ -0,0 +1,75 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝璇︽儏琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:16
+ */
+@Getter
+@Setter
+@TableName("device_examine_plan_details")
+@Schema(description = "璁惧鏍告煡璁″垝璇︽儏琛�")
+public class DeviceExaminePlanDetails {
+
+ @TableId(value = "plan_details_id", type = IdType.AUTO)
+ private Integer planDetailsId;
+
+ @Schema(description = "涓昏〃id")
+ private Integer planId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "璁惧缂栧彿")
+ private String deviceNumber;
+
+ @Schema(description = "璁″垝鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "鏍告煡鏃堕棿")
+ private String checkTime;
+
+ @Schema(description = "鏍告煡鎸囨爣")
+ private String checkIndex;
+
+ @Schema(description = "鏍告煡鏂规硶")
+ private String checkMethod;
+
+ @Schema(description = "缁撴灉濡備綍鍒ゅ畾")
+ private String howResults;
+
+ @Schema(description = "鏍告煡璐d换浜篿d")
+ private Integer checkChargerUserId;
+
+ @Schema(description = "鏍告煡璐d换浜�")
+ private String checkChargerUser;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecord.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecord.java
new file mode 100644
index 0000000..ac00f28
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecord.java
@@ -0,0 +1,138 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:28
+ */
+@Getter
+@Setter
+@TableName("device_examine_record")
+@Schema(description = "璁惧鏍告煡璁板綍琛�")
+public class DeviceExamineRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "record_id", type = IdType.AUTO)
+ private Integer recordId;
+
+ @Schema(description = "璁惧鏍告煡璇︽儏id")
+ private Integer planDetailsId;
+
+ @Schema(description = "绮惧害绛夌骇")
+ private String accuracyGrade;
+
+ @Schema(description = "浣跨敤鐗╄川鍚嶇О")
+ private String materialName;
+
+ @Schema(description = "浣跨敤鐗╄川绠$悊缂栧彿")
+ private String materialNumber;
+
+ @Schema(description = "浣跨敤鐗╄川绮惧害/涓嶇‘瀹氬害")
+ private String materialAccuracyUncertainty;
+
+ @Schema(description = "浣跨敤鐗╄川瑙勬牸鍨嬪彿")
+ private String materialModel;
+
+ @Schema(description = "浣跨敤鐗╄川鏍告煡鏂瑰紡")
+ private String materialCheckMethod;
+
+ @Schema(description = "浣跨敤鐗╄川鏍告煡椤圭洰")
+ private String materialCheckItems;
+
+ @Schema(description = "娓╁害")
+ private String temperature;
+
+ @Schema(description = "婀垮害")
+ private String humidity;
+
+ @Schema(description = "鍒ゅ畾")
+ private String determine;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鏍告煡浜篿d")
+ private Integer checkerUserId;
+
+ @Schema(description = "鏍告煡浜�")
+ private String checkerUser;
+
+ @Schema(description = "澶嶆牳浜篿d")
+ private Integer reviewUserId;
+
+ @Schema(description = "澶嶆牳浜�")
+ private String reviewUser;
+
+ @Schema(description = "瀹℃牳鐘舵��0,涓嶉�氳繃, 1閫氳繃")
+ private Integer reviewStatus;
+
+ @Schema(description = "瀹℃牳澶囨敞")
+ private String reviewRemark;
+
+ @Schema(description = "娴嬭瘯鐐�1")
+ private String dataValue1;
+ @Schema(description = "娴嬭瘯鐐�2")
+ private String dataValue2;
+ @Schema(description = "娴嬭瘯鐐�3")
+ private String dataValue3;
+ @Schema(description = "娴嬭瘯鐐�4")
+ private String dataValue4;
+ @Schema(description = "娴嬭瘯鐐�5")
+ private String dataValue5;
+ @Schema(description = "娴嬭瘯鐐�6")
+ private String dataValue6;
+
+ @Schema(description = "鏈�澶у亸宸�1")
+ private String maximun1;
+ @Schema(description = "鏈�澶у亸宸�2")
+ private String maximun2;
+ @Schema(description = "鏈�澶у亸宸�3")
+ private String maximun3;
+ @Schema(description = "鏈�澶у亸宸�4")
+ private String maximun4;
+ @Schema(description = "鏈�澶у亸宸�5")
+ private String maximun5;
+ @Schema(description = "鏈�澶у亸宸�6")
+ private String maximun6;
+
+ @Schema(description = "鐩稿鍋忓樊1")
+ private String relative1;
+ @Schema(description = "鐩稿鍋忓樊2")
+ private String relative2;
+ @Schema(description = "鐩稿鍋忓樊3")
+ private String relative3;
+ @Schema(description = "鐩稿鍋忓樊4")
+ private String relative4;
+ @Schema(description = "鐩稿鍋忓樊5")
+ private String relative5;
+ @Schema(description = "鐩稿鍋忓樊6")
+ private String relative6;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrast.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrast.java
new file mode 100644
index 0000000..44809aa
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrast.java
@@ -0,0 +1,96 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍瀵规瘮琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:43
+ */
+@Getter
+@Setter
+@TableName("device_examine_record_contrast")
+@Schema(description = "璁惧鏍告煡璁板綍瀵规瘮琛�")
+public class DeviceExamineRecordContrast implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "record_contrast_id", type = IdType.AUTO)
+ private Integer recordContrastId;
+
+ @Schema(description = "鏍告煡鏂瑰紡")
+ private String checkMethod;
+
+ @Schema(description = "璁惧鏍告煡璇︽儏id")
+ private Integer planDetailsId;
+
+ @Schema(description = "璁惧idA")
+ private Integer aDeviceId;
+
+ @Schema(description = "璁惧idb")
+ private Integer bDeviceId;
+
+ @Schema(description = "璁惧idc")
+ private Integer cDeviceId;
+
+ @Schema(description = "鑼冨洿涓嶇‘瀹氬害A")
+ private String aRangeUncertainty;
+
+ @Schema(description = "鑼冨洿涓嶇‘瀹氬害b")
+ private String bRangeUncertainty;
+
+ @Schema(description = "鑼冨洿涓嶇‘瀹氬害c")
+ private String cRangeUncertainty;
+
+ @Schema(description = "缁煎悎鍒ゅ畾")
+ private String judgment;
+
+ @Schema(description = "鏍告煡浜篿d")
+ private Integer checkerUserId;
+
+ @Schema(description = "鏍告煡浜�")
+ private String checkerUser;
+
+ @Schema(description = "鏍告煡鏃ユ湡")
+ private LocalDateTime checkerTime;
+
+ @Schema(description = "瀹℃牳浜篿d")
+ private Integer reviewUserId;
+
+ @Schema(description = "瀹℃牳浜�")
+ private String reviewUser;
+
+ @Schema(description = "瀹℃牳鐘舵��0,涓嶉�氳繃, 1閫氳繃")
+ private Integer reviewStatus;
+
+ @Schema(description = "瀹℃牳澶囨敞")
+ private String reviewRemark;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private LocalDateTime reviewTime;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrastDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrastDetails.java
new file mode 100644
index 0000000..89d1b54
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrastDetails.java
@@ -0,0 +1,69 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍瀵规瘮璇︽儏琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:57
+ */
+@Getter
+@Setter
+@TableName("device_examine_record_contrast_details")
+@Schema(description = "璁惧鏍告煡璁板綍瀵规瘮璇︽儏琛�")
+public class DeviceExamineRecordContrastDetails implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "record_contrast_details_id", type = IdType.AUTO)
+ private Integer recordContrastDetailsId;
+
+ @Schema(description = "璁惧鏍告煡璇︽儏id")
+ private Integer recordContrastId;
+
+ @Schema(description = "鏍告煡椤圭洰")
+ private String checkItems;
+
+ @Schema(description = "a浠櫒绀哄��")
+ private String indicationA;
+
+ @Schema(description = "b浠櫒绀哄��")
+ private String indicationB;
+
+ @Schema(description = "c浠櫒绀哄��")
+ private String indicationC;
+
+ @Schema(description = "宸��")
+ private String dValue;
+
+ @Schema(description = "鍋忓樊")
+ private String deviation;
+
+ @Schema(description = "鍒ゅ畾")
+ private String determine;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordDetail.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordDetail.java
new file mode 100644
index 0000000..50cf912
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordDetail.java
@@ -0,0 +1,69 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍璇︽儏琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:15:11
+ */
+@Getter
+@Setter
+@TableName("device_examine_record_detail")
+@Schema(description = "璁惧鏍告煡璁板綍璇︽儏琛�")
+public class DeviceExamineRecordDetail implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "record_detail_id", type = IdType.AUTO)
+ private Integer recordDetailId;
+
+ @Schema(description = "璁捐澶囨牳鏌ヨ褰昳d")
+ private Integer recordId;
+
+ @Schema(description = "娴嬭瘯鐐�")
+ private String testPoint;
+
+ @Schema(description = "鍐呭鍊�1")
+ private String dataValue1;
+
+ @Schema(description = "鍐呭鍊�2")
+ private String dataValue2;
+
+ @Schema(description = "鍐呭鍊�3")
+ private String dataValue3;
+
+ @Schema(description = "鍐呭鍊�4")
+ private String dataValue4;
+
+ @Schema(description = "鍐呭鍊�5")
+ private String dataValue5;
+
+ @Schema(description = "鍐呭鍊�6")
+ private String dataValue6;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExternalApply.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExternalApply.java
new file mode 100644
index 0000000..2a5d1dc
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExternalApply.java
@@ -0,0 +1,122 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍒╃敤澶栭儴璁惧鐢宠琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 10:28:43
+ */
+@Getter
+@Setter
+@TableName("device_external_apply")
+@Schema(description = "鍒╃敤澶栭儴璁惧鐢宠琛�")
+public class DeviceExternalApply{
+
+ @TableId(value = "external_apply_id", type = IdType.AUTO)
+ private Integer externalApplyId;
+
+ @Schema(description = "鍗曚綅鍚嶇О")
+ private String unitName;
+
+ @Schema(description = "鍦板潃")
+ private String address;
+
+ @Schema(description = "浠櫒鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "浠櫒鍨嬪彿")
+ private String deviceModel;
+
+ @Schema(description = "閰嶄欢")
+ private String parts;
+
+ @Schema(description = "瀵规柟浠櫒缂栧彿")
+ private String instrumentNumber;
+
+ @Schema(description = "鎶�鏈寚鏍�")
+ private String technicalIndex;
+
+ @Schema(description = "鎶�鏈姹�")
+ private String technicalRequirements;
+
+ @Schema(description = "鍒╃敤鍘熷洜")
+ private String useReason;
+
+ @Schema(description = "0鐢宠浜篿d")
+ private Integer applicantUserId;
+
+ @Schema(description = "0鐢宠浜�")
+ private String applicantUser;
+
+ @Schema(description = "0鐢宠鏃堕棿")
+ private LocalDate applicantDate;
+
+ @Schema(description = "1閮ㄩ棬璐熻矗浜烘剰瑙�")
+ private String departmentHeadOpinion;
+
+ @Schema(description = "1閮ㄩ棬璐熻矗浜篿d")
+ private Integer departmentHeadUserId;
+
+ @Schema(description = "1閮ㄩ棬璐熻矗浜�")
+ private String departmentHeadUser;
+
+ @Schema(description = "1閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private LocalDate departmentHeadDate;
+
+ @Schema(description = "2璁¢噺瀹ゆ剰瑙�")
+ private String meteringRoomOpinion;
+
+ @Schema(description = "2璁¢噺瀹や汉id")
+ private Integer meteringRoomUserId;
+
+ @Schema(description = "2璁¢噺瀹や汉")
+ private String meteringRoomUser;
+
+ @Schema(description = "2璁¢噺瀹や汉濉啓鏃堕棿")
+ private LocalDate meteringRoomDate;
+
+ @Schema(description = "3鎵瑰噯浜烘剰瑙�")
+ private String approverOpinion;
+
+ @Schema(description = "3鎵瑰噯浜篿d")
+ private Integer approverUserId;
+
+ @Schema(description = "3鎵瑰噯浜�")
+ private String approverUser;
+
+ @Schema(description = "3鎵瑰噯浜哄~鍐欐椂闂�")
+ private LocalDate approverDate;
+
+ @Schema(description = "鏄惁缁撴潫,0: 鏈粨鏉�, 1:缁撴潫")
+ private Integer isFinish;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @Schema(description = "娴佺▼, 0:鐢宠, 1鐢宠閮ㄩ棬璐熻矗浜烘剰瑙�, 2:璁¢噺瀹ゆ剰瑙�, 3:鎵瑰噯浜�")
+ private Integer flowType;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpower.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpower.java
new file mode 100644
index 0000000..9c7ff24
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpower.java
@@ -0,0 +1,74 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鎺堟潈琛�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+@Getter
+@Setter
+@TableName("device_impower")
+@Schema(description = "璁惧浣跨敤鎺堟潈琛�")
+public class DeviceImpower implements Serializable {
+
+ @Schema(description = "鎺堟潈id")
+ @TableId(value = "impower_id", type = IdType.AUTO)
+ private Integer impowerId;
+
+ @Schema(description = "璁″垝骞翠唤")
+ private String impowerYear;
+
+ @Schema(description = "缂栧埗浜篿d")
+ private Integer compilerId;
+
+ @Schema(description = "缂栧埗浜�")
+ private String compiler;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ private LocalDateTime datePreparation;
+
+ @Schema(description = "瀹℃牳鐘舵�侊紝0鏈鏍革紝1瀹℃牳")
+ private Integer status;
+
+ @Schema(description = "鎺堟潈id")
+ private Integer auditId;
+
+ @Schema(description = "鎺堟潈浜�")
+ private String audit;
+
+ @Schema(description = "鎺堟潈鏃ユ湡")
+ private LocalDateTime auditDate;
+
+ @Schema(description = "鎺堟潈淇℃伅")
+ private String auditRemark;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃ユ湡")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜篿d")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpowerDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpowerDetails.java
new file mode 100644
index 0000000..b662883
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpowerDetails.java
@@ -0,0 +1,60 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:39
+ */
+@Getter
+@Setter
+@TableName("device_impower_details")
+@Schema(description = "璁惧閲忓�兼函婧愯鍒掕鎯呰〃")
+public class DeviceImpowerDetails implements Serializable {
+
+
+ @Schema(description = "璁惧閲忓�兼函婧愯鍒掕鎯卛d")
+ @TableId(value = "impower_detail_id", type = IdType.AUTO)
+ private Integer impowerDetailId;
+
+ @Schema(description = "璁惧閲忓�兼函婧愯鍒抜d")
+ private Integer impowerId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "妫�娴嬮」鐩�")
+ private String inspectionItem;
+
+ @Schema(description = "琚巿鏉冧汉")
+ private String delegatedUser;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃ユ湡")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜篿d")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecord.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecord.java
new file mode 100644
index 0000000..463403c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecord.java
@@ -0,0 +1,92 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鐐规璁板綍
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+@Getter
+@Setter
+@TableName("device_inspection_record")
+@Schema(description = "")
+public class DeviceInspectionRecord implements Serializable {
+
+ @Schema(description = "璁惧鐐规璁板綍id")
+ @TableId(value = "inspection_record_id", type = IdType.AUTO)
+ private Integer inspectionRecordId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "娴嬮噺鑼冨洿")
+ private String measurementScope;
+
+ @Schema(description = "鐐规浣跨敤鐗╄川鍚嶇О")
+ private String materialName;
+
+ @Schema(description = "鐐规浣跨敤鐗╄川瑙勬牸鍨嬪彿")
+ private String materialModel;
+
+ @Schema(description = "鐐规浣跨敤鐗╄川绠$悊缂栧彿")
+ private String materialManagementNumber;
+
+ @Schema(description = "鐐规浣跨敤鐗╄川绮惧害绛夌骇")
+ private String materialAccuracyGrade;
+
+ @Schema(description = "娓╁害")
+ private String temperature;
+
+ @Schema(description = "婀垮害")
+ private String humidity;
+
+ @Schema(description = "娴嬭瘯缁撹")
+ private String testConclusion;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鐘舵�侊紙鏄惁澶嶆牳锛�0鏈鏍革紝1澶嶆牳")
+ private Integer status;
+
+ @Schema(description = "娴嬭瘯浜�")
+ private String recorder;
+
+ @Schema(description = "娴嬭瘯浜篿d")
+ private Integer recorderId;
+
+ @Schema(description = "澶嶆牳浜�")
+ private String reviewer;
+
+ @Schema(description = "澶嶆牳浜篿d")
+ private Integer reviewerId;
+
+ @Schema(description = "澶嶆牳淇℃伅")
+ private String reviewerRemark;
+
+ @Schema(description = "娴嬭瘯鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDateTime testDate;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "淇敼浜篿d")
+ private Integer updateUserId;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecordDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecordDetails.java
new file mode 100644
index 0000000..0a9dd30
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecordDetails.java
@@ -0,0 +1,62 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:27:32
+ */
+@Getter
+@Setter
+@TableName("device_inspection_record_details")
+@Schema(description = "")
+public class DeviceInspectionRecordDetails implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "鐐规璇︽儏id")
+ @TableId(value = "inspection_record_detail_id", type = IdType.AUTO)
+ private Integer inspectionRecordDetailId;
+
+ @Schema(description = "鐐规id")
+ private Integer inspectionRecordId;
+
+ @Schema(description = "娴嬭瘯椤圭洰")
+ private String testItems;
+
+ @Schema(description = "鏍囧噯鍊�")
+ private String standardValue;
+
+ @Schema(description = "瀹炴祴鍊�")
+ private String measuredValue;
+
+ @Schema(description = "绀哄�艰宸�")
+ private String indicationError;
+
+ @Schema(description = "鍏佽璇樊")
+ private String allowableError;
+
+ @Schema(description = "鍗曢」缁撹")
+ private String singleItemConclusion;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "淇敼浜篿d")
+ private Integer updateUserId;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInstruction.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInstruction.java
new file mode 100644
index 0000000..4bf30af
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInstruction.java
@@ -0,0 +1,63 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:29:18
+ */
+@Getter
+@Setter
+@TableName("device_instruction")
+@Schema(description = "浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃")
+public class DeviceInstruction implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鐢宠缂栧彿")
+ private String applicationNumber;
+
+ @Schema(description = "鐢宠閮ㄩ棬")
+ private String applicationDepartment;
+
+ @Schema(description = "璐d换浜�")
+ private String personLiable;
+
+ @Schema(description = "鍙楁帶鐢宠璇存槑")
+ private String controlledApplicationDescription;
+
+ @Schema(description = "绯荤粺鐢熸垚鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "绯荤粺鐢熸垚鍚嶇О")
+ private String fileSystemName;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceLog.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceLog.java
new file mode 100644
index 0000000..5141c82
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceLog.java
@@ -0,0 +1,29 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("device_log") // 璁板綍
+public class DeviceLog implements Serializable {
+
+ @TableId(type= IdType.AUTO)
+ private Integer id;
+ private String operator;
+// @JsonFormat()
+ private LocalDateTime operationTime;
+ private String operationType;
+ private String operationContent;
+ private Integer deviceId;
+
+ //鍏宠仈鐨勮〃鍚�
+ private String relevanceForm;
+
+ //鍏宠仈鐨刬d
+ private Integer relevanceId;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
new file mode 100644
index 0000000..014f88f
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -0,0 +1,65 @@
+package com.ruoyi.device.pojo;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.deepoove.poi.data.PictureRenderData;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 璁惧缁存姢娣诲姞缁存姢璁板綍琛�
+ *
+ * @author makejava
+ * @since 2025-04-17 11:28:56
+ */
+@Data
+@TableName("device_maintenance")
+public class DeviceMaintenance {
+
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "缁存姢鏃ユ湡")
+ private LocalDate maintenanceDate;
+
+ @Schema(description = "缁存姢鍐呭")
+ private String maintenanceContent;
+
+ @Schema(description = "缁存姢浜篿d")
+ private Integer maintenanceUserId;
+
+ @Schema(description = "缁存姢浜�")
+ private String maintenanceUserName;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鍒涘缓鏃ユ湡")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鏇存柊浜篿d")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @TableField(select = false, exist = false)
+ @Schema(description = "缁存姢浜哄浘鐗�")
+ private PictureRenderData maintenanceUserUrlRender;
+
+
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlan.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlan.java
new file mode 100644
index 0000000..8bb3b65
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlan.java
@@ -0,0 +1,74 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:10:52
+ */
+@Getter
+@Setter
+@TableName("device_maintenance_plan")
+@Schema(description = "璁惧淇濆吇璁″垝琛�")
+public class DeviceMaintenancePlan implements Serializable {
+
+ @Schema(description = "璁惧淇濆吇璁″垝id")
+ @TableId(value = "maintenance_plan_id", type = IdType.AUTO)
+ private Integer maintenancePlanId;
+
+ @Schema(description = "缂栧埗浜�")
+ private String compiler;
+
+ @Schema(description = "璁″垝鍚嶇О")
+ private String planName;
+
+ @Schema(description = "璁″垝骞翠唤")
+ private String planYear;
+
+ @Schema(description = "缂栧埗浜篿d")
+ private Integer compilerId;
+
+ @Schema(description = "缂栧埗鏃ユ湡")
+ private LocalDateTime datePreparation;
+
+ @Schema(description = "瀹℃牳鐘舵�侊紝0鏈鏍革紝1瀹℃牳")
+ private Integer status;
+
+ @Schema(description = "瀹℃牳浜篿d")
+ private Integer auditId;
+
+ @Schema(description = "瀹℃牳浜�")
+ private String audit;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private LocalDateTime auditDate;
+
+ @Schema(description = "瀹℃牳淇℃伅")
+ private String auditRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlanDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlanDetails.java
new file mode 100644
index 0000000..13c541e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlanDetails.java
@@ -0,0 +1,61 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝璇︽儏琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:11:46
+ */
+@Getter
+@Setter
+@TableName("device_maintenance_plan_details")
+@Schema(description = "璁惧淇濆吇璁″垝璇︽儏琛�")
+public class DeviceMaintenancePlanDetails implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "淇濆吇璁″垝璇︽儏id")
+ @TableId(value = "maintenance_plan_detail_id", type = IdType.AUTO)
+ private Integer maintenancePlanDetailId;
+
+ @Schema(description = "淇濆吇璁″垝id")
+ private Integer maintenancePlanId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "淇濆吇鍏抽敭閮ㄤ綅")
+ private String maintenanceSite;
+
+ @Schema(description = "淇濆吇鍐呭")
+ private String maintenanceContent;
+
+ @Schema(description = "淇濆吇鍛ㄦ湡")
+ private String maintenanceIntervals;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetric.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetric.java
new file mode 100644
index 0000000..966309a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetric.java
@@ -0,0 +1,29 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("device_metrics")
+public class DeviceMetric implements Serializable {
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id; //id
+ private Integer deviceId; // 璁惧ID
+ private String measurementParameter; // 璁¢噺鍙傛暟
+ private String rangeOfMeasurement; // 閲忕▼鑼冨洿
+ private String maxPermissibleError; // 鏈�澶у厑璁歌宸�
+ private String judgmentCriteria; // 鍒ゅ畾鏍囧噯
+ private String createdBy; // 鍒涘缓浜�
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime creationTime; // 鍒涘缓鏃堕棿
+
+ @Schema(description = "calibrate锛氭牎鍑嗭紱examine锛氭牳鏌�")
+ private String type; // 绫诲瀷
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricRecord.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricRecord.java
new file mode 100644
index 0000000..ed9e10c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricRecord.java
@@ -0,0 +1,88 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:01
+ */
+@Getter
+@Setter
+@TableName("device_metric_record")
+@Schema(description = "璁惧鏍″噯 - 鏍″噯璁板綍")
+public class DeviceMetricRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "璁板綍缂栧彿")
+ private String processNumber;
+
+ @Schema(description = "璁¢噺鍗曚綅")
+ private String unitOfMeasure;
+
+ @Schema(description = "鏍″噯鏃ユ湡")
+ private Date calibrationDate;
+
+ @Schema(description = "涓嬫鏍″噯鏃ユ湡")
+ private Date nextCalibrationDate;
+
+ @Schema(description = "璁$畻鍣ㄥ叿")
+ private String calculatingApparatus;
+
+ @Schema(description = "璁$畻鏍囧噯閲忕▼")
+ private String standardRange;
+
+ @Schema(description = "璁¢噺鏍囧噯涓嶇‘瀹氬害")
+ private String calibrationStandardUncertainty;
+
+ @Schema(description = "渚濇嵁鏂囦欢")
+ private String byDocument;
+
+ @Schema(description = "璇佷功缂栧彿")
+ private String certificateSerialNumber;
+
+ @Schema(description = "鐘舵��")
+ private String status;
+
+ @Schema(description = "鍘熸枃浠跺悕绉�")
+ private String fileName;
+
+ @Schema(description = "绯荤粺鐢熸垚鏂囦欢鍚嶇О")
+ private String systemFileName;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "鍒涘缓鏃堕棿 / 鐧昏鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鐧昏浜�")
+ private String createUser;
+
+ @Schema(description = "calibrate锛氭牎鍑嗭紱examine锛氭牳鏌�")
+ private String type;
+
+ @Schema(description = "纭鏃堕棿")
+ private Date confirmDate;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java
new file mode 100644
index 0000000..0c90818
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java
@@ -0,0 +1,65 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍 - 鏍″噯鏉$洰
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:11
+ */
+@Getter
+@Setter
+@TableName("device_metrics_copy")
+@Schema(description = "璁惧鏍″噯 - 鏍″噯璁板綍 - 鏍″噯鏉$洰")
+public class DeviceMetricsCopy implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "璁惧鏍″噯 - 鏍″噯璁板綍id")
+ private Integer deviceMetricsId;
+
+ @Schema(description = "璁¢噺鍙傛暟")
+ private String measurementParameter;
+
+ @Schema(description = "閲忕▼鑼冨洿")
+ private String rangeOfMeasurement;
+
+ @Schema(description = "鏈�澶у厑璁歌宸�")
+ private String maxPermissibleError;
+
+ @Schema(description = "鍒ゅ畾鏍囧噯")
+ private String judgmentCriteria;
+
+ @Schema(description = "鍒涘缓浜�")
+ private String createdBy;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ private LocalDateTime creationTime;
+
+ @Schema(description = "鏄惁鏍″噯")
+ private String isCalibration;
+
+ @Schema(description = "鍒ゅ畾缁撴灉")
+ private String result;
+
+ @Schema(description = "鍗曢」缁撴灉璇存槑")
+ private String singleResultStatement;
+
+ @Schema(description = "calibrate锛氭牎鍑嗭紱examine锛氭牳鏌�")
+ private String type;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceRecord.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceRecord.java
new file mode 100644
index 0000000..72d568e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceRecord.java
@@ -0,0 +1,69 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 11:06:47
+ */
+@Getter
+@Setter
+@TableName("device_record")
+@Schema(description = "cnas璁惧浣跨敤璁板綍琛�")
+public class DeviceRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ private Integer deviceId;
+
+ @Schema(description = "璁㈠崟id")
+ private Integer insOrderId;
+
+ @Schema(description = "鏍峰搧缂栧彿")
+ private String sampleCode;
+
+ @Schema(description = "娓╁害")
+ private String temperature;
+
+ @Schema(description = "婀垮害")
+ private String humidity;
+
+ @Schema(description = "浣跨敤鍓�0寮傚父1鑹ソ")
+ private Integer useBefore;
+
+ @Schema(description = "浣跨敤鍚�0寮傚父1鑹ソ")
+ private Integer useAfter;
+
+ @Schema(description = "寮傚父鎯呭喌")
+ private String abnormal;
+
+ @Schema(description = "浣跨敤浜篿d")
+ private Integer usePersonId;
+
+ @Schema(description = "浣跨敤浜�")
+ private String usePerson;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "浣跨敤寮�濮嬫棩鏈�")
+ private LocalDateTime useStartDate;
+
+ @Schema(description = "浣跨敤缁撴潫鏃ユ湡")
+ private LocalDateTime useEndDate;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceScrapped.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceScrapped.java
new file mode 100644
index 0000000..2d08048
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceScrapped.java
@@ -0,0 +1,104 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鎶ュ簾鐢宠琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 01:53:47
+ */
+@Getter
+@Setter
+@TableName("device_scrapped")
+@Schema(description = "璁惧鎶ュ簾鐢宠琛�")
+public class DeviceScrapped {
+
+ @TableId(value = "scrapped_id", type = IdType.AUTO)
+ private Integer scrappedId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "閰嶄欢")
+ private String parts;
+
+ @Schema(description = "鎶ュ簾鐞嗙敱")
+ private String reasonsForScrap;
+
+ @Schema(description = "鐢宠浜篿d")
+ private Integer applicantUserId;
+
+ @Schema(description = "鐢宠浜�")
+ private String applicantUser;
+
+ @Schema(description = "鐢宠鏃堕棿")
+ private LocalDate applicantDate;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜烘剰瑙�")
+ private String departmentHeadOpinion;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜篿d")
+ private Integer departmentHeadUserId;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜�")
+ private String departmentHeadUser;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private LocalDate departmentHeadDate;
+
+ @Schema(description = "璁¢噺瀹ゆ剰瑙�")
+ private String meteringRoomOpinion;
+
+ @Schema(description = "璁¢噺瀹や汉id")
+ private Integer meteringRoomUserId;
+
+ @Schema(description = "璁¢噺瀹や汉")
+ private String meteringRoomUser;
+
+ @Schema(description = "璁¢噺瀹や汉濉啓鏃堕棿")
+ private LocalDate meteringRoomDate;
+
+ @Schema(description = "鎵瑰噯浜烘剰瑙�")
+ private String approverOpinion;
+
+ @Schema(description = "鎵瑰噯浜篿d")
+ private Integer approverUserId;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private String approverUser;
+
+ @Schema(description = "鎵瑰噯浜哄~鍐欐椂闂�")
+ private LocalDate approverDate;
+
+ @Schema(description = "鏄惁缁撴潫,0: 鏈粨鏉�, 1:缁撴潫")
+ private Integer isFinish;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @Schema(description = "娴佺▼, 0:鎶ュ簾鐢宠, 1鐢宠閮ㄩ棬璐熻矗浜烘剰瑙�, 2:璁¢噺瀹ゆ剰瑙�, 3:鎵瑰噯浜�")
+ private Integer flowType;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceState.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceState.java
new file mode 100644
index 0000000..c4e00c2
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceState.java
@@ -0,0 +1,106 @@
+package com.ruoyi.device.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鍋滅敤/鍚敤
+ * </p>
+ *
+ * @author
+ * @since 2024-09-26 09:51:40
+ */
+@Getter
+@Setter
+@TableName("device_state")
+@Schema(description = "璁惧鍋滅敤/鍚敤")
+public class DeviceState implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "璁惧鍋滅敤鍚敤id")
+ @TableId(value = "state_id", type = IdType.AUTO)
+ private Integer stateId;
+
+ @Schema(description = "娴佺▼缂栧彿")
+ private String processNumber;
+
+ @Schema(description = "0閰嶄欢")
+ private String accessoryPart;
+
+ @Schema(description = "0璁惧鐘舵��")
+ private String deviceStatus;
+
+ @Schema(description = "0鍋滅敤鍚敤鐞嗙敱")
+ private String reason;
+
+ @Schema(description = "0涓嬬幆鑺傝矗浠讳汉")
+ private String submitNextPesponsible;
+
+ @Schema(description = "0鎿嶄綔浜�")
+ private String submitOperatingPersonnel;
+
+ @Schema(description = "0鏃ユ湡")
+ private LocalDateTime submitDate;
+
+ @Schema(description = "1閮ㄩ棬璐熻矗浜烘剰瑙�")
+ private String departmentReviewOpinion;
+
+ @Schema(description = "1涓嬬幆鑺傝矗浠讳汉")
+ private String departmentNextPesponsible;
+
+ @Schema(description = "1鎿嶄綔浜�")
+ private String departmentOperatingPersonnel;
+
+ @Schema(description = "1鏃ユ湡")
+ private LocalDateTime departmentDate;
+
+ @Schema(description = "2璁¢噺瀹ゆ剰瑙�")
+ private String measuringRoomReviewOpinion;
+
+ @Schema(description = "2涓嬬幆鑺傝矗浠讳汉")
+ private String measuringRoomNextPesponsible;
+
+ @Schema(description = "2鎿嶄綔浜�")
+ private String measuringRoomOperatingPersonnel;
+
+ @Schema(description = "2鏃ユ湡")
+ private LocalDateTime measuringRoomDate;
+
+ @Schema(description = "3鎵瑰噯鎰忚")
+ private String approvalOpinion;
+
+ @Schema(description = "3涓嬬幆鑺傝矗浠讳汉")
+ private String approvalNextPesponsible;
+
+ @Schema(description = "3鎿嶄綔浜�")
+ private String approvalOperatingPersonnel;
+
+ @Schema(description = "3鏃ユ湡")
+ private LocalDateTime approvalDate;
+
+ @Schema(description = "褰撳墠鐘舵��")
+ private String currentState;
+
+ @Schema(description = "璁惧Id")
+ private Integer deviceId;
+
+ @Schema(description = "褰撳墠鐜妭璐熻矗浜�")
+ private String currentResponsible;
+
+ @Schema(description = "鎻愪氦浜�")
+ @ExcelProperty(value = "鎻愪氦浜�")
+ private String createUser;
+
+ @Schema(description = "鎻愪氦鏃ユ湡")
+ @ExcelProperty(value = "鎻愪氦鏃ユ湡")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceTraceabilityManagement.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceTraceabilityManagement.java
new file mode 100644
index 0000000..a0b7f15
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceTraceabilityManagement.java
@@ -0,0 +1,76 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕〃
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:44
+ */
+@Getter
+@Setter
+@TableName("device_traceability_management")
+@Schema(description = "璁惧閲忓�兼函婧愯鍒掕〃")
+public class DeviceTraceabilityManagement{
+
+ @Schema(description = "璁惧閲忓�兼函婧愯鍒抜d")
+ @TableId(value = "traceability_management_id", type = IdType.AUTO)
+ private Integer traceabilityManagementId;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "璁″垝鍚嶇О")
+ private String planName;
+
+ @Schema(description = "璁″垝骞翠唤")
+ private String planYear;
+
+ @Schema(description = "缂栧埗浜篿d")
+ private Integer compilerId;
+
+ @Schema(description = "缂栧埗浜�")
+ private String compiler;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ private LocalDateTime datePreparation;
+
+ @Schema(description = "瀹℃牳鐘舵�侊紝0鏈鏍革紝1瀹℃牳")
+ private Integer status;
+
+ @Schema(description = "淇敼浜篿d")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "瀹℃牳浜篿d")
+ private Integer auditId;
+
+ @Schema(description = "瀹℃牳浜�")
+ private String audit;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private LocalDateTime auditDate;
+
+ @Schema(description = "瀹℃牳淇℃伅")
+ private String auditRemark;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃ユ湡")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceTraceabilityManagementDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceTraceabilityManagementDetails.java
new file mode 100644
index 0000000..0c75d89
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceTraceabilityManagementDetails.java
@@ -0,0 +1,67 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:58
+ */
+@Getter
+@Setter
+@TableName("device_traceability_management_details")
+@Schema(description = "璁惧閲忓�兼函婧愯鍒掕鎯呰〃")
+public class DeviceTraceabilityManagementDetails implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "璁惧閲忓�兼函婧愯鍒掕鎯卛d")
+ @TableId(value = "traceability_management_detail_id", type = IdType.AUTO)
+ private Integer traceabilityManagementDetailId;
+
+ @Schema(description = "璁惧閲忓�兼函婧愯鍒抜d")
+ private Integer traceabilityManagementId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "鎶�鏈寚鏍囧弬鏁�")
+ private String technicalIndexParameters;
+
+ @Schema(description = "鎶�鏈寚鏍囪姹�")
+ private String technicalRequirements;
+
+ @Schema(description = "妫�瀹氬懆鏈�")
+ private String verificationCycle;
+
+ @Schema(description = "妫�瀹氬崟浣�")
+ private String verificationUnit;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃ユ湡")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜篿d")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/OperationInstruction.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/OperationInstruction.java
new file mode 100644
index 0000000..8036351
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/OperationInstruction.java
@@ -0,0 +1,87 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧 - 浣滀笟鎸囧涔� 娣诲姞鍙楁帶鏂囦欢 瀛�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:43:32
+ */
+@Getter
+@Setter
+@TableName("device_operation_instruction")
+public class OperationInstruction {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "璁惧涓婚敭id")
+ private String deviceId;
+
+ @Schema(description = "鏂囦欢绫诲瀷")
+ private String documentType;
+
+ @Schema(description = "鏂囨。缂栧彿")
+ private String documentNumber;
+
+ @Schema(description = "鏂囦欢鐗堟湰")
+ private String documentVersion;
+
+ @Schema(description = "浣滆��")
+ private String author;
+
+ @Schema(description = "鎻愪氦鏃ユ湡")
+ private LocalDate submitDate;
+
+ @Schema(description = "鏂囨。璇存槑")
+ private String documentNote;
+
+ @Schema(description = "绯荤粺鐢熸垚鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "绯荤粺鐢熸垚鍚嶇О")
+ private String fileSystemName;
+
+ @Schema(description = "浣滀笟鎸囧涔d")
+ private Integer instructionId;
+
+ @Schema(description = "涓婁紶浜篿d")
+ private Integer uploader;
+
+ @Schema(description = "瀹℃壒浜篿d")
+ private Integer approverId;
+
+ @Schema(description = "瀹℃壒鐘舵��")
+ private Boolean status;
+
+ @Schema(description = "鐢熸晥鏃堕棿")
+ private LocalDateTime entryIntoForceTime;
+
+ @Schema(description = "涓婁紶鏃堕棿")
+ private LocalDateTime uploadTime;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊浜篿d")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java b/cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java
new file mode 100644
index 0000000..3a6ce16
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.device.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.CollectBridge;
+
+/**
+ * 鏁板瓧鐢垫ˉ閲囬泦
+ *
+ * @author zhuo
+ * @since 2025-02-19
+ */
+public interface CollectBridgeService extends IService<CollectBridge> {
+
+ /**
+ * 濉厖閲囬泦鏁版嵁
+ * @param jsonObject
+ */
+ void addBridgeValue(JSONObject jsonObject);
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
new file mode 100644
index 0000000..0232400
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
@@ -0,0 +1,55 @@
+package com.ruoyi.device.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.Result;
+import com.ruoyi.device.dto.DataConfigDto;
+import com.ruoyi.device.pojo.DataConfig;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-07-13 12:23:00
+ */
+public interface DataConfigService extends IService<DataConfig> {
+
+
+ /**
+ * 缁存姢璁惧鏂囦欢閰嶇疆
+ * @param dataConfigList
+ */
+ void saveDeviceFileConfiguration(DataConfigDto dataConfigList);
+
+ /**
+ * 鏁伴噰閰嶇疆
+ * @param dataConfigList
+ */
+ void saveDataAcquisitionConfiguration(DataConfigDto dataConfigList);
+
+ /**
+ * 鏌ヨ鏁伴噰閰嶇疆
+ * @param dataConfig
+ * @return
+ */
+ Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig);
+
+ /**
+ * 鏌ヨ妫�楠岄」鏁伴噰閰嶇疆
+ * @param dataConfig
+ * @return
+ */
+ Result<?> queryProductConfiguration(DataConfig dataConfig);
+
+ /**
+ * 鏌ヨ浜嗙粦瀹氫絾鏄病鏈夐厤缃殑妫�楠岄」
+ * @param deviceId
+ * @return
+ */
+ IPage<DataConfig> getNoConfigProduct(Page page, Integer deviceId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java
new file mode 100644
index 0000000..11218d1
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java
@@ -0,0 +1,17 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceAcceptanceFile;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭)闄勪欢琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:26
+ */
+public interface DeviceAcceptanceFileService extends IService<DeviceAcceptanceFile> {
+
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java
new file mode 100644
index 0000000..0309c91
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java
@@ -0,0 +1,39 @@
+package com.ruoyi.device.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.device.pojo.DeviceAcceptance;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭) 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:14
+ */
+public interface DeviceAcceptanceService extends IService<DeviceAcceptance> {
+
+ /**
+ * 璁惧楠屾敹鍒楄〃
+ * @param page
+ * @param deviceAcceptance
+ * @return
+ */
+ IPage<DeviceAcceptance> pageDeviceAcceptance(Page page, DeviceAcceptance deviceAcceptance);
+
+
+ boolean uploadDeviceAcceptanceFile(Integer acceptanceId, MultipartFile file);
+
+ /**
+ * 璁惧楠屾敹瀵煎嚭
+ * @param acceptanceId 璁惧楠屾敹id
+ * @param response 鍝嶅簲浣�
+ * @return
+ */
+ void exportDeviceAcceptance(Integer acceptanceId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAccidentReportService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAccidentReportService.java
new file mode 100644
index 0000000..2aaf6c5
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAccidentReportService.java
@@ -0,0 +1,41 @@
+package com.ruoyi.device.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.device.pojo.DeviceAccidentReport;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+public interface DeviceAccidentReportService extends IService<DeviceAccidentReport> {
+
+ /**
+ * 璁惧浜嬫晠鎶ュ憡鍒楄〃
+ * @param page
+ * @param deviceAccidentReport
+ * @return
+ */
+ IPage<DeviceAccidentReport> pageDeviceAccidentReport(Page page, DeviceAccidentReport deviceAccidentReport);
+
+ /**
+ * 鏂板璁惧浜嬫晠鎶ュ憡
+ * @param deviceAccidentReport
+ * @return
+ */
+ boolean addDeviceAccidentReport(DeviceAccidentReport deviceAccidentReport);
+
+ /**
+ * 瀵煎嚭璁惧浜嬫晠鎶ュ憡
+ * @param accidentReportId 璁惧浜嬫晠鎶ュ憡id
+ * @param response 鍝嶅簲
+ */
+ void exportDeviceAccidentReport(Integer accidentReportId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBorrowService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBorrowService.java
new file mode 100644
index 0000000..298b03e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBorrowService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.device.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.device.pojo.DeviceBorrow;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 10:53:51
+ */
+public interface DeviceBorrowService extends IService<DeviceBorrow> {
+
+ IPage<DeviceBorrow> deviceBorrowPage(Page page, DeviceBorrow deviceBorrow);
+
+ int saveDeviceBorrow(DeviceBorrow deviceBorrow);
+
+ DeviceBorrow getDeviceBorrow(Integer id);
+
+ List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBreakdownMaintenanceService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBreakdownMaintenanceService.java
new file mode 100644
index 0000000..1bed4f7
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBreakdownMaintenanceService.java
@@ -0,0 +1,41 @@
+package com.ruoyi.device.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.device.dto.DeviceBreakdownMaintenance;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+public interface DeviceBreakdownMaintenanceService extends IService<DeviceBreakdownMaintenance> {
+
+ /**
+ * 璁惧鏁呴殰缁翠慨鍒楄〃
+ * @param page
+ * @param deviceBreakdownMaintenance
+ * @return
+ */
+ IPage<DeviceBreakdownMaintenance> pageDeviceBreakdownMaintenance(Page page, DeviceBreakdownMaintenance deviceBreakdownMaintenance);
+
+ /**
+ * 鏂板璁惧鏁呴殰缁翠慨
+ * @param deviceBreakdownMaintenance
+ * @return
+ */
+ boolean addDeviceBreakdownMaintenance(DeviceBreakdownMaintenance deviceBreakdownMaintenance);
+
+ /**
+ * 瀵煎嚭璁惧鏁呴殰缁翠慨
+ * @param maintenanceId 璁惧鏁呴殰缁翠慨id
+ * @param response 鍝嶅簲
+ */
+ void exportDeviceBreakdownMaintenance(Integer maintenanceId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceCalibrationPlanDetailService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceCalibrationPlanDetailService.java
new file mode 100644
index 0000000..f696dd4
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceCalibrationPlanDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceCalibrationPlanDetail;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:29
+ */
+public interface DeviceCalibrationPlanDetailService extends IService<DeviceCalibrationPlanDetail> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceCalibrationPlanService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceCalibrationPlanService.java
new file mode 100644
index 0000000..0a85152
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceCalibrationPlanService.java
@@ -0,0 +1,89 @@
+package com.ruoyi.device.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.device.dto.DeviceCalibrationPlanDto;
+import com.ruoyi.device.pojo.DeviceCalibrationPlan;
+import com.ruoyi.device.pojo.DeviceCalibrationPlanDetail;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝涓昏〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:17
+ */
+public interface DeviceCalibrationPlanService extends IService<DeviceCalibrationPlan> {
+
+ /**
+ * 鏂板璁惧鏍″噯璁″垝
+ * @param calibrationPlanDto
+ * @return
+ */
+ boolean addDeviceCalibrationPlan(DeviceCalibrationPlanDto calibrationPlanDto);
+
+ /**
+ * 瀵煎叆璁惧鏍″噯璁″垝
+ * @param file
+ * @return
+ */
+ boolean importDeviceCalibrationPlan(MultipartFile file, String planYear);
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @param deviceCalibrationPlan
+ * @return
+ */
+ boolean submiatRatifyDeviceCalibrationPlan(DeviceCalibrationPlan deviceCalibrationPlan);
+
+ /**
+ * 璁惧鏍″噯璁″垝鎵瑰噯
+ * @param DeviceCalibrationPlan
+ * @return
+ */
+ boolean ratifyDeviceCalibrationPlan(DeviceCalibrationPlan DeviceCalibrationPlan);
+
+ /**
+ * 璁惧鏍″噯璁″垝鍒楄〃
+ * @param page
+ * @param DeviceCalibrationPlan
+ * @return
+ */
+ IPage<DeviceCalibrationPlanDto> pageDeviceCalibrationPlan(Page page, DeviceCalibrationPlan deviceCalibrationPlan);
+
+ /**
+ * 璁惧鏍″噯璁″垝璇︽儏鍒楄〃
+ * @param page
+ * @param DeviceCalibrationPlanDetails
+ * @return
+ */
+ IPage<DeviceCalibrationPlanDetail> pageDeviceCalibrationPlanDetail(Page page, DeviceCalibrationPlanDetail deviceCalibrationPlanDetails);
+
+
+ /**
+ * 瀵煎嚭璁惧鏍″噯璁″垝
+ *
+ * @param DeviceCalibrationPlanId
+ * @param response
+ */
+ void exportDeviceCalibrationPlanDetail(Integer DeviceCalibrationPlanId, HttpServletResponse response);
+
+ /**
+ * 鎵归噺缂栬緫璁惧鏍″噯璇︽儏
+ * @param calibrationPlanDto
+ * @return
+ */
+ boolean updateDeviceCalibrationPlan(DeviceCalibrationPlanDto calibrationPlanDto);
+
+ /**
+ * 鏌ヨ璁惧鏍″噯璇︽儏
+ * @param planId
+ * @return
+ */
+ DeviceCalibrationPlanDto getDeviceCalibrationPlan(Integer planId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceDocumentsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceDocumentsService.java
new file mode 100644
index 0000000..f6d91cf
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceDocumentsService.java
@@ -0,0 +1,10 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceDocuments;
+
+/**
+ * 璁惧妗f
+ */
+public interface DeviceDocumentsService extends IService<DeviceDocuments> {
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanDetailsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanDetailsService.java
new file mode 100644
index 0000000..e3a1924
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanDetailsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:16
+ */
+public interface DeviceExaminePlanDetailsService extends IService<DeviceExaminePlanDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanService.java
new file mode 100644
index 0000000..a468993
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanService.java
@@ -0,0 +1,89 @@
+package com.ruoyi.device.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.device.dto.DeviceExaminePlanDetailsDto;
+import com.ruoyi.device.dto.DeviceExaminePlanDto;
+import com.ruoyi.device.pojo.DeviceExaminePlan;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝涓昏〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:04
+ */
+public interface DeviceExaminePlanService extends IService<DeviceExaminePlan> {
+
+ /**
+ * 鏂板璁惧鏍告煡璁″垝
+ * @param examinePlanDto
+ * @return
+ */
+ boolean addDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto);
+
+ /**
+ * 瀵煎叆璁惧鏍告煡璁″垝
+ * @param file
+ * @return
+ */
+ boolean importDeviceExaminePlan(MultipartFile file);
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @param deviceExaminePlan
+ * @return
+ */
+ boolean submitRatifyDeviceExaminePlan(DeviceExaminePlan deviceExaminePlan);
+
+ /**
+ * 璁惧鏍告煡璁″垝鎵瑰噯
+ * @param DeviceExaminePlan
+ * @return
+ */
+ boolean ratifyDeviceExaminePlan(DeviceExaminePlan DeviceExaminePlan);
+
+ /**
+ * 璁惧鏍告煡璁″垝鍒楄〃
+ * @param page
+ * @param DeviceExaminePlan
+ * @return
+ */
+ IPage<DeviceExaminePlanDto> pageDeviceExaminePlan(Page page, DeviceExaminePlan DeviceExaminePlan);
+
+ /**
+ * 璁惧鏍告煡璁″垝璇︽儏鍒楄〃
+ * @param page
+ * @param DeviceExaminePlanDetails
+ * @return
+ */
+ IPage<DeviceExaminePlanDetailsDto> pageDeviceExaminePlanDetail(Page page, DeviceExaminePlanDetails DeviceExaminePlanDetails);
+
+
+ /**
+ * 瀵煎嚭璁惧鏍告煡璁″垝
+ * @param deviceExaminePlanId 璁惧鏍告煡璁″垝id
+ * @param response 鍝嶅簲
+ */
+ void exportDeviceExaminePlanDetail(Integer deviceExaminePlanId, HttpServletResponse response);
+
+ /**
+ * 鎵归噺淇敼璁惧鏍告煡璁″垝
+ * @param examinePlanDto
+ * @return
+ */
+ boolean updateDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto);
+
+ /**
+ * 鏌ヨ璁惧鏍告煡璁″垝璇︽儏
+ * @param planId
+ * @return
+ */
+ DeviceExaminePlanDto getDeviceExaminePlan(Integer planId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastDetailsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastDetailsService.java
new file mode 100644
index 0000000..da272d0
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastDetailsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍瀵规瘮璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:57
+ */
+public interface DeviceExamineRecordContrastDetailsService extends IService<DeviceExamineRecordContrastDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastService.java
new file mode 100644
index 0000000..9bcdc7b
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastService.java
@@ -0,0 +1,46 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.dto.DeviceExamineRecordContrastDto;
+import com.ruoyi.device.pojo.DeviceExamineRecordContrast;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍瀵规瘮琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:43
+ */
+public interface DeviceExamineRecordContrastService extends IService<DeviceExamineRecordContrast> {
+
+ /**
+ * 鏌ヨ鏍告煡瀵规瘮璁板綍
+ * @return
+ */
+ DeviceExamineRecordContrastDto getExamineRecordContrast(Integer planDetailsId);
+
+ /**
+ * 鏂板鏍告煡瀵规瘮璁板綍
+ * @return
+ *
+ */
+ boolean addExamineRecordContrast(DeviceExamineRecordContrastDto deviceExamineRecordContrastDto);
+
+ /**
+ * 瀹℃牳鏍告煡瀵规瘮璁板綍
+ * @return
+ */
+ boolean reviewExamineRecordContrast(DeviceExamineRecordContrastDto deviceExamineRecordContrastDto);
+
+ /**
+ * 瀵煎嚭瀹℃牳鏍告煡瀵规瘮璁板綍
+ *
+ * @param recordId 瀹℃牳鏍告煡瀵规瘮璁板綍id
+ * @param response
+ * @return
+ */
+ void exportReviewExamineRecordContrast(Integer recordId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordDetailService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordDetailService.java
new file mode 100644
index 0000000..09fd611
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:15:11
+ */
+public interface DeviceExamineRecordDetailService extends IService<DeviceExamineRecordDetail> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordService.java
new file mode 100644
index 0000000..cb5fccf
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordService.java
@@ -0,0 +1,43 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.dto.DeviceExamineRecordDto;
+import com.ruoyi.device.pojo.DeviceExamineRecord;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:28
+ */
+public interface DeviceExamineRecordService extends IService<DeviceExamineRecord> {
+
+ /**
+ * 鏌ヨ鏍告煡璁板綍
+ * @return
+ */
+ DeviceExamineRecordDto getExamineRecord(Integer planDetailsId);
+
+ /**
+ * 鏂板鏍告煡璁板綍
+ * @return
+ */
+ boolean addExamineRecord(DeviceExamineRecordDto deviceExamineRecordDto);
+
+ /**
+ * 澶嶆牳鏍告煡璁板綍
+ * @return
+ */
+ boolean reviewExamineRecord(DeviceExamineRecordDto deviceExamineRecordDto);
+
+ /**
+ * 瀵煎嚭澶嶆牳鏍告煡璁板綍
+ * @param planDetailsId
+ * @param response 鍝嶅簲
+ */
+ void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExternalApplyService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExternalApplyService.java
new file mode 100644
index 0000000..a8eb317
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceExternalApplyService.java
@@ -0,0 +1,42 @@
+package com.ruoyi.device.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.device.pojo.DeviceExternalApply;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍒╃敤澶栭儴璁惧鐢宠琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 10:28:43
+ */
+public interface DeviceExternalApplyService extends IService<DeviceExternalApply> {
+
+ /**
+ * 鍒╃敤澶栭儴璁惧鐢宠鍒楄〃
+ * @param page
+ * @param deviceExternalApply
+ * @return
+ */
+ IPage<DeviceExternalApply> pageDeviceExternalApply(Page page, DeviceExternalApply deviceExternalApply);
+
+ /**
+ * 鏂板鍒╃敤澶栭儴璁惧鐢宠
+ * @param deviceExternalApply
+ * @return
+ */
+ boolean addDeviceExternalApply(DeviceExternalApply deviceExternalApply);
+
+ /**
+ * 瀵煎嚭鍒╃敤澶栭儴璁惧鐢宠
+ *
+ * @param externalApplyId 澶栭儴璁惧鐢宠id
+ * @param response
+ */
+ void exportDeviceExternalApply(Integer externalApplyId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerDetailsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerDetailsService.java
new file mode 100644
index 0000000..a19e5df
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerDetailsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:39
+ */
+public interface DeviceImpowerDetailsService extends IService<DeviceImpowerDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerService.java
new file mode 100644
index 0000000..ce816b9
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerService.java
@@ -0,0 +1,71 @@
+package com.ruoyi.device.service;
+
+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.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceImpower;
+import org.apache.ibatis.annotations.Param;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鎺堟潈琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+public interface DeviceImpowerService extends IService<DeviceImpower> {
+
+ /**
+ * 鍒嗛〉鏌ヨ浣跨敤鎺堟潈
+ * @param page 鍒嗛〉鍙傛暟
+ * @param itemParameter 浣跨敤鎺堟潈
+ * @return
+ */
+ Result<IPage<DeviceImpower>> selectDeviceImpowerByPage(@Param("page") Page page, @Param("itemParameter") DeviceImpowerDto itemParameter);
+
+ /**
+ * 鏂板浣跨敤鎺堟潈
+ * @param deviceImpowerDto 浣跨敤鎺堟潈
+ */
+ Result addImpower(DeviceImpowerDto deviceImpowerDto);
+
+ /**
+ * 淇敼浣跨敤鎺堟潈
+ * @param deviceImpowerDto 浣跨敤鎺堟潈
+ */
+ Result updateImpower(DeviceImpowerDto deviceImpowerDto);
+
+ /**
+ * 鍒犻櫎浣跨敤鎺堟潈
+ * @param deviceImpowerDto 浣跨敤鎺堟潈
+ */
+ Result deleteImpower(DeviceImpowerDto deviceImpowerDto);
+
+ /**
+ * 鏌ヨ浣跨敤鎺堟潈璇︽儏
+ */
+ Result<DeviceImpowerDto> getImpowerDetail(Integer impowerId);
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @param deviceImpowerDto
+ * @return
+ */
+ Result submitReviewImpowerStatus(DeviceImpowerDto deviceImpowerDto);
+
+ /**
+ * 浣跨敤鎺堟潈瀹℃牳
+ */
+ Result reviewImpowerStatus(DeviceImpowerDto deviceImpowerDto);
+
+ /**
+ * 浣跨敤鎺堟潈瀵煎嚭
+ */
+ void exportDeviceImpowerDto(Integer impowerId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordDetailsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordDetailsService.java
new file mode 100644
index 0000000..4fd6270
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordDetailsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:27:32
+ */
+public interface DeviceInspectionRecordDetailsService extends IService<DeviceInspectionRecordDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java
new file mode 100644
index 0000000..600a5dc
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java
@@ -0,0 +1,70 @@
+package com.ruoyi.device.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.Result;
+import com.ruoyi.device.dto.DeviceInspectionRecordDto;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鐐规璁板綍琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+public interface DeviceInspectionRecordService extends IService<DeviceInspectionRecord> {
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+ * @param page
+ */
+ Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(Page page, DeviceInspectionRecordDto deviceInspectionRecord);
+
+
+ /**
+ * 鏌ヨ鐐规璇︽儏
+ * @param inspectionRecordId
+ * @return
+ */
+ Result getDeviceInspectionRecord(Integer inspectionRecordId);
+
+ /**
+ * 鏂板璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ Result addDeviceInspectionRecord(DeviceInspectionRecordDto deviceInspectionRecord);
+
+ /**
+ * 淇敼璁惧鐐规璁板綍
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ Result updateInspectionRecordAndDetails(DeviceInspectionRecordDto deviceInspectionRecord);
+
+ /**
+ * 鍒犻櫎璁惧鐐规璁板綍
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ Result deleteDeviceInspectionRecordOrDetails(DeviceInspectionRecordDto deviceInspectionRecord);
+
+ /**
+ * 澶嶆牳鐐规璁板綍
+ * @param deviceExamineRecordDto
+ * @return
+ */
+ Result reviewDeviceInspectionRecord(DeviceInspectionRecordDto deviceExamineRecordDto);
+
+ /**
+ * 瀵煎嚭璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecordId 璁惧鐐规璁板綍id
+ * @param response
+ */
+ Result exportDeviceInspectionRecord(Integer deviceInspectionRecordId, HttpServletResponse response);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java
new file mode 100644
index 0000000..7932e3c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.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.device.dto.DeviceInstructionDto;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.DeviceInstruction;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:29:18
+ */
+public interface DeviceInstructionService extends IService<DeviceInstruction> {
+
+ IPage<DeviceOperationInstructionDto> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto);
+
+ void newHomeworkGuidebookAdded(DeviceInstructionDto instructionDto);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenancePlanDetailsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenancePlanDetailsService.java
new file mode 100644
index 0000000..04fb233
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenancePlanDetailsService.java
@@ -0,0 +1,17 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceMaintenancePlanDetails;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:11:46
+ */
+public interface DeviceMaintenancePlanDetailsService extends IService<DeviceMaintenancePlanDetails> {
+
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenancePlanService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenancePlanService.java
new file mode 100644
index 0000000..cfa3ab3
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenancePlanService.java
@@ -0,0 +1,79 @@
+package com.ruoyi.device.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.Result;
+import com.ruoyi.device.dto.DeviceMaintenancePlanDto;
+import com.ruoyi.device.pojo.DeviceMaintenancePlan;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:10:52
+ */
+public interface DeviceMaintenancePlanService extends IService<DeviceMaintenancePlan> {
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧淇濆吇璁″垝
+ * @param page 褰撳墠椤�
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ * @return
+ */
+ Result<IPage<DeviceMaintenancePlan>> selectDeviceMaintenancePlanByPage(Page page, DeviceMaintenancePlanDto deviceMaintenancePlanDto);
+
+ /**
+ * 鏂板璁惧淇濆吇璁″垝
+ *
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ Result addMaintenancePlan(DeviceMaintenancePlanDto deviceMaintenancePlanDto);
+
+ /**
+ * 淇敼璁惧淇濆吇璁″垝
+ *
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ Result updateMaintenancePlan(DeviceMaintenancePlanDto deviceMaintenancePlanDto);
+
+ /**
+ * 鍒犻櫎璁惧淇濆吇璁″垝
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ Result deleteMaintenancePlan(DeviceMaintenancePlanDto deviceMaintenancePlanDto);
+
+ /**
+ * 瀵煎嚭璁惧淇濆吇璁″垝
+ *
+ * @param maintenancePlanId 璁惧淇濆吇璁″垝id
+ * @param response 鍝嶅簲
+ */
+ Result exportDeviceMaintenancePlanDto(Integer maintenancePlanId, HttpServletResponse response);
+
+ /**
+ * 鏌ョ湅璁惧淇濆吇璁″垝璇︽儏
+ * @param maintenancePlanId 璁惧淇濆吇璁″垝id
+ * @return
+ */
+ Result<DeviceMaintenancePlanDto> getMaintenancePlanDetail(Integer maintenancePlanId);
+
+ /**
+ * 鎻愪氦瀹℃牳
+ * @param deviceMaintenancePlanDto
+ * @return
+ */
+ Result submitReviewMaintenancePlanStatus(DeviceMaintenancePlanDto deviceMaintenancePlanDto);
+
+ /**
+ * 瀹℃牳璁惧淇濆吇璁″垝鐘舵��
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ * @return
+ */
+ Result reviewMaintenancePlanStatus(DeviceMaintenancePlanDto deviceMaintenancePlanDto);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenanceService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenanceService.java
new file mode 100644
index 0000000..b6658a3
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenanceService.java
@@ -0,0 +1,30 @@
+package com.ruoyi.device.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.Result;
+import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.pojo.DeviceMaintenance;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 璁惧缁存姢淇濆吇
+ */
+public interface DeviceMaintenanceService extends IService<DeviceMaintenance> {
+
+ /**
+ * 璁惧缁存姢鍒嗛〉鏌ヨ
+ * @return
+ */
+ IPage<DeviceMaintenanceDto> selectDeviceMaintenancePage(Page page, DeviceMaintenanceDto deviceMaintenance);
+
+ /**
+ * 瀵煎嚭璁惧缁存姢淇濆吇
+ * @param deviceId
+ * @param response
+ * @return
+ */
+ void exportDeviceMaintenance(Integer deviceId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java
new file mode 100644
index 0000000..0cd8675
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceMetricRecord;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:01
+ */
+public interface DeviceMetricRecordService extends IService<DeviceMetricRecord> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java
new file mode 100644
index 0000000..1839fe1
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceMetricsCopy;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍 - 鏍″噯鏉$洰 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:11
+ */
+public interface DeviceMetricsCopyService extends IService<DeviceMetricsCopy> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceOperationInstructionService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceOperationInstructionService.java
new file mode 100644
index 0000000..5447a98
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceOperationInstructionService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.OperationInstruction;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧 - 浣滀笟鎸囧涔� 娣诲姞鍙楁帶鏂囦欢 瀛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:43:32
+ */
+public interface DeviceOperationInstructionService extends IService<OperationInstruction> {
+
+ List<DeviceOperationInstructionDto> homeworkGuidebookEditor(Integer instructionId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceRecordService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceRecordService.java
new file mode 100644
index 0000000..7366e74
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceRecordService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.device.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.device.dto.DeviceRecordDto;
+import com.ruoyi.device.pojo.DeviceRecord;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 11:06:47
+ */
+public interface DeviceRecordService extends IService<DeviceRecord> {
+
+ IPage<DeviceRecordDto> deviceRecordPage(Integer deviceId, Page page, String sampleCode, String managementNumber);
+
+
+ /**
+ * 瀵煎嚭璁惧浣跨敤璁板綍
+ *
+ * @param deviceId
+ * @param response
+ */
+ void exportUseRecord(Integer deviceId, String exportDate, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceScrappedService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceScrappedService.java
new file mode 100644
index 0000000..2aa6237
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceScrappedService.java
@@ -0,0 +1,43 @@
+package com.ruoyi.device.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.Result;
+import com.ruoyi.device.pojo.DeviceScrapped;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鎶ュ簾鐢宠琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 01:53:47
+ */
+public interface DeviceScrappedService extends IService<DeviceScrapped> {
+
+ /**
+ * 璁惧鎶ュ簾鐢宠鍒楄〃
+ * @param page
+ * @param deviceScrapped
+ * @return
+ */
+ IPage<DeviceScrapped> pageDeviceScrapped(Page page, DeviceScrapped deviceScrapped);
+
+ /**
+ * 鏂板璁惧鎶ュ簾鐢宠
+ * @param deviceScrapped
+ * @return
+ */
+ boolean addDeviceScrapped(DeviceScrapped deviceScrapped);
+
+ /**
+ * 淇敼璁惧鎶ュ簾鐢宠
+ * @param scrappedId 璁惧鎶ュ簾鐢宠id
+ * @return
+ */
+ Result exportDeviceScrapped(Integer scrappedId, HttpServletResponse response);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java
new file mode 100644
index 0000000..5258d6c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java
@@ -0,0 +1,62 @@
+package com.ruoyi.device.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.Result;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.device.dto.DeviceCollectionDto;
+import com.ruoyi.device.dto.DeviceDto;
+import com.ruoyi.device.pojo.Device;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璁惧(Device)琛ㄦ湇鍔℃帴鍙�
+ */
+public interface DeviceService extends IService<Device> {
+
+
+ IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull);
+
+ int addDeviceParameter(Device itemParameter);
+
+ int delDeviceParameter(Integer id);
+
+ int upDeviceParameter(Device itemParameter);
+
+ List<Device> selectEquipmentOverview();
+
+ List<Device> authorizedPerson();
+
+ List<Device> search(Integer status, String deviceName, String specificationModel, String largeCategory);
+
+ List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String laboratory);
+
+ DeviceDto selectDeviceByCode(Integer id);
+
+ Result<?> dataAcquisition(HttpServletRequest request, DeviceCollectionDto dto);
+
+ List<Map<String, Object>> treeDevice(String deviceName);
+
+ /**
+ * 瀵煎嚭璁惧鍒楄〃
+ * @param deviceId
+ * @param response
+ */
+ void exportDeviceFile(Integer deviceId, HttpServletResponse response);
+
+ /**
+ * 瀵煎嚭璁惧宸ュ叿鏄庣粏
+ * @param response
+ */
+ void exportEquipmentDetails(HttpServletResponse response);
+
+ void downloadImportTemplate(HttpServletResponse response);
+
+ int importDevice(MultipartFile file);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceStateService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceStateService.java
new file mode 100644
index 0000000..f18cf47
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceStateService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.device.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.device.dto.DeviceStateDto;
+import com.ruoyi.device.pojo.DeviceState;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鍋滅敤/鍚敤 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-09-26 09:51:40
+ */
+public interface DeviceStateService extends IService<DeviceState> {
+
+ IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber);
+
+ /**
+ * 瀵煎嚭璁惧鐘舵��
+ *
+ * @param deviceId
+ * @param processNumber
+ * @param response
+ */
+ void exportDeviceStatus(Integer deviceId, String processNumber, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceTraceabilityManagementDetailsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceTraceabilityManagementDetailsService.java
new file mode 100644
index 0000000..d990e19
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceTraceabilityManagementDetailsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceTraceabilityManagementDetails;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:58
+ */
+public interface DeviceTraceabilityManagementDetailsService extends IService<DeviceTraceabilityManagementDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceTraceabilityManagementService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceTraceabilityManagementService.java
new file mode 100644
index 0000000..5fc9c57
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceTraceabilityManagementService.java
@@ -0,0 +1,71 @@
+package com.ruoyi.device.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.Result;
+import com.ruoyi.device.dto.DeviceTraceabilityManagementDto;
+import com.ruoyi.device.pojo.DeviceTraceabilityManagement;
+import org.apache.ibatis.annotations.Param;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:44
+ */
+public interface DeviceTraceabilityManagementService extends IService<DeviceTraceabilityManagement> {
+
+ /**
+ * 鍒嗛〉鏌ヨ閲忓�兼函婧愯鍒�
+ * @param page 鍒嗛〉鍙傛暟
+ * @param itemParameter 閲忓�兼函婧愯鍒�
+ * @return
+ */
+ Result<IPage<DeviceTraceabilityManagement>> selectDeviceTraceabilityManagementByPage(@Param("page") Page page, @Param("itemParameter") DeviceTraceabilityManagementDto itemParameter);
+
+ /**
+ * 鏂板閲忓�兼函婧愯鍒�
+ * @param deviceTraceabilityManagementDto 閲忓�兼函婧愯鍒�
+ */
+ Result addTraceabilityManagement(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto);
+
+ /**
+ * 淇敼閲忓�兼函婧愯鍒�
+ * @param deviceTraceabilityManagementDto 閲忓�兼函婧愯鍒�
+ */
+ Result updateTraceabilityManagement(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto);
+
+ /**
+ * 鍒犻櫎閲忓�兼函婧愯鍒�
+ * @param deviceTraceabilityManagementDto 閲忓�兼函婧愯鍒�
+ */
+ Result deleteTraceabilityManagement(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto);
+
+ /**
+ * 鏌ヨ閲忓�兼函婧愯鍒掕鎯�
+ */
+ Result<DeviceTraceabilityManagementDto> getTraceabilityManagementDetail(Integer traceabilityManagementId);
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @param deviceTraceabilityManagementDto
+ * @return
+ */
+ Result submitReviewTraceabilityManagementStatus(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto);
+
+ /**
+ * 閲忓�兼函婧愯鍒掑鏍�
+ */
+ Result reviewTraceabilityManagementStatus(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto);
+
+ /**
+ * 閲忓�兼函婧愯鍒掑鍑�
+ */
+ Result exportDeviceTraceabilityManagementDto(Integer traceabilityManagementId, HttpServletResponse response);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/IDeviceMetricService.java b/cnas-device/src/main/java/com/ruoyi/device/service/IDeviceMetricService.java
new file mode 100644
index 0000000..fc6ed49
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/IDeviceMetricService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceMetric;
+
+public interface IDeviceMetricService extends IService<DeviceMetric> {
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
new file mode 100644
index 0000000..a1acb6e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
@@ -0,0 +1,107 @@
+package com.ruoyi.device.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.CollectBridgeMapper;
+import com.ruoyi.device.pojo.CollectBridge;
+import com.ruoyi.device.service.CollectBridgeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+/**
+ * 鏁板瓧鐢垫ˉ閲囬泦
+ *
+ * @author zhuo
+ * @since 2025-02-19
+ */
+@Service
+@Slf4j
+public class CollectBridgeServiceImpl extends ServiceImpl<CollectBridgeMapper, CollectBridge> implements CollectBridgeService {
+
+ /**
+ * 濉厖閲囬泦鏁版嵁
+ * @param jsonObject
+ */
+ @Override
+ public void addBridgeValue(JSONObject jsonObject) {
+ JSONArray dataArray = jsonObject.getJSONArray("data");
+ for (int i = 0; i < dataArray.size(); i++) {
+ JSONObject listInfo = dataArray.getJSONObject(i);
+ // 瀛樺偍鏁版嵁
+ String dataStream = listInfo.getString("dataStream");
+ if (dataStream.equals("DQCS.DQCS.SN")) {
+ JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
+ JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
+ String entrustCode = pointsJSONObject.getString("value");
+ // 瑙f瀽鏃堕棿鎴�
+ Instant instant = Instant.ofEpochMilli(pointsJSONObject.getLong("time"));
+ LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+
+ // 鍏堝瓨鍌ㄧ紪鍙�, 鍚庣画瀛樺偍鍊�
+ CollectBridge collectBridge = new CollectBridge();
+ collectBridge.setEntrustCode(entrustCode);
+ collectBridge.setCollectDate(collectDate);
+ baseMapper.insert(collectBridge);
+
+ }
+ // 瀵勫瓨鍣ㄥ湴鍧�绛変簬64鑾峰彇缁撴灉鍊�
+ if (dataStream.equals("DQCS.DQCS.64")) {
+ JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
+ JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
+ String value = pointsJSONObject.getString("value");
+
+ if (value.equals("64")) {
+ for (int j = 0; j < dataArray.size(); j++) {
+ JSONObject listInfo2 = dataArray.getJSONObject(j);
+ String dataStream2 = listInfo2.getString("dataStream");
+ // 瀵勫瓨鍣ㄥ湴鍧�绛変簬64鑾峰彇缁撴灉鍊�
+ if (dataStream2.equals("DQCS.DQCS.DZZ")) {
+ JSONArray dataPoints2 = listInfo2.getJSONArray("dataPoints");
+ JSONObject pointsJSONObject2 = dataPoints2.getJSONObject(0);
+ String collectValue = pointsJSONObject2.getString("value");
+
+ // 瑙f瀽鏃堕棿鎴�
+ Instant instant = Instant.ofEpochMilli(pointsJSONObject2.getLong("time"));
+ LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+
+ // 鏌ヨ鏈�鏂颁竴鏉℃暟鎹�
+ CollectBridge collectBridge = baseMapper.selectOne(Wrappers.<CollectBridge>lambdaQuery()
+ .orderByDesc(CollectBridge::getCollectDate)
+ .last("limit 1"));
+
+ // 鍒ゆ柇涓ゆ潯鏁版嵁鏄惁鐩稿樊鍦�10鍒嗛挓涔嬪唴鍜屾湁娌℃湁缂栧彿
+ if (isWithinTenMinutes(collectDate, collectBridge.getCollectDate()) &&
+ StringUtils.isNotBlank(collectBridge.getEntrustCode())) {
+ // 淇敼妫�楠屽��
+ collectBridge.setCollectValue(collectValue);
+ baseMapper.updateById(collectBridge);
+ } else {
+ // 鍙瓨鍌ㄥ��
+ CollectBridge bridge = new CollectBridge();
+ bridge.setCollectValue(collectValue);
+ bridge.setCollectDate(collectDate);
+ baseMapper.insert(bridge);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static boolean isWithinTenMinutes(LocalDateTime dateTime1, LocalDateTime dateTime2) {
+ Duration duration = Duration.between(dateTime1, dateTime2);
+ long minutesDifference = Math.abs(duration.toMinutes());
+ return minutesDifference <= 10;
+ }
+
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
new file mode 100644
index 0000000..b7a30f7
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
@@ -0,0 +1,104 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.dto.DataConfigDto;
+import com.ruoyi.device.mapper.DataConfigMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.DataConfig;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.service.DataConfigService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-07-13 12:23:00
+ */
+@Service
+@AllArgsConstructor
+public class DataConfigServiceImpl extends ServiceImpl<DataConfigMapper, DataConfig> implements DataConfigService {
+
+ private DeviceMapper deviceMapper;
+
+ private DataConfigMapper dataConfigMapper;
+
+ /**
+ * 缁存姢璁惧鏂囦欢閰嶇疆
+ * @param dataConfigList
+ */
+ @Override
+ public void saveDeviceFileConfiguration(DataConfigDto dataConfigList) {
+ if (dataConfigList.getDeviceId() == null) {
+ throw new RuntimeException("缂哄皯璁惧Id");
+ }
+
+ Device device = new Device();
+ BeanUtils.copyProperties(dataConfigList, device);
+ device.setId(dataConfigList.getDeviceId());
+ deviceMapper.updateById(device);
+ }
+
+ /**
+ * 鏁伴噰閰嶇疆
+ * @param dataConfigList
+ */
+ @Override
+ public void saveDataAcquisitionConfiguration(DataConfigDto dataConfigList) {
+ if (dataConfigList.getDeviceId() == null) {
+ throw new RuntimeException("缂哄皯璁惧id");
+ }
+
+ for (DataConfig dataConfig : dataConfigList.getDataConfigList()) {
+ if (dataConfig.getStructureItemParameterId() == null) {
+ throw new RuntimeException("缂哄皯妫�楠岄」id");
+ }
+ dataConfig.setDeviceId(dataConfigList.getDeviceId());
+ }
+
+ this.saveOrUpdateBatch(dataConfigList.getDataConfigList());
+
+ }
+
+ @Override
+ public Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig) {
+ return Result.success(dataConfigMapper.selectDataConfigList(dataConfig.getDeviceId()));
+
+ }
+
+ /**
+ * 鏌ヨ妫�楠岄」鏁伴噰閰嶇疆
+ * @param dataConfig
+ * @return
+ */
+ @Override
+ public Result<?> queryProductConfiguration(DataConfig dataConfig) {
+ if (dataConfig.getStructureItemParameterId() == null) {
+ throw new RuntimeException("缂哄皯妫�娴嬮」id");
+ }
+ List<DataConfig> list = baseMapper.selectList(Wrappers.<DataConfig>lambdaQuery().eq(DataConfig::getStructureItemParameterId, dataConfig.getStructureItemParameterId()));
+ return Result.success(list);
+ }
+
+ /**
+ * 鏌ヨ浜嗙粦瀹氫絾鏄病鏈夐厤缃殑妫�楠岄」
+ * @param deviceId
+ * @return
+ */
+ @Override
+ public IPage<DataConfig> getNoConfigProduct(Page page, Integer deviceId) {
+ return baseMapper.getNoConfigProduct(page, deviceId);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java
new file mode 100644
index 0000000..aa4577c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceAcceptanceFileMapper;
+import com.ruoyi.device.pojo.DeviceAcceptanceFile;
+import com.ruoyi.device.service.DeviceAcceptanceFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭)闄勪欢琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:26
+ */
+@Service
+public class DeviceAcceptanceFileServiceImpl extends ServiceImpl<DeviceAcceptanceFileMapper, DeviceAcceptanceFile> implements DeviceAcceptanceFileService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java
new file mode 100644
index 0000000..34b4e3c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java
@@ -0,0 +1,160 @@
+package com.ruoyi.device.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.device.mapper.DeviceAcceptanceFileMapper;
+import com.ruoyi.device.mapper.DeviceAcceptanceMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceAcceptance;
+import com.ruoyi.device.pojo.DeviceAcceptanceFile;
+import com.ruoyi.device.service.DeviceAcceptanceService;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 璁惧楠屾敹(瑁呭) 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 01:45:14
+ */
+@Service
+public class DeviceAcceptanceServiceImpl extends ServiceImpl<DeviceAcceptanceMapper, DeviceAcceptance> implements DeviceAcceptanceService {
+
+ @Resource
+ private DeviceAcceptanceFileMapper deviceAcceptanceFileMapper;
+
+ @Resource
+ private DeviceMapper deviceMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ /**
+ * 璁惧楠屾敹鍒楄〃
+ * @param page
+ * @param deviceAcceptance
+ * @return
+ */
+ @Override
+ public IPage<DeviceAcceptance> pageDeviceAcceptance(Page page, DeviceAcceptance deviceAcceptance) {
+ return baseMapper.pageDeviceAcceptance(page, QueryWrappers.queryWrappers(deviceAcceptance));
+ }
+
+ /**
+ * 璁惧楠屾敹闄勪欢
+ * @param acceptanceId
+ * @param file
+ * @return
+ */
+ @Override
+ public boolean uploadDeviceAcceptanceFile(Integer acceptanceId, MultipartFile file) {
+ if (acceptanceId == null) {
+ throw new ErrorException("缂哄皯楠屾敹id");
+ }
+
+ String urlString;
+ String pathName;
+ String path;
+ String filename = file.getOriginalFilename();
+ String contentType = file.getContentType();
+ DeviceAcceptanceFile acceptanceFile = new DeviceAcceptanceFile();
+ acceptanceFile.setAcceptanceId(acceptanceId);
+ acceptanceFile.setFileName(filename);
+ if (contentType != null && contentType.startsWith("image/")) {
+ // 鏄浘鐗�
+ path = imgUrl;
+ acceptanceFile.setType(1);
+ } else {
+ // 鏄枃浠�
+ path = wordUrl;
+ acceptanceFile.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));
+ acceptanceFile.setFileUrl(pathName);
+ deviceAcceptanceFileMapper.insert(acceptanceFile);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return false;
+ }
+ }
+
+ /**
+ * 璁惧楠屾敹瀵煎嚭
+ * @param acceptanceId 璁惧楠屾敹id
+ * @param response 鍝嶅簲浣�
+ * @return
+ */
+ @Override
+ public void exportDeviceAcceptance(Integer acceptanceId, HttpServletResponse response) {
+ DeviceAcceptance deviceAcceptance = baseMapper.selectById(acceptanceId);
+ if (deviceAcceptance == null) {
+ throw new ErrorException("璁惧楠屾敹涓嶅瓨鍦�");
+ }
+ Device device = null;
+ if (deviceAcceptance.getDeviceId() != null) {
+ device = deviceMapper.selectById(deviceAcceptance.getDeviceId());
+ }
+
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/acceptance-certificate.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceInspectionRecordDetailsList", new HackLoopTableRenderPolicy())
+ .build();
+ Device finalDevice = device;
+ String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceAcceptance", deviceAcceptance);
+ put("device", finalDevice);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ deviceName+ "楠屾敹鍗�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java
new file mode 100644
index 0000000..4f4a327
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java
@@ -0,0 +1,190 @@
+package com.ruoyi.device.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceAccidentReportDto;
+import com.ruoyi.device.mapper.DeviceAccidentReportMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceAccidentReport;
+import com.ruoyi.device.service.DeviceAccidentReportService;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+@Service
+public class DeviceAccidentReportServiceImpl extends ServiceImpl<DeviceAccidentReportMapper, DeviceAccidentReport> implements DeviceAccidentReportService {
+
+ @Resource
+ private UserMapper userMapper;
+
+
+ @Resource
+ private DeviceMapper deivceMapper;
+
+ /**
+ * 璁惧浜嬫晠鎶ュ憡鍒楄〃
+ * @param page
+ * @param deviceAccidentReport
+ * @return
+ */
+ @Override
+ public IPage<DeviceAccidentReport> pageDeviceAccidentReport(Page page, DeviceAccidentReport deviceAccidentReport) {
+ return baseMapper.pageDeviceAccidentReport(page, QueryWrappers.queryWrappers(deviceAccidentReport));
+ }
+
+ /**
+ * 鏂板璁惧浜嬫晠鎶ュ憡
+ * @param deviceAccidentReport
+ * @return
+ */
+ @Override
+ public boolean addDeviceAccidentReport(DeviceAccidentReport deviceAccidentReport) {
+ DeviceAccidentReport accidentReport = new DeviceAccidentReport();
+ User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+ switch (deviceAccidentReport.getFlowType()) {
+ case 0:
+ // 鎶ュ憡
+ BeanUtils.copyProperties(deviceAccidentReport, accidentReport);
+ accidentReport.setDescriptionOfAccident(deviceAccidentReport.getDescriptionOfAccident());
+ accidentReport.setReportUserId(user.getId());
+ accidentReport.setReportUser(user.getName());
+ accidentReport.setReportDate(LocalDate.now());
+
+ // 璇勪及浜轰俊鎭�
+ User assessorUser = userMapper.selectById(deviceAccidentReport.getAssessorUserId());
+ accidentReport.setAssessorUserId(assessorUser.getId());
+ accidentReport.setAssessorUser(assessorUser.getName());
+
+ baseMapper.insert(accidentReport);
+ break;
+ case 1:
+ accidentReport.setAccidentReportId(deviceAccidentReport.getAccidentReportId());
+ // 璇勪及
+ accidentReport.setAssessorOpinion(deviceAccidentReport.getAssessorOpinion());
+ accidentReport.setAssessorDate(LocalDate.now());
+
+ // 閮ㄩ棬璐熻矗浜�
+ User departmentHeadUser = userMapper.selectById(deviceAccidentReport.getDepartmentHeadUserId());
+ accidentReport.setDepartmentHeadUserId(departmentHeadUser.getId());
+ accidentReport.setDepartmentHeadUser(departmentHeadUser.getName());
+
+ baseMapper.updateById(accidentReport);
+
+ break;
+ case 2:
+ accidentReport.setAccidentReportId(deviceAccidentReport.getAccidentReportId());
+ // 閮ㄩ棬璐熻矗浜烘剰瑙�
+ accidentReport.setDepartmentHeadOpinion(deviceAccidentReport.getDepartmentHeadOpinion());
+ accidentReport.setDepartmentHeadDate(LocalDate.now());
+
+ // 鎶�鏈礋璐d汉淇℃伅
+ User technicalDirectorUser = userMapper.selectById(deviceAccidentReport.getTechnicalDirectorUserId());
+ accidentReport.setTechnicalDirectorUserId(technicalDirectorUser.getId());
+ accidentReport.setTechnicalDirectorUser(technicalDirectorUser.getName());
+
+ baseMapper.updateById(accidentReport);
+
+ break;
+ case 3:
+ accidentReport.setAccidentReportId(deviceAccidentReport.getAccidentReportId());
+ // 鎶�鏈礋璐d汉鎰忚
+ accidentReport.setTechnicalDirectorOpinion(deviceAccidentReport.getTechnicalDirectorOpinion());
+ accidentReport.setTechnicalDirectorDate(LocalDate.now());
+
+ // 涓讳换淇℃伅
+ User directorHeadUser = userMapper.selectById(deviceAccidentReport.getDirectorHeadUserId());
+ accidentReport.setDirectorHeadUserId(directorHeadUser.getId());
+ accidentReport.setDirectorHeadUser(directorHeadUser.getName());
+
+ baseMapper.updateById(accidentReport);
+
+ break;
+ case 4:
+ accidentReport.setAccidentReportId(deviceAccidentReport.getAccidentReportId());
+ // 涓讳换鎰忚
+ accidentReport.setDirectorHeadOpinion(deviceAccidentReport.getDirectorHeadOpinion());
+ accidentReport.setDirectorHeadDate(LocalDate.now());
+
+ accidentReport.setIsFinish(1);
+ baseMapper.updateById(accidentReport);
+ break;
+ }
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭璁惧浜嬫晠鎶ュ憡
+ * @param accidentReportId 璁惧浜嬫晠鎶ュ憡id
+ * @param response 鍝嶅簲
+ */
+ @Override
+ public void exportDeviceAccidentReport(Integer accidentReportId, HttpServletResponse response) {
+ // 鏌ヨ浜嬫晠鎶ュ憡
+ DeviceAccidentReportDto deviceAccidentReport = baseMapper.selectDeviceAccidentReportById(accidentReportId);
+
+ Device device = deivceMapper.selectById(deviceAccidentReport.getDeviceId());
+ device = device == null ? new Device() : device;
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-accident-report.docx");
+ Configure configure = Configure.builder()
+ .build();
+ Device finalDevice = device;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceAccidentReport", deviceAccidentReport);
+ put("device", finalDevice);
+ // 鎶ュ憡浜虹鍚�
+ put("reportUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getReportUserId()));
+ // 璇勪及浜虹鍚�
+ put("assessorUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getAssessorUserId()));
+ // 閮ㄩ棬璐熻矗浜虹鍚�
+ put("departmentHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
+ // 鎶�鏈礋璐d汉绛惧悕
+ put("technicalDirectorUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getTechnicalDirectorUserId()));
+ // 涓讳换绛惧悕
+ put("directorHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
+ String fileName = URLEncoder.encode(
+ deviceName + "璁惧浜嬫晠鎶ュ憡鍗�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBorrowServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBorrowServiceImpl.java
new file mode 100644
index 0000000..a402359
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBorrowServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.device.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.core.domain.entity.User;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.mapper.DeviceBorrowMapper;
+import com.ruoyi.device.mapper.DeviceLogMapper;
+import com.ruoyi.device.pojo.DeviceBorrow;
+import com.ruoyi.device.pojo.DeviceLog;
+import com.ruoyi.device.service.DeviceBorrowService;
+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 jakarta.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 10:53:51
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceBorrowServiceImpl extends ServiceImpl<DeviceBorrowMapper, DeviceBorrow> implements DeviceBorrowService {
+
+ @Resource
+ private DeviceBorrowMapper deviceBorrowMapper;
+
+ @Resource
+ private DeviceLogMapper deviceLogMapper;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Autowired
+ private NumberGenerator<DeviceBorrow> numberGenerator;
+
+ @Override
+ public IPage<DeviceBorrow> deviceBorrowPage(Page page, DeviceBorrow deviceBorrow) {
+ return deviceBorrowMapper.deviceBorrowPage(page, QueryWrappers.queryWrappers(deviceBorrow));
+ }
+
+ @Override
+ public int saveDeviceBorrow(DeviceBorrow deviceBorrow) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ //鏂板鐨勬椂鍊欐坊鍔犳柊寤烘祦绋�
+ if (ObjectUtils.isEmpty(deviceBorrow.getId())) {
+ deviceBorrow.setSubmitUser(user.getName());
+ String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
+ String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
+ String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceBorrow::getProcessNumber);
+ deviceBorrow.setProcessNumber(processNumber);
+ deviceBorrowMapper.insert(deviceBorrow);
+ DeviceLog deviceLog = new DeviceLog();
+ deviceLog.setOperator(user.getName());
+ deviceLog.setOperationTime(LocalDateTime.now());
+ deviceLog.setOperationType("鏂板缓");
+ deviceLog.setOperationContent("鏂板缓娴佺▼");
+ deviceLog.setRelevanceForm("device_borrow");
+ deviceLog.setRelevanceId(deviceBorrow.getId());
+ deviceLogMapper.insert(deviceLog);
+ } else {
+ DeviceBorrow borrow = deviceBorrowMapper.selectById(deviceBorrow.getId());
+ deviceBorrowMapper.updateById(deviceBorrow);
+ //閫氳繃鎴栬�呴┏鍥炲鍔犳祦绋嬭窡韪�
+ if (deviceBorrow.getNowState().equals("鍏抽棴")) {
+ DeviceLog deviceLog = new DeviceLog();
+ deviceLog.setOperator(user.getName());
+ deviceLog.setOperationTime(LocalDateTime.now());
+ deviceLog.setOperationType("鎺ユ敹閫氳繃");
+ deviceLog.setRelevanceForm("device_borrow");
+ deviceLog.setRelevanceId(deviceBorrow.getId());
+ deviceLogMapper.insert(deviceLog);
+ }
+ else if (deviceBorrow.getNowState().equals("鎻愪氦") && borrow.getNowState().equals("鎺ユ敹")) {
+ DeviceLog deviceLog = new DeviceLog();
+ deviceLog.setOperator(user.getName());
+ deviceLog.setOperationTime(LocalDateTime.now());
+ deviceLog.setOperationType("鎺ユ敹椹冲洖");
+ deviceLog.setRelevanceForm("device_borrow");
+ deviceLog.setRelevanceId(deviceBorrow.getId());
+ deviceLogMapper.insert(deviceLog);
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public DeviceBorrow getDeviceBorrow(Integer id) {
+ List<DeviceLog> deviceLogs = deviceLogMapper.selectList(Wrappers.<DeviceLog>lambdaQuery()
+ .eq(DeviceLog::getRelevanceForm, "device_borrow")
+ .eq(DeviceLog::getRelevanceId, id));
+ DeviceBorrow deviceBorrow = deviceBorrowMapper.selectById(id);
+ deviceBorrow.setDeviceLogs(deviceLogs);
+ return deviceBorrow;
+ }
+
+ @Override
+ public List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId) {
+ return deviceBorrowMapper.getDeviceBorrowBydeviceId(deviceId);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java
new file mode 100644
index 0000000..24bd8be
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java
@@ -0,0 +1,153 @@
+package com.ruoyi.device.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceBreakdownMaintenance;
+import com.ruoyi.device.mapper.DeviceBreakdownMaintenanceMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.service.DeviceBreakdownMaintenanceService;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+@Service
+public class DeviceBreakdownMaintenanceServiceImpl extends ServiceImpl<DeviceBreakdownMaintenanceMapper, DeviceBreakdownMaintenance> implements DeviceBreakdownMaintenanceService {
+
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private DeviceMapper deivceMapper;
+
+ /**
+ * 璁惧鏁呴殰缁翠慨鍒楄〃
+ * @param page
+ * @param deviceBreakdownMaintenance
+ * @return
+ */
+ @Override
+ public IPage<DeviceBreakdownMaintenance> pageDeviceBreakdownMaintenance(Page page, DeviceBreakdownMaintenance deviceBreakdownMaintenance) {
+ return baseMapper.pageDeviceBreakdownMaintenance(page, QueryWrappers.queryWrappers(deviceBreakdownMaintenance));
+ }
+
+ /**
+ * 鏂板璁惧鏁呴殰缁翠慨
+ * @param deviceBreakdownMaintenance
+ * @return
+ */
+ @Override
+ public boolean addDeviceBreakdownMaintenance(DeviceBreakdownMaintenance deviceBreakdownMaintenance) {
+ DeviceBreakdownMaintenance breakdownMaintenance = new DeviceBreakdownMaintenance();
+ //褰撳墠鐧诲綍鐢ㄦ埛
+ User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+
+ switch (deviceBreakdownMaintenance.getFlowType()) {
+ case 0:
+ BeanUtils.copyProperties(deviceBreakdownMaintenance, breakdownMaintenance);
+ // 鐢宠
+ breakdownMaintenance.setDamageOrMalfunction(deviceBreakdownMaintenance.getDamageOrMalfunction());
+ breakdownMaintenance.setApplicantUserId(user.getId());
+ breakdownMaintenance.setApplicantUser(user.getName());
+ breakdownMaintenance.setRepairDate(deviceBreakdownMaintenance.getRepairDate());
+
+ // 澶勭悊浜轰俊鎭�
+ User departmentHeadUser = userMapper.selectById(deviceBreakdownMaintenance.getDepartmentHeadUserId());
+ breakdownMaintenance.setApplicantUserId(departmentHeadUser.getId());
+ breakdownMaintenance.setApplicantUser(departmentHeadUser.getName());
+
+ baseMapper.insert(breakdownMaintenance);
+ break;
+ case 1:
+ breakdownMaintenance.setMaintenanceId(deviceBreakdownMaintenance.getMaintenanceId());
+ // 鐢宠閮ㄩ棬璐熻矗浜烘剰瑙�
+ breakdownMaintenance.setDepartmentHeadOpinion(deviceBreakdownMaintenance.getDepartmentHeadOpinion());
+ breakdownMaintenance.setDepartmentHeadDate(LocalDate.now());
+
+ baseMapper.updateById(breakdownMaintenance);
+ break;
+ case 2:
+ breakdownMaintenance.setMaintenanceId(deviceBreakdownMaintenance.getMaintenanceId());
+ // 璁¢噺瀹ゆ剰瑙�
+ breakdownMaintenance.setMaintenanceRecord(deviceBreakdownMaintenance.getMaintenanceRecord());
+ breakdownMaintenance.setMaintenanceUser(deviceBreakdownMaintenance.getMaintenanceUser());
+ breakdownMaintenance.setMaintenanceDate(deviceBreakdownMaintenance.getMaintenanceDate());
+
+ breakdownMaintenance.setIsFinish(1);
+
+ baseMapper.updateById(breakdownMaintenance);
+ break;
+ }
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭璁惧鏁呴殰缁翠慨
+ * @param maintenanceId 璁惧鏁呴殰缁翠慨id
+ * @param response 鍝嶅簲
+ */
+ @Override
+ public void exportDeviceBreakdownMaintenance(Integer maintenanceId, HttpServletResponse response) {
+ // 鏌ヨ澶栭儴璁惧鐢宠
+ DeviceBreakdownMaintenance deviceBreakdownMaintenance = baseMapper.selectById(maintenanceId);
+
+ Device device = null;
+ if (deviceBreakdownMaintenance.getDeviceId() != null) {
+ device = deivceMapper.selectById(deviceBreakdownMaintenance.getDeviceId());
+ device = device == null ? new Device() : device;
+ }
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-breakdown-maintenance.docx");
+ Configure configure = Configure.builder()
+ .build();
+ Device finalDevice = device;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceBreakdownMaintenance", deviceBreakdownMaintenance);
+ put("device", finalDevice);
+ // 鐢宠浜虹鍚�
+ put("applicantUrl", UserUtils.getFinalUserSignatureUrl(deviceBreakdownMaintenance.getApplicantUserId()));
+ // 閮ㄩ棬璐熻矗浜虹鍚�
+ put("headUrl", UserUtils.getFinalUserSignatureUrl(deviceBreakdownMaintenance.getDepartmentHeadUserId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
+ String fileName = URLEncoder.encode(
+ deviceName + "璁惧鏁呴殰缁翠慨鐢宠琛�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanDetailServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanDetailServiceImpl.java
new file mode 100644
index 0000000..8c4b2da
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceCalibrationPlanDetailMapper;
+import com.ruoyi.device.pojo.DeviceCalibrationPlanDetail;
+import com.ruoyi.device.service.DeviceCalibrationPlanDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:29
+ */
+@Service
+public class DeviceCalibrationPlanDetailServiceImpl extends ServiceImpl<DeviceCalibrationPlanDetailMapper, DeviceCalibrationPlanDetail> implements DeviceCalibrationPlanDetailService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java
new file mode 100644
index 0000000..c119452
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java
@@ -0,0 +1,357 @@
+package com.ruoyi.device.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.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.ruoyi.common.constant.MenuJumpPathConstants;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceCalibrationPlanDetailDto;
+import com.ruoyi.device.dto.DeviceCalibrationPlanDto;
+import com.ruoyi.device.excel.upload.DeviceCalibrationPlanDetailUpload;
+import com.ruoyi.device.mapper.DeviceCalibrationPlanDetailMapper;
+import com.ruoyi.device.mapper.DeviceCalibrationPlanMapper;
+import com.ruoyi.device.pojo.DeviceCalibrationPlan;
+import com.ruoyi.device.pojo.DeviceCalibrationPlanDetail;
+import com.ruoyi.device.service.DeviceCalibrationPlanDetailService;
+import com.ruoyi.device.service.DeviceCalibrationPlanService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+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;
+
+/**
+ * <p>
+ * 璁惧鏍″噯璁″垝涓昏〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 03:58:17
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceCalibrationPlanServiceImpl extends ServiceImpl<DeviceCalibrationPlanMapper, DeviceCalibrationPlan> implements DeviceCalibrationPlanService {
+
+ @Resource
+ private DeviceCalibrationPlanDetailMapper deviceCalibrationPlanDetailMapper;
+ @Resource
+ private DeviceCalibrationPlanDetailService deviceCalibrationPlanDetailService;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ @Resource
+ private InformationNotificationService informationNotificationService;
+ @Resource
+ private UserMapper userMapper;
+
+
+ /**
+ * 鏂板璁惧鏍″噯璁″垝
+ * @param calibrationPlanDto
+ * @return
+ */
+ @Override
+ public boolean addDeviceCalibrationPlan(DeviceCalibrationPlanDto calibrationPlanDto) {
+ // 褰撳墠鐧诲綍鐢ㄦ埛
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 缂栧埗鏃ユ湡
+ calibrationPlanDto.setWriteUserId(userId);
+ calibrationPlanDto.setWriteTime(LocalDateTime.now());
+ baseMapper.insert(calibrationPlanDto);
+
+ // 娣诲姞璇︽儏
+ if (CollectionUtils.isNotEmpty(calibrationPlanDto.getCalibrationPlanDetailList())) {
+ for (DeviceCalibrationPlanDetail calibrationPlanDetail : calibrationPlanDto.getCalibrationPlanDetailList()) {
+ calibrationPlanDetail.setPlanId(calibrationPlanDto.getPlanId());
+ }
+ deviceCalibrationPlanDetailService.saveBatch(calibrationPlanDto.getCalibrationPlanDetailList());
+ }
+
+ return true;
+ }
+
+ /**
+ * 瀵煎叆璁惧鏍″噯璁″垝
+ * @param file
+ * @return
+ */
+ @Override
+ public boolean importDeviceCalibrationPlan(MultipartFile file, String planYear) {
+ // 褰撳墠鐧诲綍鐢ㄦ埛
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 鏂囦欢鍚嶇О
+ String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
+ DeviceCalibrationPlan calibrationPlan = new DeviceCalibrationPlan();
+ calibrationPlan.setPlanName(fileName);
+ calibrationPlan.setPlanYear(planYear);
+ calibrationPlan.setWriteUserId(userId);
+ calibrationPlan.setWriteTime(LocalDateTime.now());
+ baseMapper.insert(calibrationPlan);
+
+ List<DeviceCalibrationPlanDetail> detailsUploadList = new ArrayList<>();
+ // 瀵煎叆闄勪欢鍐呭
+ try {
+ // excel瑙f瀽
+ EasyExcel.read(file.getInputStream(), DeviceCalibrationPlanDetailUpload.class, new AnalysisEventListener<DeviceCalibrationPlanDetailUpload>() {
+ @Override
+ public void invoke(DeviceCalibrationPlanDetailUpload detailsUpload, AnalysisContext analysisContext) {
+ // 鍒ゆ柇鏄惁涓虹┖
+ if (StringUtils.isNotBlank(detailsUpload.getDeviceName()) &&
+ StringUtils.isNotBlank(detailsUpload.getDeviceNumber())) {
+ // 瀵硅薄澶嶅埗
+ DeviceCalibrationPlanDetail calibrationPlanDetail = new DeviceCalibrationPlanDetail();
+ BeanUtils.copyProperties(detailsUpload, calibrationPlanDetail);
+ // 鏍煎紡璇濇渶杩戞瀹氭椂闂村拰鏈勾璁″垝鏍″噯鏃堕棿
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
+ calibrationPlanDetail.setLastDate(LocalDate.parse(detailsUpload.getLastDate(), formatter));
+ calibrationPlanDetail.setPlanDate(LocalDate.parse(detailsUpload.getLastDate(), formatter));
+
+ calibrationPlanDetail.setPlanId(calibrationPlan.getPlanId());
+ detailsUploadList.add(calibrationPlanDetail);
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+ }
+ }).sheet().doRead();
+ deviceCalibrationPlanDetailService.saveBatch(detailsUploadList);
+
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return true;
+ }
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @param deviceCalibrationPlan
+ * @return
+ */
+ @Override
+ public boolean submiatRatifyDeviceCalibrationPlan(DeviceCalibrationPlan deviceCalibrationPlan) {
+ baseMapper.update(null, Wrappers.<DeviceCalibrationPlan>lambdaUpdate()
+ .eq(DeviceCalibrationPlan::getPlanId, deviceCalibrationPlan.getPlanId())
+ .set(DeviceCalibrationPlan::getRatifyUserId, deviceCalibrationPlan.getRatifyUserId())
+ .set(DeviceCalibrationPlan::getRatifyRemark, null)
+ .set(DeviceCalibrationPlan::getRatifyStatus, null)
+ .set(DeviceCalibrationPlan::getRatifyTime, null)
+ );
+
+ DeviceCalibrationPlan calibrationPlan = baseMapper.selectById(deviceCalibrationPlan.getPlanId());
+
+ // 鍙戦�佹秷鎭�
+ 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(calibrationPlan.getPlanName() + "鐨勮澶囨牎鍑嗚鍒掑緟鎵瑰噯");
+ info.setSenderId(userId);
+ // 鎺ユ敹浜�
+ info.setConsigneeId(deviceCalibrationPlan.getRatifyUserId());
+ info.setJumpPath(MenuJumpPathConstants.DEVICE);
+ informationNotificationService.addInformationNotification(info);
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ鎺ユ敹浜�
+ User personnel = userMapper.selectById(deviceCalibrationPlan.getPlanId());
+
+ String message = "";
+ message += "CNAS璁惧鏍″噯璁″垝鎵瑰噯閫氱煡";
+ message += "\n璇峰幓璧勬簮绠$悊-璁惧涓�灞傜洰褰�-璁惧鏍″噯璁″垝濉啓";
+ message += "\n" + calibrationPlan.getPlanName() + "鐨勬牎鍑嗚鍒掑緟鎵瑰噯";
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(personnel.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ return true;
+ }
+
+ /**
+ * 璁惧鏍″噯璁″垝鎵瑰噯
+ * @param deviceCalibrationPlan
+ * @return
+ */
+ @Override
+ public boolean ratifyDeviceCalibrationPlan(DeviceCalibrationPlan deviceCalibrationPlan) {
+ baseMapper.update(null, Wrappers.<DeviceCalibrationPlan>lambdaUpdate()
+ .eq(DeviceCalibrationPlan::getPlanId, deviceCalibrationPlan.getPlanId())
+ .set(DeviceCalibrationPlan::getRatifyRemark, deviceCalibrationPlan.getRatifyRemark())
+ .set(DeviceCalibrationPlan::getRatifyStatus, deviceCalibrationPlan.getRatifyStatus())
+ .set(DeviceCalibrationPlan::getRatifyTime, LocalDateTime.now())
+ );
+ return true;
+ }
+
+ /**
+ * 璁惧鏍″噯璁″垝鍒楄〃
+ * @param page
+ * @param deviceCalibrationPlan
+ * @return
+ */
+ @Override
+ public IPage<DeviceCalibrationPlanDto> pageDeviceCalibrationPlan(Page page, DeviceCalibrationPlan deviceCalibrationPlan) {
+ return baseMapper.pageDeviceCalibrationPlan(page, QueryWrappers.queryWrappers(deviceCalibrationPlan));
+ }
+
+ /**
+ * 璁惧鏍″噯璁″垝璇︽儏鍒楄〃
+ * @param page
+ * @param deviceCalibrationPlanDetails
+ * @return
+ */
+ @Override
+ public IPage<DeviceCalibrationPlanDetail> pageDeviceCalibrationPlanDetail(Page page, DeviceCalibrationPlanDetail deviceCalibrationPlanDetails) {
+ if (deviceCalibrationPlanDetails.getPlanId() == null) {
+ return new Page();
+ }
+ return deviceCalibrationPlanDetailMapper.pageDeviceCalibrationPlanDetail(page, QueryWrappers.queryWrappers(deviceCalibrationPlanDetails));
+ }
+
+ /**
+ * 瀵煎嚭璁惧鏍″噯璁″垝
+ * @param deviceCalibrationPlanId
+ * @param response
+ */
+ @Override
+ public void exportDeviceCalibrationPlanDetail(Integer deviceCalibrationPlanId, HttpServletResponse response) {
+ // 鏌ヨ璁惧鏍″噯璁″垝
+ DeviceCalibrationPlan deviceCalibrationPlan = baseMapper.selectById(deviceCalibrationPlanId);
+ DeviceCalibrationPlanDto deviceCalibrationPlanDto = new DeviceCalibrationPlanDto();
+ BeanUtils.copyProperties(deviceCalibrationPlan, deviceCalibrationPlanDto);
+ // 璁剧疆缂栧埗鍜屾壒鍑嗘椂闂存牸寮�
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ deviceCalibrationPlanDto.setWriteTimeStr(deviceCalibrationPlan.getWriteTime() == null ? null : deviceCalibrationPlan.getWriteTime().format(formatter));
+ deviceCalibrationPlanDto.setRatifyTimeStr(deviceCalibrationPlan.getRatifyTime() == null ? null : deviceCalibrationPlan.getRatifyTime().format(formatter));
+
+ // 鏌ヨ璁惧鏍″噯璁″垝璇︽儏
+ List<DeviceCalibrationPlanDetail> deviceCalibrationPlanDetailList = deviceCalibrationPlanDetailMapper.selectList(Wrappers.<DeviceCalibrationPlanDetail>lambdaQuery()
+ .eq(DeviceCalibrationPlanDetail::getPlanId, deviceCalibrationPlanId)
+ .orderByAsc(DeviceCalibrationPlanDetail::getPlanDate));
+ // 璁剧疆搴忓彿 鍜� 鏃堕棿
+ ArrayList<DeviceCalibrationPlanDetailDto> deviceCalibrationPlanDetailDtoList = new ArrayList<>();
+ deviceCalibrationPlanDetailList.forEach(deviceCalibrationPlanDetail -> {
+ DeviceCalibrationPlanDetailDto deviceCalibrationPlanDetailDto = new DeviceCalibrationPlanDetailDto();
+ BeanUtils.copyProperties(deviceCalibrationPlanDetail, deviceCalibrationPlanDetailDto);
+ deviceCalibrationPlanDetailDto.setIndex(deviceCalibrationPlanDetailList.indexOf(deviceCalibrationPlanDetail) + 1);
+ deviceCalibrationPlanDetailDto.setLastDateStr(deviceCalibrationPlanDetail.getLastDate() == null ? null : deviceCalibrationPlanDetail.getLastDate().format(formatter));
+ deviceCalibrationPlanDetailDto.setPlanDateStr(deviceCalibrationPlanDetail.getPlanDate() == null ? null : deviceCalibrationPlanDetail.getPlanDate().format(formatter));
+ deviceCalibrationPlanDetailDtoList.add(deviceCalibrationPlanDetailDto);
+ });
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-calibration-plan.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceCalibrationPlanDetailDtoList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceCalibrationPlan", deviceCalibrationPlanDto);
+ put("deviceCalibrationPlanDetailDtoList", deviceCalibrationPlanDetailDtoList);
+ //鑾峰彇缂栧埗浜虹殑绛惧悕鍦板潃
+ put("organizationUrl", UserUtils.getFinalUserSignatureUrl(deviceCalibrationPlan.getRatifyUserId()));
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ put("approvedUrl", UserUtils.getFinalUserSignatureUrl(deviceCalibrationPlan.getWriteUserId()));
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ /**
+ * 鎵归噺缂栬緫璁惧鏍″噯
+ * @param calibrationPlanDto
+ * @return
+ */
+ @Override
+ public boolean updateDeviceCalibrationPlan(DeviceCalibrationPlanDto calibrationPlanDto) {
+ // 褰撳墠鐧诲綍鐢ㄦ埛
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 缂栧埗鏃ユ湡
+ calibrationPlanDto.setWriteUserId(userId);
+ calibrationPlanDto.setWriteTime(LocalDateTime.now());
+ baseMapper.updateById(calibrationPlanDto);
+
+ // 鍒犻櫎鍘熸湰鐨勮鎯�
+ deviceCalibrationPlanDetailService.remove(Wrappers.<DeviceCalibrationPlanDetail>lambdaQuery().eq(DeviceCalibrationPlanDetail::getPlanId, calibrationPlanDto.getPlanId()));
+
+ // 娣诲姞璇︽儏
+ if (CollectionUtils.isNotEmpty(calibrationPlanDto.getCalibrationPlanDetailList())) {
+ for (DeviceCalibrationPlanDetail calibrationPlanDetail : calibrationPlanDto.getCalibrationPlanDetailList()) {
+ calibrationPlanDetail.setPlanId(calibrationPlanDto.getPlanId());
+ }
+ deviceCalibrationPlanDetailService.saveBatch(calibrationPlanDto.getCalibrationPlanDetailList());
+ }
+ return true;
+ }
+
+ /**
+ * 鏌ヨ璁惧鏍″噯璇︽儏
+ * @param planId
+ * @return
+ */
+ @Override
+ public DeviceCalibrationPlanDto getDeviceCalibrationPlan(Integer planId) {
+ DeviceCalibrationPlan calibrationPlan = baseMapper.selectById(planId);
+ DeviceCalibrationPlanDto deviceCalibrationPlanDto = new DeviceCalibrationPlanDto();
+ BeanUtils.copyProperties(calibrationPlan, deviceCalibrationPlanDto);
+ // 鏌ヨ璇︽儏
+ List<DeviceCalibrationPlanDetail> list = deviceCalibrationPlanDetailService.list(Wrappers.<DeviceCalibrationPlanDetail>lambdaQuery()
+ .eq(DeviceCalibrationPlanDetail::getPlanId, planId)
+ .orderByAsc(DeviceCalibrationPlanDetail::getPlanDate));
+
+ deviceCalibrationPlanDto.setCalibrationPlanDetailList(list);
+ return deviceCalibrationPlanDto;
+ }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceDocumentsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceDocumentsServiceImpl.java
new file mode 100644
index 0000000..2e24439
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceDocumentsServiceImpl.java
@@ -0,0 +1,14 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceDocumentsMapper;
+import com.ruoyi.device.pojo.DeviceDocuments;
+import com.ruoyi.device.service.DeviceDocumentsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 璁惧妗f
+ */
+@Service
+public class DeviceDocumentsServiceImpl extends ServiceImpl<DeviceDocumentsMapper, DeviceDocuments> implements DeviceDocumentsService {
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanDetailsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanDetailsServiceImpl.java
new file mode 100644
index 0000000..c7fcca5
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanDetailsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import com.ruoyi.device.service.DeviceExaminePlanDetailsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:16
+ */
+@Service
+public class DeviceExaminePlanDetailsServiceImpl extends ServiceImpl<DeviceExaminePlanDetailsMapper, DeviceExaminePlanDetails> implements DeviceExaminePlanDetailsService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java
new file mode 100644
index 0000000..4a4d45b
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java
@@ -0,0 +1,349 @@
+package com.ruoyi.device.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.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.ruoyi.common.constant.MenuJumpPathConstants;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceExaminePlanDetailsDto;
+import com.ruoyi.device.dto.DeviceExaminePlanDto;
+import com.ruoyi.device.excel.upload.DeviceExaminePlanUpload;
+import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
+import com.ruoyi.device.mapper.DeviceExaminePlanMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceExaminePlan;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import com.ruoyi.device.service.DeviceExaminePlanDetailsService;
+import com.ruoyi.device.service.DeviceExaminePlanService;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁″垝涓昏〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:04
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceExaminePlanServiceImpl extends ServiceImpl<DeviceExaminePlanMapper, DeviceExaminePlan> implements DeviceExaminePlanService {
+
+ @Resource
+ private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
+ @Resource
+ private DeviceExaminePlanDetailsService deviceExaminePlanDetailsService;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ @Resource
+ private InformationNotificationService informationNotificationService;
+ @Resource
+ private DeviceMapper deviceMapper;
+ @Resource
+ private UserMapper userMapper;
+
+ /**
+ * 鏂板璁惧鏍告煡璁″垝
+ * @param examinePlanDto
+ * @return
+ */
+ @Override
+ public boolean addDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto) {
+ // 褰撳墠鐧诲綍鐢ㄦ埛
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 鏂囦欢鍚嶇О
+ examinePlanDto.setWriteUserId(userId);
+ examinePlanDto.setWriteTime(LocalDateTime.now());
+ baseMapper.insert(examinePlanDto);
+
+ // 娣诲姞璇︽儏
+ if (CollectionUtils.isNotEmpty(examinePlanDto.getExaminePlanDetailsList())) {
+ for (DeviceExaminePlanDetails deviceExaminePlanDetails : examinePlanDto.getExaminePlanDetailsList()) {
+ deviceExaminePlanDetails.setPlanId(examinePlanDto.getPlanId());
+ }
+ deviceExaminePlanDetailsService.saveBatch(examinePlanDto.getExaminePlanDetailsList());
+ }
+ return true;
+ }
+
+ /**
+ * 瀵煎叆璁惧鏍告煡璁″垝
+ * @param file
+ * @return
+ */
+ @Override
+ public boolean importDeviceExaminePlan(MultipartFile file) {
+ // 褰撳墠鐧诲綍鐢ㄦ埛
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 鏂囦欢鍚嶇О
+ String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
+ DeviceExaminePlan examinePlan = new DeviceExaminePlan();
+ examinePlan.setPlanName(fileName);
+ examinePlan.setWriteUserId(userId);
+ examinePlan.setWriteTime(LocalDateTime.now());
+ baseMapper.insert(examinePlan);
+
+ List<DeviceExaminePlanDetails> examinePlanDetails = new ArrayList<>();
+ // 瀵煎叆闄勪欢鍐呭
+ try {
+ // excel瑙f瀽
+ EasyExcel.read(file.getInputStream(), DeviceExaminePlanUpload.class, new AnalysisEventListener<DeviceExaminePlanUpload>() {
+ @Override
+ public void invoke(DeviceExaminePlanUpload detailsUpload, AnalysisContext analysisContext) {
+ // 鍒ゆ柇鏄惁涓虹┖
+ if (StringUtils.isNotBlank(detailsUpload.getDeviceName()) &&
+ StringUtils.isNotBlank(detailsUpload.getDeviceNumber())) {
+ // 瀵硅薄澶嶅埗
+ DeviceExaminePlanDetails planDetails = new DeviceExaminePlanDetails();
+ BeanUtils.copyProperties(detailsUpload, planDetails);
+
+ planDetails.setPlanId(examinePlan.getPlanId());
+ examinePlanDetails.add(planDetails);
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+ }
+ }).sheet().doRead();
+ for (DeviceExaminePlanDetails examinePlanDetail : examinePlanDetails) {
+ Device device = deviceMapper.selectOne(Wrappers.<Device>lambdaQuery()
+ .eq(Device::getManagementNumber, examinePlanDetail.getDeviceNumber().trim()));
+ if (device == null) {
+ throw new ErrorException("璁惧缂栧彿" + examinePlanDetail.getDeviceNumber() + "鏈煡璇㈠埌璁惧, 璇烽噸鏂板鍏�");
+ }
+ User user = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, examinePlanDetail.getCheckChargerUser()));
+ if (user == null) {
+ throw new ErrorException("璁惧缂栧彿" + examinePlanDetail.getDeviceNumber() + "鏈煡璇㈠埌鏍告煡浜�");
+ }
+ examinePlanDetail.setDeviceId(device.getId());
+ examinePlanDetail.setCheckChargerUserId(user.getId());
+ }
+
+ deviceExaminePlanDetailsService.saveBatch(examinePlanDetails);
+
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return true;
+ }
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @param deviceExaminePlan
+ * @return
+ */
+ @Override
+ public boolean submitRatifyDeviceExaminePlan(DeviceExaminePlan deviceExaminePlan) {
+ baseMapper.update(null, Wrappers.<DeviceExaminePlan>lambdaUpdate()
+ .eq(DeviceExaminePlan::getPlanId, deviceExaminePlan.getPlanId())
+ .set(DeviceExaminePlan::getRatifyUserId, deviceExaminePlan.getRatifyUserId())
+ .set(DeviceExaminePlan::getRatifyRemark, null)
+ .set(DeviceExaminePlan::getRatifyStatus, null)
+ .set(DeviceExaminePlan::getRatifyTime, null)
+ );
+
+ DeviceExaminePlan examinePlan = baseMapper.selectById(deviceExaminePlan.getPlanId());
+
+ // 鍙戦�佹秷鎭�
+ 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(examinePlan.getPlanName() + "鐨勮澶囨牳鏌ヨ鍒掑緟鎵瑰噯");
+ info.setSenderId(userId);
+ // 鎺ユ敹浜�
+ info.setConsigneeId(examinePlan.getRatifyUserId());
+ info.setJumpPath(MenuJumpPathConstants.DEVICE);
+ informationNotificationService.addInformationNotification(info);
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ鎺ユ敹浜�
+ User personnel = userMapper.selectById(examinePlan.getRatifyUserId());
+
+ String message = "";
+ message += "CNAS璁惧鏍告煡璁″垝鎵瑰噯閫氱煡";
+ message += "\n璇峰幓璧勬簮绠$悊-璁惧涓�灞傜洰褰�-璁惧鏍告煡璁″垝濉啓";
+ message += "\n" + examinePlan.getPlanName() + "鐨勬牎鍑嗘牳鏌ュ垝寰呮壒鍑�";
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(personnel.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ return false;
+ }
+
+ /**
+ * 璁惧鏍告煡璁″垝鎵瑰噯
+ * @param deviceExaminePlan
+ * @return
+ */
+ @Override
+ public boolean ratifyDeviceExaminePlan(DeviceExaminePlan deviceExaminePlan) {
+ // 褰撳墠鐧诲綍鐢ㄦ埛
+ baseMapper.update(null, Wrappers.<DeviceExaminePlan>lambdaUpdate()
+ .eq(DeviceExaminePlan::getPlanId, deviceExaminePlan.getPlanId())
+ .set(DeviceExaminePlan::getRatifyRemark, deviceExaminePlan.getRatifyRemark())
+ .set(DeviceExaminePlan::getRatifyStatus, deviceExaminePlan.getRatifyStatus())
+ .set(DeviceExaminePlan::getRatifyTime, LocalDateTime.now())
+ );
+ return true;
+ }
+
+ /**
+ * 璁惧鏍告煡璁″垝鍒楄〃
+ * @param page
+ * @param deviceExaminePlan
+ * @return
+ */
+ @Override
+ public IPage<DeviceExaminePlanDto> pageDeviceExaminePlan(Page page, DeviceExaminePlan deviceExaminePlan) {
+ return baseMapper.deviceExaminePlanDetailsMapper(page, QueryWrappers.queryWrappers(deviceExaminePlan));
+ }
+
+ /**
+ * 璁惧鏍告煡璁″垝璇︽儏鍒楄〃
+ * @param page
+ * @param deviceExaminePlanDetails
+ * @return
+ */
+ @Override
+ public IPage<DeviceExaminePlanDetailsDto> pageDeviceExaminePlanDetail(Page page, DeviceExaminePlanDetails deviceExaminePlanDetails) {
+ if (deviceExaminePlanDetails.getPlanId() == null) {
+ return new Page();
+ }
+ return deviceExaminePlanDetailsMapper.pageDeviceExaminePlanDetail(page, QueryWrappers.queryWrappers(deviceExaminePlanDetails));
+ }
+
+ /**
+ * 瀵煎嚭璁惧鏍告煡璁″垝
+ * @param deviceExaminePlanId 璁惧鏍告煡璁″垝id
+ * @param response 鍝嶅簲浣�
+ */
+ @Override
+ public void exportDeviceExaminePlanDetail(Integer deviceExaminePlanId, HttpServletResponse response) {
+ // 鏌ヨ璁惧鏍告煡璁″垝
+ DeviceExaminePlanDto deviceExaminePlanDto = baseMapper.selectExamineExaminePlanDto(deviceExaminePlanId);
+
+ // 鏌ヨ璁惧鏍告煡璁″垝璇︽儏
+ List<DeviceExaminePlanDetails> deviceExaminePlanDetailsList = deviceExaminePlanDetailsMapper.selectList(Wrappers.<DeviceExaminePlanDetails>lambdaQuery().eq(DeviceExaminePlanDetails::getPlanId, deviceExaminePlanId)
+ .orderByAsc(DeviceExaminePlanDetails::getCheckTime));
+ // 璁剧疆搴忓彿
+ ArrayList<DeviceExaminePlanDetailsDto> deviceExaminePlanDetailsDtoList = new ArrayList<>();
+ deviceExaminePlanDetailsList.forEach(deviceExamineRecordContrastDetail -> {
+ DeviceExaminePlanDetailsDto deviceExaminePlanDetailsDto = new DeviceExaminePlanDetailsDto();
+ BeanUtils.copyProperties(deviceExamineRecordContrastDetail, deviceExaminePlanDetailsDto);
+ deviceExaminePlanDetailsDto.setIndex(deviceExaminePlanDetailsList.indexOf(deviceExamineRecordContrastDetail) + 1);
+ deviceExaminePlanDetailsDtoList.add(deviceExaminePlanDetailsDto);
+ });
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/examine-plan-detail.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceExaminePlanDetailsDtoList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceExaminePlan", deviceExaminePlanDto);
+ put("deviceExaminePlanDetailsDtoList", deviceExaminePlanDetailsDtoList);
+ //鑾峰彇鏍告煡浜虹殑绛惧悕鍦板潃
+ put("writeUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExaminePlanDto.getWriteUserId()));
+ //鑾峰彇瀹℃煡浜虹殑绛惧悕鍦板潃
+ put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExaminePlanDto.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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public boolean updateDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto) {
+ // 褰撳墠鐧诲綍鐢ㄦ埛
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 鏂囦欢鍚嶇О
+ examinePlanDto.setWriteUserId(userId);
+ examinePlanDto.setWriteTime(LocalDateTime.now());
+ baseMapper.updateById(examinePlanDto);
+
+ deviceExaminePlanDetailsService.remove(Wrappers.<DeviceExaminePlanDetails>lambdaQuery()
+ .eq(DeviceExaminePlanDetails::getPlanId, examinePlanDto.getPlanId()));
+
+ // 娣诲姞璇︽儏
+ if (CollectionUtils.isNotEmpty(examinePlanDto.getExaminePlanDetailsList())) {
+ for (DeviceExaminePlanDetails deviceExaminePlanDetails : examinePlanDto.getExaminePlanDetailsList()) {
+ deviceExaminePlanDetails.setPlanId(examinePlanDto.getPlanId());
+ }
+ deviceExaminePlanDetailsService.saveBatch(examinePlanDto.getExaminePlanDetailsList());
+ }
+ return true;
+ }
+
+ @Override
+ public DeviceExaminePlanDto getDeviceExaminePlan(Integer planId) {
+ DeviceExaminePlan examinePlan = baseMapper.selectById(planId);
+ DeviceExaminePlanDto deviceExaminePlanDto = new DeviceExaminePlanDto();
+ BeanUtils.copyProperties(examinePlan, deviceExaminePlanDto);
+ // 鏌ヨ璇︽儏
+ List<DeviceExaminePlanDetails> list = deviceExaminePlanDetailsService.list(Wrappers.<DeviceExaminePlanDetails>lambdaQuery()
+ .eq(DeviceExaminePlanDetails::getPlanId, planId)
+ .orderByAsc(DeviceExaminePlanDetails::getCheckTime));
+ deviceExaminePlanDto.setExaminePlanDetailsList(list);
+
+ return deviceExaminePlanDto;
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastDetailsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastDetailsServiceImpl.java
new file mode 100644
index 0000000..db6c58a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastDetailsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceExamineRecordContrastDetailsMapper;
+import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
+import com.ruoyi.device.service.DeviceExamineRecordContrastDetailsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍瀵规瘮璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:57
+ */
+@Service
+public class DeviceExamineRecordContrastDetailsServiceImpl extends ServiceImpl<DeviceExamineRecordContrastDetailsMapper, DeviceExamineRecordContrastDetails> implements DeviceExamineRecordContrastDetailsService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java
new file mode 100644
index 0000000..193ab7a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java
@@ -0,0 +1,194 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceExamineRecordContrastDetailsDto;
+import com.ruoyi.device.dto.DeviceExamineRecordContrastDto;
+import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
+import com.ruoyi.device.mapper.DeviceExamineRecordContrastMapper;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import com.ruoyi.device.pojo.DeviceExamineRecordContrast;
+import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
+import com.ruoyi.device.service.DeviceExamineRecordContrastDetailsService;
+import com.ruoyi.device.service.DeviceExamineRecordContrastService;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍瀵规瘮琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:43
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceExamineRecordContrastServiceImpl extends ServiceImpl<DeviceExamineRecordContrastMapper, DeviceExamineRecordContrast> implements DeviceExamineRecordContrastService {
+
+ @Resource
+ private DeviceExamineRecordContrastDetailsService deviceExamineRecordContrastDetailsService;
+ @Resource
+ private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
+ @Resource
+ private UserMapper userMapper;
+ /**
+ * 鏌ヨ鏍告煡瀵规瘮璁板綍
+ * @return
+ */
+ @Override
+ public DeviceExamineRecordContrastDto getExamineRecordContrast(Integer planDetailsId) {
+ DeviceExamineRecordContrastDto contrastDto = baseMapper.getExamineRecordContrast(planDetailsId);
+ // 鍒ゆ柇鏄惁涓虹┖
+ if (contrastDto == null) {
+ contrastDto = new DeviceExamineRecordContrastDto();
+ // 鏌ヨ璁惧璇︽儏
+ DeviceExaminePlanDetails deviceExaminePlanDetails = deviceExaminePlanDetailsMapper.selectById(planDetailsId);
+ contrastDto.setPlanDetailsId(deviceExaminePlanDetails.getPlanDetailsId());
+
+ } else {
+ // 鏌ヨ璇︽儏
+ List<DeviceExamineRecordContrastDetails> list = deviceExamineRecordContrastDetailsService.list(Wrappers.<DeviceExamineRecordContrastDetails>lambdaQuery()
+ .eq(DeviceExamineRecordContrastDetails::getRecordContrastId, contrastDto.getRecordContrastId()));
+ contrastDto.setRecordContrastDetailsList(list);
+ }
+
+ return contrastDto;
+ }
+
+ /**
+ * 鏂板鏍告煡瀵规瘮璁板綍
+ * @return
+ */
+ @Override
+ public boolean addExamineRecordContrast(DeviceExamineRecordContrastDto dto) {
+ if (dto.getPlanDetailsId() == null) {
+ throw new ErrorException("缂哄皯璁″垝璇︾粏淇℃伅id");
+ }
+ if (dto.getRecordContrastId() == null) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ dto.setCheckerUserId(userId);
+ dto.setCheckerUser(user.getName());
+
+ // 鏌ヨ瀹℃煡浜篿d
+ if (dto.getReviewUserId() != null) {
+ User reviewUser = userMapper.selectById(dto.getReviewUserId());
+ dto.setReviewUser(reviewUser.getName());
+ }
+ }
+ this.saveOrUpdate(dto);
+
+ // 鍒犻櫎鍏ㄩ儴璇︽儏
+ deviceExamineRecordContrastDetailsService.remove(Wrappers.<DeviceExamineRecordContrastDetails>lambdaQuery()
+ .eq(DeviceExamineRecordContrastDetails::getRecordContrastId, dto.getRecordContrastId()));
+ //娣诲姞璇︽儏
+ if (CollectionUtils.isNotEmpty(dto.getRecordContrastDetailsList())) {
+ for (DeviceExamineRecordContrastDetails details : dto.getRecordContrastDetailsList()) {
+ details.setRecordContrastId(dto.getRecordContrastId());
+ }
+ deviceExamineRecordContrastDetailsService.saveBatch(dto.getRecordContrastDetailsList());
+ }
+ return false;
+ }
+
+
+ /**
+ * 瀹℃牳鏍告煡瀵规瘮璁板綍
+ * @return
+ */
+ @Override
+ public boolean reviewExamineRecordContrast(DeviceExamineRecordContrastDto dto) {
+ if (dto.getPlanDetailsId() == null) {
+ throw new ErrorException("缂哄皯璁″垝璇︾粏淇℃伅id");
+ }
+ LambdaUpdateWrapper<DeviceExamineRecordContrast> wrapper = Wrappers.<DeviceExamineRecordContrast>lambdaUpdate()
+ .eq(DeviceExamineRecordContrast::getPlanDetailsId, dto.getPlanDetailsId())
+ .set(DeviceExamineRecordContrast::getReviewStatus, dto.getReviewStatus())
+ .set(DeviceExamineRecordContrast::getReviewRemark, dto.getReviewRemark())
+ .set(DeviceExamineRecordContrast::getReviewTime, LocalDateTime.now());
+ // 涓�0娓呴櫎瀹℃牳浜�
+ if (dto.getReviewStatus().equals(0)) {
+ wrapper.set(DeviceExamineRecordContrast::getReviewUserId, null)
+ .set(DeviceExamineRecordContrast::getReviewUser, null);
+ }
+
+ this.update(wrapper);
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭瀹℃牳鏍告煡瀵规瘮璁板綍
+ *
+ * @param planDetailsId 璇︽儏id
+ * @param response
+ */
+ @Override
+ public void exportReviewExamineRecordContrast(Integer planDetailsId, HttpServletResponse response) {
+ // 鏌ヨ瀵规瘮璁板綍
+ DeviceExamineRecordContrastDto deviceExamineRecordContrast = baseMapper.selectExamineRecordContrastDto(planDetailsId);
+
+ // 鏌ヨ瀵规瘮璁板綍璇︽儏
+ List<DeviceExamineRecordContrastDetails> deviceExamineRecordContrastDetailList = deviceExamineRecordContrastDetailsService.list(Wrappers.<DeviceExamineRecordContrastDetails>lambdaQuery().eq(DeviceExamineRecordContrastDetails::getRecordContrastId, deviceExamineRecordContrast.getRecordContrastId()));
+ // 璁剧疆搴忓彿
+ ArrayList<DeviceExamineRecordContrastDetailsDto> deviceExamineRecordContrastDetailsDtoList = new ArrayList<>();
+ deviceExamineRecordContrastDetailList.forEach(deviceExamineRecordContrastDetail -> {
+ DeviceExamineRecordContrastDetailsDto deviceExamineRecordContrastDetailsDto = new DeviceExamineRecordContrastDetailsDto();
+ BeanUtils.copyProperties(deviceExamineRecordContrastDetail, deviceExamineRecordContrastDetailsDto);
+ deviceExamineRecordContrastDetailsDto.setIndex(deviceExamineRecordContrastDetailList.indexOf(deviceExamineRecordContrastDetail) + 1);
+ deviceExamineRecordContrastDetailsDtoList.add(deviceExamineRecordContrastDetailsDto);
+ });
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/review-examine-record-contrast.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceExamineRecordContrastDetailsDtoList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceExamineRecordContrast", deviceExamineRecordContrast);
+ put("deviceExamineRecordContrastDetailsDtoList", deviceExamineRecordContrastDetailsDtoList);
+ //鑾峰彇鏍告煡浜虹殑绛惧悕鍦板潃
+ put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordContrast.getCheckerUserId()));
+ //鑾峰彇瀹℃煡浜虹殑绛惧悕鍦板潃
+ put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordContrast.getReviewUserId()));
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordDetailServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordDetailServiceImpl.java
new file mode 100644
index 0000000..1ef62d5
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceExamineRecordDetailMapper;
+import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
+import com.ruoyi.device.service.DeviceExamineRecordDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:15:11
+ */
+@Service
+public class DeviceExamineRecordDetailServiceImpl extends ServiceImpl<DeviceExamineRecordDetailMapper, DeviceExamineRecordDetail> implements DeviceExamineRecordDetailService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
new file mode 100644
index 0000000..790f995
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
@@ -0,0 +1,238 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.constant.MenuJumpPathConstants;
+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.device.dto.DeviceExamineRecordDto;
+import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
+import com.ruoyi.device.mapper.DeviceExamineRecordMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import com.ruoyi.device.pojo.DeviceExamineRecord;
+import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
+import com.ruoyi.device.service.DeviceExamineRecordDetailService;
+import com.ruoyi.device.service.DeviceExamineRecordService;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.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-12-16 07:14:28
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceExamineRecordServiceImpl extends ServiceImpl<DeviceExamineRecordMapper, DeviceExamineRecord> implements DeviceExamineRecordService {
+
+ @Resource
+ private DeviceExamineRecordDetailService deviceExamineRecordDetailService;
+ @Resource
+ private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
+ @Resource
+ private DeviceMapper deviceMapper;
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+ @Resource
+ private InformationNotificationService informationNotificationService;
+
+ /**
+ * 鏌ヨ鏍告煡璁板綍
+ *
+ * @return
+ */
+ @Override
+ public DeviceExamineRecordDto getExamineRecord(Integer planDetailsId) {
+ DeviceExamineRecordDto deviceExamineRecord = baseMapper.getExamineRecord(planDetailsId);
+
+ // 鍒ゆ柇鏄惁涓虹┖
+ if (deviceExamineRecord == null) {
+ deviceExamineRecord = new DeviceExamineRecordDto();
+ // 鏌ヨ璁惧璇︽儏
+ DeviceExaminePlanDetails deviceExaminePlanDetails = deviceExaminePlanDetailsMapper.selectById(planDetailsId);
+ Device device = deviceMapper.selectById(deviceExaminePlanDetails.getDeviceId());
+ if (device != null) {
+ deviceExamineRecord.setDeviceName(device.getDeviceName());
+ deviceExamineRecord.setDeviceNumber(device.getManagementNumber());
+ deviceExamineRecord.setPlanDetailsId(deviceExaminePlanDetails.getPlanDetailsId());
+ }
+ } else {
+ // 鏌ヨ璇︽儏
+ List<DeviceExamineRecordDetail> list = deviceExamineRecordDetailService.list(Wrappers.<DeviceExamineRecordDetail>lambdaQuery()
+ .eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecord.getRecordId()));
+ deviceExamineRecord.setRecordDetailList(list);
+ }
+
+ return deviceExamineRecord;
+ }
+
+ /**
+ * 鏂板鏍告煡璁板綍
+ *
+ * @return
+ */
+ @Override
+ public boolean addExamineRecord(DeviceExamineRecordDto deviceExamineRecordDto) {
+ if (deviceExamineRecordDto.getPlanDetailsId() == null) {
+ throw new ErrorException("缂哄皯璁″垝璇︾粏淇℃伅id");
+ }
+ if (deviceExamineRecordDto.getRecordId() == null) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(SecurityUtils.getUserId());
+ deviceExamineRecordDto.setCheckerUserId(userId);
+ deviceExamineRecordDto.setCheckerUser(user.getName());
+
+ // 鏌ヨ瀹℃煡浜篿d
+ if (deviceExamineRecordDto.getReviewUserId() != null) {
+ User reviewUser = userMapper.selectById(deviceExamineRecordDto.getReviewUserId());
+ deviceExamineRecordDto.setReviewUser(reviewUser.getName());
+
+ // 娑堟伅鍙戦��
+ InformationNotification info = new InformationNotification();
+ // 鍙戦�佷汉
+ info.setCreateUser(user.getName());
+ info.setMessageType("6");
+ info.setTheme("CNAS璁惧鏍告煡璁″垝寰呮壒鍑�");
+ info.setContent("璁惧缂栧彿涓�: " + deviceExamineRecordDto.getDeviceNumber() + " 璁惧鏍告煡璁″垝寰呭鎵�");
+ info.setSenderId(userId);
+ // 鎺ユ敹浜�
+ info.setConsigneeId(deviceExamineRecordDto.getReviewUserId());
+ info.setJumpPath(MenuJumpPathConstants.DEVICE);
+ informationNotificationService.addInformationNotification(info);
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ鍙戦�佷汉
+ User people = userMapper.selectById(deviceExamineRecordDto.getReviewUserId());
+ String message = "";
+ message += "CNAS璁惧鏍告煡璁″垝寰呮壒鍑�";
+ message += "\n璇峰幓璧勬簮瑕佹眰-璁惧-璁惧鏍告煡璁″垝瀹℃壒";
+ message += "\n" + "璁惧缂栧彿涓�: " + deviceExamineRecordDto.getDeviceNumber() + "璁惧鏍告煡璁″垝寰呭鎵�";
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(people.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+
+ }
+ this.saveOrUpdate(deviceExamineRecordDto);
+
+ // 鍒犻櫎鍏ㄩ儴璇︽儏
+ deviceExamineRecordDetailService.remove(Wrappers.<DeviceExamineRecordDetail>lambdaQuery()
+ .eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId()));
+ //娣诲姞璇︽儏
+ if (CollectionUtils.isNotEmpty(deviceExamineRecordDto.getRecordDetailList())) {
+ for (DeviceExamineRecordDetail deviceExamineRecordDetail : deviceExamineRecordDto.getRecordDetailList()) {
+ deviceExamineRecordDetail.setRecordId(deviceExamineRecordDto.getRecordId());
+ }
+ deviceExamineRecordDetailService.saveBatch(deviceExamineRecordDto.getRecordDetailList());
+ }
+
+ return true;
+ }
+
+
+ /**
+ * 澶嶆牳鏍告煡璁板綍
+ *
+ * @return
+ */
+ @Override
+ public boolean reviewExamineRecord(DeviceExamineRecordDto dto) {
+ if (dto.getPlanDetailsId() == null) {
+ throw new ErrorException("缂哄皯璁″垝璇︾粏淇℃伅id");
+ }
+ LambdaUpdateWrapper<DeviceExamineRecord> wrapper = Wrappers.<DeviceExamineRecord>lambdaUpdate()
+ .eq(DeviceExamineRecord::getPlanDetailsId, dto.getPlanDetailsId())
+ .set(DeviceExamineRecord::getReviewStatus, dto.getReviewStatus())
+ .set(DeviceExamineRecord::getReviewRemark, dto.getReviewRemark());
+
+ // 涓�0娓呴櫎瀹℃牳浜�
+ if (dto.getReviewStatus().equals(0)) {
+ wrapper.set(DeviceExamineRecord::getReviewUserId, null)
+ .set(DeviceExamineRecord::getReviewUser, null);
+ }
+
+ this.update(wrapper);
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭澶嶆牳鏍告煡璁板綍
+ *
+ * @param planDetailsId 澶嶆牳鏍告煡璁板綍id
+ * @return
+ */
+ @Override
+ public void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response) {
+ // 鏌ヨ澶嶆牳鏍告煡璁板綍
+ DeviceExamineRecordDto deviceExamineRecordDto = baseMapper.selectReviewExamineRecordDto(planDetailsId);
+
+ // 鏌ヨ澶嶆牳鏍告煡璁板綍璇︽儏
+ List<DeviceExamineRecordDetail> deviceExamineRecordDetailList = deviceExamineRecordDetailService.list(Wrappers.<DeviceExamineRecordDetail>lambdaQuery().eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId()));
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/examine-record.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceExamineRecordDetailList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceExamineRecordDto", deviceExamineRecordDto);
+ put("deviceExamineRecordDetailList", deviceExamineRecordDetailList);
+ //鑾峰彇鏍告煡浜虹殑绛惧悕鍦板潃
+ put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getCheckerUserId()));
+ //鑾峰彇瀹℃煡浜虹殑绛惧悕鍦板潃
+ put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getReviewUserId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String deviceName = StringUtils.isNotEmpty(deviceExamineRecordDto.getDeviceName()) ? deviceExamineRecordDto.getDeviceName() : "";
+ String fileName = URLEncoder.encode(
+ deviceName+ "鏍告煡璁板綍", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java
new file mode 100644
index 0000000..6129e7c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java
@@ -0,0 +1,162 @@
+package com.ruoyi.device.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.mapper.DeviceExternalApplyMapper;
+import com.ruoyi.device.pojo.DeviceExternalApply;
+import com.ruoyi.device.service.DeviceExternalApplyService;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 鍒╃敤澶栭儴璁惧鐢宠琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 10:28:43
+ */
+@Service
+public class DeviceExternalApplyServiceImpl extends ServiceImpl<DeviceExternalApplyMapper, DeviceExternalApply> implements DeviceExternalApplyService {
+
+ @Resource
+ private UserMapper userMapper;
+
+ /**
+ * 鍒╃敤澶栭儴璁惧鐢宠鍒楄〃
+ * @param page
+ * @param deviceExternalApply
+ * @return
+ */
+ @Override
+ public IPage<DeviceExternalApply> pageDeviceExternalApply(Page page, DeviceExternalApply deviceExternalApply) {
+ return baseMapper.pageDeviceExternalApply(page, QueryWrappers.queryWrappers(deviceExternalApply));
+ }
+
+ /**
+ * 鏂板鍒╃敤澶栭儴璁惧鐢宠
+ * @param deviceExternalApply
+ * @return
+ */
+ @Override
+ public boolean addDeviceExternalApply(DeviceExternalApply deviceExternalApply) {
+ DeviceExternalApply apply = new DeviceExternalApply();
+ // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+ User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+ switch (deviceExternalApply.getFlowType()) {
+ case 0:
+ BeanUtils.copyProperties(deviceExternalApply, apply);
+ // 鐢宠
+ apply.setUseReason(deviceExternalApply.getUseReason());
+ apply.setApplicantUserId(user.getId());
+ apply.setApplicantUser(user.getName());
+ apply.setApplicantDate(LocalDate.now());
+
+ // 澶勭悊浜轰俊鎭�
+ User departmentHeadUser = userMapper.selectById(deviceExternalApply.getDepartmentHeadUserId());
+ apply.setApplicantUserId(departmentHeadUser.getId());
+ apply.setApplicantUser(departmentHeadUser.getName());
+
+ baseMapper.insert(apply);
+ break;
+ case 1:
+ apply.setExternalApplyId(deviceExternalApply.getExternalApplyId());
+ // 鐢宠閮ㄩ棬璐熻矗浜烘剰瑙�
+ apply.setDepartmentHeadOpinion(deviceExternalApply.getDepartmentHeadOpinion());
+ apply.setDepartmentHeadDate(LocalDate.now());
+
+ // 璁¢噺瀹や俊鎭�
+ User meteringRoomUser = userMapper.selectById(deviceExternalApply.getMeteringRoomUserId());
+ apply.setMeteringRoomUserId(meteringRoomUser.getId());
+ apply.setMeteringRoomUser(meteringRoomUser.getName());
+
+ baseMapper.updateById(apply);
+ break;
+ case 2:
+ apply.setExternalApplyId(deviceExternalApply.getExternalApplyId());
+ // 璁¢噺瀹ゆ剰瑙�
+ apply.setMeteringRoomOpinion(deviceExternalApply.getMeteringRoomOpinion());
+ apply.setMeteringRoomDate(LocalDate.now());
+
+ // 鎵瑰噯浜轰俊鎭�
+ User approverUser = userMapper.selectById(deviceExternalApply.getApproverUserId());
+ apply.setApproverUserId(approverUser.getId());
+ apply.setApproverUser(approverUser.getName());
+
+ baseMapper.updateById(apply);
+ break;
+ case 3:
+ apply.setExternalApplyId(deviceExternalApply.getExternalApplyId());
+ //鎵瑰噯浜�
+ apply.setApproverOpinion(deviceExternalApply.getApproverOpinion());
+ apply.setApproverDate(LocalDate.now());
+
+ apply.setIsFinish(1);
+ baseMapper.updateById(apply);
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭鍒╃敤澶栭儴璁惧鐢宠
+ *
+ * @param externalApplyId 澶栭儴璁惧鐢宠id
+ * @param response
+ */
+ @Override
+ public void exportDeviceExternalApply(Integer externalApplyId, HttpServletResponse response) {
+ // 鏌ヨ澶栭儴璁惧鐢宠
+ DeviceExternalApply deviceAccidentReport = baseMapper.selectDeviceExternalById(externalApplyId);
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-external-apply.docx");
+ Configure configure = Configure.builder()
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceAccidentReport", deviceAccidentReport);
+ // 鐢宠浜虹鍚�
+ put("applicantUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getApplicantUserId()));
+ // 閮ㄩ棬璐熻矗浜虹鍚�
+ put("departmentHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
+ // 璁¢噺瀹や汉绛惧悕
+ put("meteringRoomUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getMeteringRoomUserId()));
+ // 鎵瑰噯浜虹鍚�
+ put("approverUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getApproverUserId()));
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerDetailsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerDetailsServiceImpl.java
new file mode 100644
index 0000000..6ce1670
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerDetailsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.ruoyi.device.mapper.DeviceImpowerDetailsMapper;
+import com.ruoyi.device.service.DeviceImpowerDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:39
+ */
+@Service
+public class DeviceImpowerDetailsServiceImpl extends ServiceImpl<DeviceImpowerDetailsMapper, DeviceImpowerDetails> implements DeviceImpowerDetailsService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
new file mode 100644
index 0000000..ae3b60d
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
@@ -0,0 +1,299 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.constant.MenuJumpPathConstants;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceImpowerDetailsDto;
+import com.ruoyi.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.mapper.DeviceImpowerDetailsMapper;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.mapper.DeviceImpowerMapper;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.ruoyi.device.service.DeviceImpowerService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.service.DeviceImpowerDetailsService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 璁惧浣跨敤琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceImpowerServiceImpl extends ServiceImpl<DeviceImpowerMapper, DeviceImpower> implements DeviceImpowerService {
+
+
+ @Resource
+ private DeviceImpowerDetailsService deviceImpowerDetailsService;
+
+ @Resource
+ private DeviceImpowerDetailsMapper deviceImpowerDetailsMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ @Resource
+ private InformationNotificationService informationNotificationService;
+
+ @Resource
+ private UserMapper userMapper;
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧浣跨敤
+ *
+ * @param page
+ * @return
+ */
+ @Override
+ public Result<IPage<DeviceImpower>> selectDeviceImpowerByPage(Page page, DeviceImpowerDto deviceImpowerDto) {
+ IPage<DeviceImpower> iPage = baseMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceImpowerDto));
+ return Result.success(iPage);
+ }
+
+
+ /**
+ * 鏂板璁惧浣跨敤
+ *
+ * @param deviceImpowerDto 璁惧浣跨敤
+ */
+ @Override
+ public Result addImpower(DeviceImpowerDto deviceImpowerDto) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ deviceImpowerDto.setCompilerId(userId);
+ deviceImpowerDto.setCompiler(user.getName());
+ deviceImpowerDto.setDatePreparation(LocalDateTime.now());
+
+ // 鏌ヨ瀹℃牳浜篿d
+ if (deviceImpowerDto.getAuditId() != null) {
+ User auditUser = userMapper.selectById(deviceImpowerDto.getAuditId());
+ deviceImpowerDto.setAudit(auditUser.getName());
+ }
+ this.saveOrUpdate(deviceImpowerDto);
+
+ // 璇︽儏璧嬪�煎苟淇濆瓨
+ List<DeviceImpowerDetailsDto> deviceImpowerDetails = deviceImpowerDto.getDeviceImpowerDetails();
+ if (CollectionUtils.isNotEmpty(deviceImpowerDetails)) { // 璇︽儏涓嶄负绌�
+ List<DeviceImpowerDetails> collect = deviceImpowerDetails.stream().map(detailsDto -> {
+ detailsDto.setImpowerId(deviceImpowerDto.getImpowerId()); // 浣跨敤ID
+ DeviceImpowerDetails details = new DeviceImpowerDetails();
+ BeanUtils.copyProperties(detailsDto, details);
+ return details;
+ }).collect(Collectors.toList());
+ deviceImpowerDetailsService.saveBatch(collect);
+ }
+
+ return Result.success();
+ }
+
+ /**
+ * 淇敼璁惧浣跨敤
+ *
+ * @param deviceImpowerDto 璁惧浣跨敤
+ */
+ @Override
+ public Result updateImpower(DeviceImpowerDto deviceImpowerDto) {
+ // 鏌ヨ瀹℃牳浜篿d
+ if (deviceImpowerDto.getAuditId() != null) {
+ User auditUser = userMapper.selectById(deviceImpowerDto.getAuditId());
+ deviceImpowerDto.setAudit(auditUser.getName());
+ }
+ this.saveOrUpdate(deviceImpowerDto);
+
+ // 鍒犻櫎鍘熸湰鐨勮鎯�
+ deviceImpowerDetailsService.remove(Wrappers.<DeviceImpowerDetails>lambdaQuery().eq(DeviceImpowerDetails::getImpowerId, deviceImpowerDto.getImpowerId()));
+ // 璇︽儏璧嬪�煎苟淇濆瓨
+ List<DeviceImpowerDetailsDto> deviceImpowerDetails = deviceImpowerDto.getDeviceImpowerDetails();
+ if (CollectionUtils.isNotEmpty(deviceImpowerDetails)) { // 璇︽儏涓嶄负绌�
+ List<DeviceImpowerDetails> collect = deviceImpowerDetails.stream().map(detailsDto -> {
+ detailsDto.setImpowerId(deviceImpowerDto.getImpowerId()); // 浣跨敤ID
+ DeviceImpowerDetails details = new DeviceImpowerDetails();
+ BeanUtils.copyProperties(detailsDto, details);
+ return details;
+ }).collect(Collectors.toList());
+ deviceImpowerDetailsService.saveBatch(collect);
+ }
+ return Result.success();
+ }
+
+ /**
+ * 鍒犻櫎璁惧浣跨敤
+ *
+ * @param deviceImpowerDto 璁惧浣跨敤
+ */
+ @Override
+ public Result deleteImpower(DeviceImpowerDto deviceImpowerDto) {
+ this.removeById(deviceImpowerDto);
+ deviceImpowerDetailsService.remove(Wrappers.<DeviceImpowerDetails>lambdaQuery().eq(DeviceImpowerDetails::getImpowerId, deviceImpowerDto.getImpowerId()));
+ return Result.success();
+ }
+
+ /**
+ * 鏌ヨ璁惧浣跨敤璇︽儏
+ *
+ * @param impowerId 璁惧浣跨敤id
+ */
+ @Override
+ public Result<DeviceImpowerDto> getImpowerDetail(Integer impowerId) {
+ // 鏌ヨ璁惧浣跨敤
+ DeviceImpower deviceImpower = baseMapper.selectById(impowerId);
+ // 鏌ヨ璇︽儏
+ DeviceImpowerDto deviceImpowerDto = new DeviceImpowerDto();
+ BeanUtils.copyProperties(deviceImpower, deviceImpowerDto);
+ deviceImpowerDto.setDeviceImpowerDetails(deviceImpowerDetailsMapper.deviceImpowerDetailsList(impowerId));
+ return Result.success(deviceImpowerDto);
+ }
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @param deviceImpowerDto
+ * @return
+ */
+ @Override
+ public Result submitReviewImpowerStatus(DeviceImpowerDto deviceImpowerDto) {
+ User audit = userMapper.selectById(deviceImpowerDto.getAuditId());
+ this.update(Wrappers.<DeviceImpower>lambdaUpdate()
+ .eq(DeviceImpower::getImpowerId, deviceImpowerDto.getImpowerId())
+ .set(DeviceImpower::getAuditId, audit.getId())
+ .set(DeviceImpower::getAudit, audit.getName())
+ .set(DeviceImpower::getAuditDate, null)
+ .set(DeviceImpower::getStatus, null)
+ .set(DeviceImpower::getAuditRemark, null));
+
+ DeviceImpower deviceImpower = baseMapper.selectById(deviceImpowerDto.getImpowerId());
+
+// // 鍙戦�佹秷鎭�
+// 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(deviceImpower.getPlanYear() + "骞寸殑璁惧浣跨敤寰呮壒鍑�");
+// info.setSenderId(userId);
+// // 鎺ユ敹浜�
+// info.setConsigneeId(audit.getId());
+// info.setJumpPath(MenuJumpPathConstants.DEVICE);
+// informationNotificationService.addInformationNotification(info);
+//
+// // 鍙戦�佷紒涓氬井淇¢�氱煡
+// threadPoolTaskExecutor.execute(() -> {
+// String message = "";
+// message += "CNAS璁惧浣跨敤鏍搁�氱煡";
+// message += "\n璇峰幓璧勬簮绠$悊-璁惧涓�灞傜洰褰�-璁惧浣跨敤濉啓";
+// message += "\n" + deviceImpower.getPlanYear() + "骞寸殑璁惧浣跨敤寰呮壒鍑�";
+// //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+// try {
+// WxCpUtils.inform(audit.getAccount(), message, null);
+// } catch (Exception e) {
+// throw new RuntimeException(e);
+// }
+// });
+ return Result.success();
+ }
+
+ /**
+ *
+ *
+ * @param deviceImpowerDto
+ */
+ @Override
+ public Result reviewImpowerStatus(DeviceImpowerDto deviceImpowerDto) {
+ LambdaUpdateWrapper<DeviceImpower> wrapper = Wrappers.<DeviceImpower>lambdaUpdate()
+ .eq(DeviceImpower::getImpowerId, deviceImpowerDto.getImpowerId())
+ .set(DeviceImpower::getAuditDate, LocalDateTime.now())
+ .set(DeviceImpower::getStatus, deviceImpowerDto.getStatus()) // 瀹℃牳鐘舵��
+ .set(DeviceImpower::getAuditRemark, deviceImpowerDto.getAuditRemark());// 瀹℃牳澶囨敞
+
+ this.update(wrapper); // 鏇存柊
+ return Result.success();
+ }
+
+ /**
+ * 瀵煎嚭璁惧浣跨敤
+ *
+ * @param impowerId 璁惧浣跨敤id
+ */
+ @Override
+ public void exportDeviceImpowerDto(Integer impowerId, HttpServletResponse response) {
+ // 鏌ヨ璁惧浣跨敤鎺堟潈璁″垝
+ DeviceImpower deviceImpower = baseMapper.selectById(impowerId);
+ DeviceImpowerDto deviceImpowerDto = new DeviceImpowerDto();
+ BeanUtils.copyProperties(deviceImpower, deviceImpowerDto);
+ // 鏍煎紡鍖栨棩鏈熶腑鑻辨枃
+ DateTimeFormatter formatterCH = DateTimeFormatter.ofPattern("yyyy 骞� MM 鏈� dd 鏃�");
+ DateTimeFormatter formatterEN = DateTimeFormatter.ofPattern("yyyy 'Year' MM 'Month' dd 'Day'");
+ deviceImpowerDto.setAuditDateCH(deviceImpower.getAuditDate() == null ? null : deviceImpower.getAuditDate().format(formatterCH));
+ deviceImpowerDto.setAuditDateEN(deviceImpower.getAuditDate() == null ? null : deviceImpower.getAuditDate().format(formatterEN));
+
+ // 鏌ヨ璁惧淇濆吇璁″垝璇︽儏
+ List<DeviceImpowerDetailsDto> deviceImpowerDetailsDtoList = deviceImpowerDetailsMapper.deviceImpowerDetailsList(impowerId);
+ // 璁剧疆搴忓彿
+ deviceImpowerDetailsDtoList.forEach(deviceImpowerDetails -> {
+ deviceImpowerDetails.setIndex(deviceImpowerDetailsDtoList.indexOf(deviceImpowerDetails) + 1);
+ });
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-impower.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceImpowerDetailsDtoList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceImpower", deviceImpowerDto);
+ put("deviceImpowerDetailsDtoList", deviceImpowerDetailsDtoList);
+ // 鎺堟潈浜哄湴鍧�
+ put("auditUrl", UserUtils.getFinalUserSignatureUrl(deviceImpower.getAuditId()));
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordDetailsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordDetailsServiceImpl.java
new file mode 100644
index 0000000..9058081
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordDetailsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceInspectionRecordDetailsMapper;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+import com.ruoyi.device.service.DeviceInspectionRecordDetailsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:27:32
+ */
+@Service
+public class DeviceInspectionRecordDetailsServiceImpl extends ServiceImpl<DeviceInspectionRecordDetailsMapper, DeviceInspectionRecordDetails> implements DeviceInspectionRecordDetailsService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java
new file mode 100644
index 0000000..ea2697b
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java
@@ -0,0 +1,225 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceInspectionRecordDto;
+import com.ruoyi.device.mapper.DeviceInspectionRecordMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+import com.ruoyi.device.service.DeviceInspectionRecordDetailsService;
+import com.ruoyi.device.service.DeviceInspectionRecordService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧鐐规璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceInspectionRecordServiceImpl extends ServiceImpl<DeviceInspectionRecordMapper, DeviceInspectionRecord> implements DeviceInspectionRecordService {
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private DeviceMapper deviceMapper;
+ @Resource
+ private DeviceInspectionRecordDetailsService deviceInspectionRecordDetailsService;
+ @Resource
+ private DeviceInspectionRecordMapper deviceInspectionRecordMapper;
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+ *
+ * @param page 褰撳墠椤电爜
+ */
+ @Override
+ public Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(Page page, DeviceInspectionRecordDto deviceInspectionRecordDto) {
+ IPage<DeviceInspectionRecord> iPage = deviceInspectionRecordMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceInspectionRecordDto));
+ return Result.success(iPage);
+ }
+
+
+ /**
+ * 鏌ヨ鐐规璇︽儏
+ * @param inspectionRecordId
+ * @return
+ */
+ @Override
+ public Result getDeviceInspectionRecord(Integer inspectionRecordId) {
+ DeviceInspectionRecord deviceInspectionRecord = baseMapper.selectById(inspectionRecordId);
+ DeviceInspectionRecordDto dto = new DeviceInspectionRecordDto();
+ BeanUtils.copyProperties(deviceInspectionRecord, dto);
+ List<DeviceInspectionRecordDetails> list = deviceInspectionRecordDetailsService.list(Wrappers.<DeviceInspectionRecordDetails>lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, inspectionRecordId));
+ dto.setDetails(list);
+ return Result.success(dto);
+ }
+
+ /**
+ * 鏂板璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result addDeviceInspectionRecord(DeviceInspectionRecordDto deviceInspectionRecord) {
+
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ deviceInspectionRecord.setRecorderId(userId);
+ deviceInspectionRecord.setRecorder(user.getName());
+
+ // 鏌ヨ澶嶆牳浜篿d
+ if (deviceInspectionRecord.getReviewerId() != null) {
+ User reviewUser = userMapper.selectById(deviceInspectionRecord.getReviewerId());
+ deviceInspectionRecord.setReviewer(reviewUser.getName());
+ }
+ this.saveOrUpdate(deviceInspectionRecord);
+ if (CollectionUtils.isNotEmpty(deviceInspectionRecord.getDetails())) {
+ for (DeviceInspectionRecordDetails detail : deviceInspectionRecord.getDetails()) {
+ detail.setInspectionRecordId(deviceInspectionRecord.getInspectionRecordId());
+ }
+ deviceInspectionRecordDetailsService.saveBatch( deviceInspectionRecord.getDetails());
+ }
+
+ return Result.success();
+ }
+
+
+ /**
+ * 淇敼璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ @Override
+ public Result updateInspectionRecordAndDetails(DeviceInspectionRecordDto deviceInspectionRecord) {
+ // 鏌ヨ澶嶆牳浜篿d
+ if (deviceInspectionRecord.getReviewerId() != null) {
+ User reviewUser = userMapper.selectById(deviceInspectionRecord.getReviewerId());
+ deviceInspectionRecord.setReviewer(reviewUser.getName());
+ }
+ this.saveOrUpdate(deviceInspectionRecord);
+ deviceInspectionRecordDetailsService.remove(Wrappers.<DeviceInspectionRecordDetails>lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecord.getInspectionRecordId()));
+ if (CollectionUtils.isNotEmpty(deviceInspectionRecord.getDetails())) {
+ for (DeviceInspectionRecordDetails detail : deviceInspectionRecord.getDetails()) {
+ detail.setInspectionRecordId(deviceInspectionRecord.getInspectionRecordId());
+ }
+ deviceInspectionRecordDetailsService.saveBatch( deviceInspectionRecord.getDetails());
+ }
+ return Result.success();
+ }
+
+ /**
+ * 鍒犻櫎璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ @Override
+ public Result deleteDeviceInspectionRecordOrDetails(DeviceInspectionRecordDto deviceInspectionRecord) {
+ this.removeById(deviceInspectionRecord);
+ deviceInspectionRecordDetailsService.remove(Wrappers.<DeviceInspectionRecordDetails>lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecord.getInspectionRecordId()));
+ return Result.success();
+ }
+
+ /**
+ * 澶嶆牳鐐规璁板綍
+ * @param dto
+ * @return
+ */
+ @Override
+ public Result reviewDeviceInspectionRecord(DeviceInspectionRecordDto dto) {
+ LambdaUpdateWrapper<DeviceInspectionRecord> wrapper = Wrappers.<DeviceInspectionRecord>lambdaUpdate()
+ .eq(DeviceInspectionRecord::getInspectionRecordId, dto.getInspectionRecordId())
+ .set(DeviceInspectionRecord::getStatus, dto.getStatus())
+ .set(DeviceInspectionRecord::getReviewerRemark, dto.getReviewerRemark());
+
+ // 涓�0娓呴櫎瀹℃牳浜�
+ if (dto.getStatus().equals(0)) {
+ wrapper.set(DeviceInspectionRecord::getReviewerId, null)
+ .set(DeviceInspectionRecord::getReviewer, null);
+ }
+ this.update(wrapper);
+
+ return Result.success();
+ }
+
+ /**
+ * 瀵煎嚭璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecordId 璁惧鐐规璁板綍id
+ * @param response 鍝嶅簲
+ */
+ @Override
+ public Result exportDeviceInspectionRecord(Integer deviceInspectionRecordId, HttpServletResponse response) {
+ DeviceInspectionRecord deviceInspectionRecord = baseMapper.selectById(deviceInspectionRecordId);
+ DeviceInspectionRecordDto deviceInspectionRecordDto = new DeviceInspectionRecordDto();
+ BeanUtils.copyProperties(deviceInspectionRecord, deviceInspectionRecordDto);
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ deviceInspectionRecordDto.setTestDateString(deviceInspectionRecord.getTestDate() == null ? null : deviceInspectionRecord.getTestDate().format(dateFormatter));
+
+ List<DeviceInspectionRecordDetails> deviceInspectionRecordDetailsList = deviceInspectionRecordDetailsService.list(Wrappers.<DeviceInspectionRecordDetails>lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecordId));
+
+ Integer deviceId = deviceInspectionRecord.getDeviceId();
+
+ Device device = deviceMapper.selectById(deviceId);
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-inspection-record.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceInspectionRecordDetailsList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceInspectionRecord", deviceInspectionRecordDto);
+ put("deviceInspectionRecordDetailsList", deviceInspectionRecordDetailsList);
+ put("device", device);
+ put("recorderUrl", UserUtils.getFinalUserSignatureUrl(deviceInspectionRecordDto.getRecorderId()));
+ put("reviewerUrl", UserUtils.getFinalUserSignatureUrl(deviceInspectionRecordDto.getReviewerId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ device.getDeviceName() + "鐐规璁板綍", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java
new file mode 100644
index 0000000..559be66
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java
@@ -0,0 +1,68 @@
+package com.ruoyi.device.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.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceInstructionDto;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.mapper.InstructionMapper;
+import com.ruoyi.device.pojo.DeviceInstruction;
+import com.ruoyi.device.service.DeviceInstructionService;
+import com.ruoyi.device.service.DeviceOperationInstructionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:29:18
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceInstructionServiceImpl extends ServiceImpl<InstructionMapper, DeviceInstruction> implements DeviceInstructionService {
+
+ @Autowired
+ private DeviceOperationInstructionService operationInstructionService;
+
+ @Autowired
+ private NumberGenerator<DeviceInstruction> numberGenerator;
+
+ @Override
+ public IPage<DeviceOperationInstructionDto> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto) {
+ return baseMapper.pageByPageQueryOfHomeworkInstructions(page, QueryWrappers.queryWrappers(operationInstructionDto));
+ }
+
+ @Override
+ public void newHomeworkGuidebookAdded(DeviceInstructionDto instructionDto) {
+ if (ObjectUtils.isEmpty(instructionDto.getApplicationNumber())) {
+ String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
+ String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
+ String day = new SimpleDateFormat("dd", Locale.CHINESE).format(new Date());
+ String processNumber = numberGenerator.generateNumberWithPrefix(3, "WJSK" + year + month + day, DeviceInstruction::getApplicationNumber);
+ instructionDto.setApplicationNumber(processNumber);
+ }
+ saveOrUpdate(instructionDto);
+ if (ObjectUtils.isNotEmpty(instructionDto.getFeTempHumRecordList())) {
+ instructionDto.getFeTempHumRecordList().forEach(i -> {
+ i.setInstructionId(instructionDto.getId());
+ i.setUploader(SecurityUtils.getUserId().intValue());
+ i.setUpdateTime(LocalDateTime.now());
+ });
+ operationInstructionService.saveOrUpdateBatch(instructionDto.getFeTempHumRecordList());
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java
new file mode 100644
index 0000000..82fb4c0
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java
@@ -0,0 +1,197 @@
+package com.ruoyi.device.service.impl;
+
+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.Pictures;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.device.dto.DeviceImpowerDetailsDto;
+import com.ruoyi.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.pojo.DeviceMaintenance;
+import com.ruoyi.device.service.DeviceMaintenanceService;
+import com.ruoyi.device.service.DeviceService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.system.service.ISysDictTypeService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.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;
+
+/**
+ * 璁惧缁存姢淇濆吇
+ */
+@Service
+public class DeviceMaintenanceImpl extends ServiceImpl<DeviceMaintenanceMapper, DeviceMaintenance> implements DeviceMaintenanceService {
+ @Resource
+ private DeviceService deviceService;
+ @Resource
+ private ISysDictTypeService iSysDictTypeService;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ /**
+ * 璁惧缁存姢鍒嗛〉鏌ヨ
+ * @return
+ */
+ @Override
+ public IPage<DeviceMaintenanceDto> selectDeviceMaintenancePage(Page page, DeviceMaintenanceDto deviceMaintenance) {
+ if (deviceMaintenance.getDeviceId() == null) {
+ return new Page();
+ }
+ return baseMapper.selectDeviceMaintenancePage(page, QueryWrappers.queryWrappers(deviceMaintenance));
+ }
+
+ /**
+ * 瀵煎嚭璁惧缁存姢淇濆吇
+ * @param deviceId
+ * @param response
+ */
+ @Override
+ public void exportDeviceMaintenance(Integer deviceId, HttpServletResponse response) {
+ // 鏌ヨ璁惧缁存姢淇濆吇
+ List<DeviceMaintenance> deviceMaintenanceList = baseMapper.selectList(Wrappers.<DeviceMaintenance>lambdaQuery()
+ .eq(DeviceMaintenance::getDeviceId, deviceId));
+
+ // 鑾峰彇鍒扮涓�涓澶囦娇鐢ㄦ巿鏉�
+ DeviceMaintenanceDto deviceMaintenanceDto = new DeviceMaintenanceDto();
+
+ List<SysDictData> sysDictDataList = null;
+ if (CollectionUtils.isNotEmpty(deviceMaintenanceList)) {
+ BeanUtils.copyProperties(deviceMaintenanceList.get(0), deviceMaintenanceDto);
+ // 鏌ヨ璁惧淇℃伅
+ Device device = deviceService.getById(deviceId);
+ deviceMaintenanceDto.setDeviceName(device.getDeviceName());
+ deviceMaintenanceDto.setManagementNumber(device.getManagementNumber());
+
+ //鏌ヨ缁存姢淇濆吇瀵煎嚭瀛楀吀鍊�
+ sysDictDataList = getDeviceMaintenanceDict(device);
+ }
+
+ // 娣诲姞瀛楀吀鏋氫妇鍊�
+ for (DeviceMaintenance deviceMaintenance : deviceMaintenanceList) {
+ StringBuilder maintenanceContent = new StringBuilder(deviceMaintenance.getMaintenanceContent());
+ if (CollectionUtils.isNotEmpty(sysDictDataList) && StringUtils.isNotBlank(deviceMaintenance.getMaintenanceContent())) {
+ maintenanceContent = new StringBuilder();
+ List<String> splitList = StrUtil.split(deviceMaintenance.getMaintenanceContent(), ',');
+ // 寰幆鍒ゆ柇鏄惁鏈変竴鏍穔ey
+ for (SysDictData sysDictData : sysDictDataList) {
+ if (splitList.contains(sysDictData.getDictLabel())) {
+ maintenanceContent.append("鈽�").append(sysDictData.getDictLabel()).append(" ");
+ } else {
+ maintenanceContent.append("鈻�").append(sysDictData.getDictLabel()).append(" ");
+ }
+ }
+ }
+ deviceMaintenance.setMaintenanceContent(maintenanceContent.toString());
+ // 娣诲姞缁存姢浜哄浘鐗�
+ deviceMaintenance.setMaintenanceUserUrlRender(UserUtils.getFinalUserSignatureUrl(deviceMaintenance.getMaintenanceUserId()));
+
+ }
+
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-maintenance.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceMaintenances", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("device", deviceMaintenanceDto);
+ put("deviceMaintenances", deviceMaintenanceList);
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+
+ }
+
+ /**
+ * ****鏌ヨ缁存姢淇濆吇瀵煎嚭瀛楀吀鍊�***
+ * @param device
+ */
+ private List<SysDictData> getDeviceMaintenanceDict(Device device) {
+ List<SysDictData> sysDictDataList = new ArrayList<>();
+ // 鏌ヨ缁存姢淇濆吇瀵煎嚭瀛楀吀鍊�
+ if (StringUtils.isNotBlank(device.getStoragePoint())) {
+ String dictType = null;
+ switch (device.getStoragePoint()) {
+ case "鑰佸寲瀹�":
+ dictType = "aging_maintenance_content";
+ break;
+ case "鑰佸寲瀹為獙瀹�":
+ dictType = "aging_maintenance_content";
+ break;
+ case "鐢垫�ц兘瀹為獙瀹�":
+ dictType = "electrical_maintenance_content";
+ break;
+ case "鐜瀹為獙瀹�":
+ dictType = "environmental_maintenance_content";
+ break;
+ case "鐕冪儳瀹為獙瀹�":
+ dictType = "burn_maintenance_content";
+ break;
+ case "娣风偧瀹為獙瀹�":
+ dictType = "mixing_maintenance_content";
+ break;
+ case "妫�娴嬩腑蹇冪數鎬ц兘瀹為獙瀹�":
+ dictType = "center_electrical_maintenance_content";
+ break;
+ case "鎭掓俯浜�":
+ dictType = "temperature2_maintenance_content";
+ break;
+ case "鎭掓俯涓�":
+ dictType = "temperature1_maintenance_content";
+ break;
+ case "鍖栧瀹為獙瀹�":
+ dictType = "chemistry_maintenance_content";
+ break;
+ case "鍒舵牱瀹�":
+ dictType = "sample_maintenance_content";
+ break;
+ case "浣庢俯瀹為獙瀹�":
+ dictType = "hypothermia_maintenance_content";
+ break;
+ }
+ sysDictDataList = iSysDictTypeService.selectDictDataByType(dictType);
+ }
+ return sysDictDataList;
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanDetailsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanDetailsServiceImpl.java
new file mode 100644
index 0000000..ae87e6e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanDetailsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceMaintenancePlanDetailsMapper;
+import com.ruoyi.device.pojo.DeviceMaintenancePlanDetails;
+import com.ruoyi.device.service.DeviceMaintenancePlanDetailsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:11:46
+ */
+@Service
+public class DeviceMaintenancePlanDetailsServiceImpl extends ServiceImpl<DeviceMaintenancePlanDetailsMapper, DeviceMaintenancePlanDetails> implements DeviceMaintenancePlanDetailsService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java
new file mode 100644
index 0000000..81c5582
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java
@@ -0,0 +1,292 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.constant.MenuJumpPathConstants;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceMaintenancePlanDetailsDto;
+import com.ruoyi.device.dto.DeviceMaintenancePlanDto;
+import com.ruoyi.device.mapper.DeviceMaintenancePlanDetailsMapper;
+import com.ruoyi.device.mapper.DeviceMaintenancePlanMapper;
+import com.ruoyi.device.pojo.DeviceMaintenancePlan;
+import com.ruoyi.device.pojo.DeviceMaintenancePlanDetails;
+import com.ruoyi.device.service.DeviceMaintenancePlanDetailsService;
+import com.ruoyi.device.service.DeviceMaintenancePlanService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 璁惧淇濆吇璁″垝琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 06:10:52
+ */
+@Service
+public class DeviceMaintenancePlanServiceImpl extends ServiceImpl<DeviceMaintenancePlanMapper, DeviceMaintenancePlan> implements DeviceMaintenancePlanService {
+
+ @Resource
+ private DeviceMaintenancePlanDetailsService deviceMaintenancePlanDetailsService;
+ @Resource
+ private DeviceMaintenancePlanDetailsMapper deviceMaintenancePlanDetailsMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ @Resource
+ private InformationNotificationService informationNotificationService;
+ @Resource
+ private UserMapper userMapper;
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧淇濆吇璁″垝
+ *
+ * @param page
+ * @return
+ */
+ @Override
+ public Result<IPage<DeviceMaintenancePlan>> selectDeviceMaintenancePlanByPage(Page page, DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ IPage<DeviceMaintenancePlan> iPage = baseMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceMaintenancePlanDto));
+ return Result.success(iPage);
+ }
+
+ /**
+ * 鏂板璁惧淇濆吇璁″垝
+ *
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ @Override
+ public Result addMaintenancePlan(DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ deviceMaintenancePlanDto.setCompilerId(userId);
+ deviceMaintenancePlanDto.setCompiler(user.getName());
+ deviceMaintenancePlanDto.setDatePreparation(LocalDateTime.now());
+
+ // 鏌ヨ瀹℃牳浜篿d
+ if (deviceMaintenancePlanDto.getAuditId() != null) {
+ User auditUser = userMapper.selectById(deviceMaintenancePlanDto.getAuditId());
+ deviceMaintenancePlanDto.setAudit(auditUser.getName());
+ }
+ this.saveOrUpdate(deviceMaintenancePlanDto);
+
+ // 璇︽儏璧嬪�煎苟淇濆瓨
+ List<DeviceMaintenancePlanDetailsDto> deviceMaintenancePlanDetails = deviceMaintenancePlanDto.getDeviceMaintenancePlanDetails();
+ if (CollectionUtils.isNotEmpty(deviceMaintenancePlanDetails)) { // 璇︽儏涓嶄负绌�
+ List<DeviceMaintenancePlanDetails> collect = deviceMaintenancePlanDetails.stream().map(deviceMaintenancePlanDetail -> { // 閬嶅巻璇︽儏
+ deviceMaintenancePlanDetail.setDeviceId(deviceMaintenancePlanDetail.getDeviceId()); // 璁惧ID
+ deviceMaintenancePlanDetail.setMaintenancePlanId(deviceMaintenancePlanDto.getMaintenancePlanId()); // 淇濆吇璁″垝ID
+ DeviceMaintenancePlanDetails planDetails = new DeviceMaintenancePlanDetails();
+ BeanUtils.copyProperties(deviceMaintenancePlanDetail, planDetails);
+ return planDetails;
+ }).collect(Collectors.toList());
+ deviceMaintenancePlanDetailsService.saveBatch(collect);
+ }
+
+ return Result.success();
+ }
+
+ /**
+ * 淇敼璁惧淇濆吇璁″垝
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ @Override
+ public Result updateMaintenancePlan(DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ // 鏌ヨ瀹℃牳浜篿d
+ if (deviceMaintenancePlanDto.getAuditId() != null) {
+ User auditUser = userMapper.selectById(deviceMaintenancePlanDto.getAuditId());
+ deviceMaintenancePlanDto.setAudit(auditUser.getName());
+ }
+ this.saveOrUpdate(deviceMaintenancePlanDto);
+
+ // 鍒犻櫎鍘熸湰鐨勮鎯�
+ deviceMaintenancePlanDetailsService.remove(Wrappers.<DeviceMaintenancePlanDetails>lambdaQuery().eq(DeviceMaintenancePlanDetails::getMaintenancePlanId, deviceMaintenancePlanDto.getMaintenancePlanId()));
+ // 璇︽儏璧嬪�煎苟淇濆瓨
+ List<DeviceMaintenancePlanDetailsDto> deviceMaintenancePlanDetails = deviceMaintenancePlanDto.getDeviceMaintenancePlanDetails();
+ if (CollectionUtils.isNotEmpty(deviceMaintenancePlanDetails)) { // 璇︽儏涓嶄负绌�
+ List<DeviceMaintenancePlanDetails> collect = deviceMaintenancePlanDetails.stream().map(deviceMaintenancePlanDetail -> { // 閬嶅巻璇︽儏
+ deviceMaintenancePlanDetail.setDeviceId(deviceMaintenancePlanDto.getDeviceId()); // 璁惧ID
+ deviceMaintenancePlanDetail.setMaintenancePlanId(deviceMaintenancePlanDto.getMaintenancePlanId()); // 淇濆吇璁″垝ID
+ DeviceMaintenancePlanDetails planDetails = new DeviceMaintenancePlanDetails();
+ BeanUtils.copyProperties(deviceMaintenancePlanDetail, planDetails);
+ return planDetails;
+ }).collect(Collectors.toList());
+ deviceMaintenancePlanDetailsService.saveBatch(collect);
+ }
+ return Result.success();
+ }
+
+ /**
+ * 鍒犻櫎璁惧淇濆吇璁″垝
+ *
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ @Override
+ public Result deleteMaintenancePlan(DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ this.removeById(deviceMaintenancePlanDto);
+ deviceMaintenancePlanDetailsService.remove(Wrappers.<DeviceMaintenancePlanDetails>lambdaQuery().eq(DeviceMaintenancePlanDetails::getMaintenancePlanId, deviceMaintenancePlanDto.getMaintenancePlanId()));
+ return Result.success();
+ }
+
+ /**
+ * 瀵煎嚭璁惧淇濆吇璁″垝
+ *
+ * @param maintenancePlanId 璁惧淇濆吇璁″垝id
+ * @param response 鍝嶅簲
+ */
+ @Override
+ public Result exportDeviceMaintenancePlanDto(Integer maintenancePlanId, HttpServletResponse response) {
+ // 鏌ヨ璁惧淇濆吇璁″垝
+ DeviceMaintenancePlanDto deviceMaintenancePlan = baseMapper.selectMaintenancePlanById(maintenancePlanId);
+
+ // 鏌ヨ璁惧淇濆吇璁″垝璇︽儏
+ List<DeviceMaintenancePlanDetailsDto> deviceMaintenancePlanDetailsDtoList = deviceMaintenancePlanDetailsMapper.deviceInspectionRecordDetailsList(maintenancePlanId);
+ // 璁剧疆搴忓彿
+ deviceMaintenancePlanDetailsDtoList.forEach(deviceInspectionRecordDetails -> {
+ deviceInspectionRecordDetails.setIndex(deviceMaintenancePlanDetailsDtoList.indexOf(deviceInspectionRecordDetails) + 1);
+ });
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/maintenance-plan.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceMaintenancePlanDetailsDtoList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceMaintenancePlan", deviceMaintenancePlan);
+ put("deviceMaintenancePlanDetailsDtoList", deviceMaintenancePlanDetailsDtoList);
+ // 缂栧埗浜虹鍚嶅湴鍧�
+ put("compilerUrl", UserUtils.getFinalUserSignatureUrl(deviceMaintenancePlan.getCompilerId()));
+ // 瀹℃牳浜虹鍚嶅湴鍧�
+ put("auditUrl", UserUtils.getFinalUserSignatureUrl(deviceMaintenancePlan.getAuditId()));
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ return Result.success();
+ }
+
+ /**
+ * 鏌ヨ璁惧淇濆吇璁″垝璇︽儏
+ *
+ * @param maintenancePlanId 璁惧淇濆吇璁″垝id
+ */
+ @Override
+ public Result<DeviceMaintenancePlanDto> getMaintenancePlanDetail(Integer maintenancePlanId) {
+ // 鏌ヨ璁惧淇濆吇璁″垝
+ DeviceMaintenancePlan deviceMaintenancePlan = baseMapper.selectById(maintenancePlanId);
+ // 鏌ヨ璇︽儏
+ DeviceMaintenancePlanDto deviceMaintenancePlanDto = new DeviceMaintenancePlanDto();
+ BeanUtils.copyProperties(deviceMaintenancePlan, deviceMaintenancePlanDto);
+ deviceMaintenancePlanDto.setDeviceMaintenancePlanDetails(deviceMaintenancePlanDetailsMapper.deviceInspectionRecordDetailsList(maintenancePlanId));
+ return Result.success(deviceMaintenancePlanDto);
+ }
+
+ /**
+ * 鎻愪氦瀹℃牳
+ * @param deviceMaintenancePlanDto
+ * @return
+ */
+ @Override
+ public Result submitReviewMaintenancePlanStatus(DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ User audit = userMapper.selectById(deviceMaintenancePlanDto.getAuditId());
+ this.update(Wrappers.<DeviceMaintenancePlan>lambdaUpdate()
+ .eq(DeviceMaintenancePlan::getMaintenancePlanId, deviceMaintenancePlanDto.getMaintenancePlanId())
+ .set(DeviceMaintenancePlan::getAuditId, audit.getId())
+ .set(DeviceMaintenancePlan::getAudit, audit.getName())
+ .set(DeviceMaintenancePlan::getStatus, null)
+ .set(DeviceMaintenancePlan::getAuditRemark, null)
+ .set(DeviceMaintenancePlan::getAuditDate, null)
+ );
+
+ DeviceMaintenancePlan deviceMaintenancePlan = baseMapper.selectById(deviceMaintenancePlanDto.getMaintenancePlanId());
+
+ // 鍙戦�佹秷鎭�
+ 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(deviceMaintenancePlan.getPlanYear() + "骞寸殑璁惧淇濆吇璁″垝寰呭鏍�");
+ info.setSenderId(userId);
+ // 鎺ユ敹浜�
+ info.setConsigneeId(audit.getId());
+ info.setJumpPath(MenuJumpPathConstants.DEVICE);
+ informationNotificationService.addInformationNotification(info);
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ String message = "";
+ message += "CNAS璁惧淇濆吇璁″垝鏍搁�氱煡";
+ message += "\n璇峰幓璧勬簮绠$悊-璁惧涓�灞傜洰褰�-璁惧淇濆吇璁″垝濉啓";
+ message += "\n" + deviceMaintenancePlan.getPlanYear() + "骞寸殑璁惧淇濆吇璁″垝寰呮牳";
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(audit.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ return Result.success();
+ }
+
+ /**
+ * 瀹℃牳璁惧淇濆吇璁″垝
+ *
+ * @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
+ */
+ @Override
+ public Result reviewMaintenancePlanStatus(DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
+ LambdaUpdateWrapper<DeviceMaintenancePlan> wrapper = Wrappers.<DeviceMaintenancePlan>lambdaUpdate()
+ .eq(DeviceMaintenancePlan::getMaintenancePlanId, deviceMaintenancePlanDto.getMaintenancePlanId())
+ .set(DeviceMaintenancePlan::getStatus, deviceMaintenancePlanDto.getStatus())
+ .set(DeviceMaintenancePlan::getAuditRemark, deviceMaintenancePlanDto.getAuditRemark())
+ .set(DeviceMaintenancePlan::getAuditDate, LocalDateTime.now());
+
+ this.update(wrapper); // 鏇存柊
+ return Result.success();
+ }
+
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java
new file mode 100644
index 0000000..934f32f
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceMetricRecordMapper;
+import com.ruoyi.device.pojo.DeviceMetricRecord;
+import com.ruoyi.device.service.DeviceMetricRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:01
+ */
+@Service
+public class DeviceMetricRecordServiceImpl extends ServiceImpl<DeviceMetricRecordMapper, DeviceMetricRecord> implements DeviceMetricRecordService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricServiceImpl.java
new file mode 100644
index 0000000..adfffd7
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceMetricMapper;
+import com.ruoyi.device.pojo.DeviceMetric;
+import com.ruoyi.device.service.IDeviceMetricService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DeviceMetricServiceImpl extends ServiceImpl<DeviceMetricMapper, DeviceMetric> implements IDeviceMetricService {
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java
new file mode 100644
index 0000000..b40f600
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceMetricsCopyMapper;
+import com.ruoyi.device.pojo.DeviceMetricsCopy;
+import com.ruoyi.device.service.DeviceMetricsCopyService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧鏍″噯 - 鏍″噯璁板綍 - 鏍″噯鏉$洰 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-09-27 10:20:11
+ */
+@Service
+public class DeviceMetricsCopyServiceImpl extends ServiceImpl<DeviceMetricsCopyMapper, DeviceMetricsCopy> implements DeviceMetricsCopyService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceOperationInstructionServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceOperationInstructionServiceImpl.java
new file mode 100644
index 0000000..5b0082f
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceOperationInstructionServiceImpl.java
@@ -0,0 +1,27 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.mapper.OperationInstructionMapper;
+import com.ruoyi.device.pojo.OperationInstruction;
+import com.ruoyi.device.service.DeviceOperationInstructionService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧 - 浣滀笟鎸囧涔� 娣诲姞鍙楁帶鏂囦欢 瀛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-04 10:43:32
+ */
+@Service
+public class DeviceOperationInstructionServiceImpl extends ServiceImpl<OperationInstructionMapper, OperationInstruction> implements DeviceOperationInstructionService {
+
+ @Override
+ public List<DeviceOperationInstructionDto> homeworkGuidebookEditor(Integer instructionId) {
+ return baseMapper.homeworkGuidebookEditor(instructionId);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceRecordServiceImpl.java
new file mode 100644
index 0000000..75ac0af
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceRecordServiceImpl.java
@@ -0,0 +1,148 @@
+package com.ruoyi.device.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceRecordDto;
+import com.ruoyi.device.excel.DeviceRecordExportWord;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.mapper.DeviceRecordMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceRecord;
+import com.ruoyi.device.service.DeviceRecordService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.system.domain.vo.SysRoleVo;
+import com.ruoyi.system.mapper.SysRoleMenuMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.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.Map;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-21 11:06:47
+ */
+@Service
+public class DeviceRecordServiceImpl extends ServiceImpl<DeviceRecordMapper, DeviceRecord> implements DeviceRecordService {
+ @Resource
+ private DeviceMapper deviceMapper;
+
+ @Resource
+ private SysRoleMenuMapper sysRoleMenuMapper;
+
+ @Override
+ public IPage<DeviceRecordDto> deviceRecordPage(Integer deviceId, Page page, String sampleCode, String managementNumber) {
+ // todo:浠呯湅鑷繁
+ Long userId = SecurityUtils.getUserId();
+ // 鑾峰彇鏉冮檺鍒ゆ柇鏄惁鏄粎鐪嬫垜
+ SysRoleVo sysRoleVo = sysRoleMenuMapper.selectRoleMenu("get:device:record", userId);
+
+ Integer testUserId = null;
+ //娌℃湁浠呯湅鎴戞潈闄愯烦杩�
+ if (sysRoleVo != null && sysRoleVo.getIsRersonal() != null && sysRoleVo.getIsRersonal().equals(1)) {
+ testUserId = SecurityUtils.getUserId().intValue();
+ }
+
+ return baseMapper.deviceRecordPage(deviceId, page, sampleCode, managementNumber, testUserId);
+ }
+
+
+ @Override
+ public void exportUseRecord(Integer deviceId, String exportDate, HttpServletResponse response) {
+ // 鏌ヨcnas璁惧浣跨敤璁板綍
+ List<DeviceRecord> deviceList = baseMapper.selectExportList(deviceId, exportDate);
+ // 璁惧淇℃伅
+ Device device = deviceMapper.selectById(deviceId);
+
+
+ // 鏌ヨ璁惧灞炰簬鍝釜瀹為獙瀹�
+ String laboratoryName = "瑁呭绾跨紗瀹為獙瀹�";
+
+ // 瑕佹槧灏勫埌word鏁版嵁
+ List<DeviceRecordExportWord> deviceExportList = new ArrayList<>();
+ // deviceExportList 璧嬪��
+ for (DeviceRecord deviceRecord : deviceList) {
+ // 澶勭悊璁惧 寮�濮嬩娇鐢ㄦ椂闂� 鍜� 缁撴潫鏃堕棿
+ String startTime = "";
+ String endTime = "";
+ String operationDate = "";
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+ if (deviceRecord.getUseStartDate() != null) {
+ startTime = deviceRecord.getUseStartDate().format(formatter);
+ endTime = deviceRecord.getUseEndDate().format(formatter);
+ String[] startTimeSplit = startTime.split(" ");
+ String[] endTimeSplit = endTime.split(" ");
+ if (startTimeSplit[0].equals(endTimeSplit[0])) {
+ startTime = startTimeSplit[1];
+ endTime = endTimeSplit[1];
+ } else {
+ endTime = endTimeSplit[0] + '\n' + endTimeSplit[1];
+ startTime = startTimeSplit[0] + '\n' + startTimeSplit[1];
+ }
+ DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy.M.d");
+ operationDate = deviceRecord.getUseStartDate().format(formatter2);
+ }
+ // 澶勭悊浣跨敤鍓嶅拰浣跨敤鍚�
+ String useBeforeString = deviceRecord.getUseBefore() == 0? "寮傚父" : "鑹ソ";
+ String useAfterString = deviceRecord.getUseAfter() == 0 ? "寮傚父" : "鑹ソ";
+
+ DeviceRecordExportWord deviceRecordExportWord = new DeviceRecordExportWord();
+ // 杩涜璧嬪��
+ BeanUtils.copyProperties(deviceRecord, deviceRecordExportWord);
+ deviceRecordExportWord.setUseBeforeString(useBeforeString); // 浣跨敤鍓�
+ deviceRecordExportWord.setUseAfterString(useAfterString); // 浣跨敤鍚�
+ deviceRecordExportWord.setOperationDate(operationDate); // 璁惧鎿嶄綔鏃ユ湡
+ deviceRecordExportWord.setUseStartDateString(startTime); // 寮�濮嬫椂闂�
+ deviceRecordExportWord.setUseEndDateString(endTime); // 缁撴潫鏃堕棿
+ deviceExportList.add(deviceRecordExportWord);
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/use-record.docx");
+ Configure configure = Configure.builder()
+ .bind("useRecord", new HackLoopTableRenderPolicy())
+ .build();
+ String deviceName = device.getDeviceName();
+ String managementNumber = device.getManagementNumber();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("useRecord", deviceExportList);
+ put("deviceName", deviceName);
+ put("managementNumber", managementNumber);
+ put("laboratory", laboratoryName);
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
new file mode 100644
index 0000000..af0f4fe
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
@@ -0,0 +1,180 @@
+package com.ruoyi.device.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceScrappedDto;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.mapper.DeviceScrappedMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceScrapped;
+import com.ruoyi.device.service.DeviceScrappedService;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 璁惧鎶ュ簾鐢宠琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 01:53:47
+ */
+@Service
+public class DeviceScrappedServiceImpl extends ServiceImpl<DeviceScrappedMapper, DeviceScrapped> implements DeviceScrappedService {
+
+ @Resource
+ private DeviceMapper deivceMapper;
+ @Resource
+ private UserMapper userMapper;
+
+
+ /**
+ * 璁惧鎶ュ簾鐢宠鍒楄〃
+ *
+ * @param deviceScrapped
+ * @return
+ */
+ @Override
+ public IPage<DeviceScrapped> pageDeviceScrapped(Page page, DeviceScrapped deviceScrapped) {
+ return baseMapper.pageDeviceScrapped(page, QueryWrappers.queryWrappers(deviceScrapped));
+ }
+
+ /**
+ * 鏂板璁惧鎶ュ簾鐢宠
+ *
+ * @return
+ */
+ @Override
+ public boolean addDeviceScrapped(DeviceScrapped deviceScrapped) {
+ DeviceScrapped scrapped = new DeviceScrapped();
+ // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+ User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+ switch (deviceScrapped.getFlowType()) {
+ case 0:
+ BeanUtils.copyProperties(deviceScrapped, scrapped);
+ // 鐢宠
+ scrapped.setReasonsForScrap(deviceScrapped.getReasonsForScrap());
+ scrapped.setApplicantUserId(user.getId());
+ scrapped.setApplicantUser(user.getName());
+ scrapped.setApplicantDate(LocalDate.now());
+
+ // 澶勭悊浜轰俊鎭�
+ User departmentHeadUser = userMapper.selectById(deviceScrapped.getDepartmentHeadUserId());
+ scrapped.setApplicantUserId(departmentHeadUser.getId());
+ scrapped.setApplicantUser(departmentHeadUser.getName());
+
+ baseMapper.insert(scrapped);
+ break;
+ case 1:
+ scrapped.setScrappedId(deviceScrapped.getScrappedId());
+ // 鐢宠閮ㄩ棬璐熻矗浜烘剰瑙�
+ scrapped.setDepartmentHeadOpinion(deviceScrapped.getDepartmentHeadOpinion());
+ scrapped.setDepartmentHeadDate(LocalDate.now());
+
+ // 璁¢噺瀹や俊鎭�
+ User meteringRoomUser = userMapper.selectById(deviceScrapped.getMeteringRoomUserId());
+ scrapped.setMeteringRoomUserId(meteringRoomUser.getId());
+ scrapped.setMeteringRoomUser(meteringRoomUser.getName());
+
+ baseMapper.updateById(scrapped);
+ break;
+ case 2:
+ scrapped.setScrappedId(deviceScrapped.getScrappedId());
+ // 璁¢噺瀹ゆ剰瑙�
+ scrapped.setMeteringRoomOpinion(deviceScrapped.getMeteringRoomOpinion());
+ scrapped.setMeteringRoomDate(LocalDate.now());
+
+ // 鎵瑰噯浜轰俊鎭�
+ User approverUser = userMapper.selectById(deviceScrapped.getApproverUserId());
+ scrapped.setApproverUserId(approverUser.getId());
+ scrapped.setApproverUser(approverUser.getName());
+
+ baseMapper.updateById(scrapped);
+ break;
+ case 3:
+ scrapped.setScrappedId(deviceScrapped.getScrappedId());
+ //鎵瑰噯浜�
+ scrapped.setApproverOpinion(deviceScrapped.getApproverOpinion());
+ scrapped.setApproverDate(LocalDate.now());
+ scrapped.setIsFinish(1);
+ baseMapper.updateById(scrapped);
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭璁惧鎶ュ簾鐢宠
+ *
+ * @param scrappedId 璁惧鎶ュ簾鐢宠id
+ * @param response 鍝嶅簲
+ * @return 缁撴灉
+ */
+ @Override
+ public Result<?> exportDeviceScrapped(Integer scrappedId, HttpServletResponse response) {
+ // 鏌ヨ鎶ュ簾鏁版嵁
+ DeviceScrappedDto deviceScrapped = baseMapper.selectDeviceScrappedById(scrappedId);
+ if (deviceScrapped == null) {
+ return Result.fail("璁惧鎶ュ簾鐢宠涓嶅瓨鍦�");
+ }
+ Device device = null;
+ if (deviceScrapped.getDeviceId() != null) {
+ device = deivceMapper.selectById(deviceScrapped.getDeviceId());
+ device = device == null ? new Device() : device;
+ }
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-scrapped.docx");
+ Configure configure = Configure.builder()
+ .build();
+ Device finalDevice = device;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceScrapped", deviceScrapped);
+ put("device", finalDevice);
+ // 鐢宠浜虹鍚�
+ put("applicantUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getApplicantUserId()));
+ // 閮ㄩ棬璐熻矗浜虹鍚�
+ put("headUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getDepartmentHeadUserId()));
+ // 璁¢噺瀹ょ鍚�
+ put("metrologyRoomUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getMeteringRoomUserId()));
+ // 鎵瑰噯浜虹鍚�
+ put("approverUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getApproverUserId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
+ String fileName = URLEncoder.encode(
+ deviceName + "璁惧鎶ュ簾鐢宠", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
new file mode 100644
index 0000000..14a060c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
@@ -0,0 +1,690 @@
+package com.ruoyi.device.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson2.JSON;
+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.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.ruoyi.basic.mapper.StructureItemParameterMapper;
+import com.ruoyi.basic.pojo.StructureItemParameter;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.device.dto.*;
+import com.ruoyi.device.excel.upload.DeviceImport;
+import com.ruoyi.device.mapper.CollectBridgeMapper;
+import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.mapper.DeviceMetricRecordMapper;
+import com.ruoyi.device.pojo.*;
+import com.ruoyi.device.service.DataConfigService;
+import com.ruoyi.device.service.DeviceService;
+import com.ruoyi.device.service.DeviceDocumentsService;
+import com.ruoyi.device.utils.DataAcquisition;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.mapper.InsSampleMapper;
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.system.mapper.SysDictDataMapper;
+import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 璁惧(Device)琛ㄦ湇鍔″疄鐜扮被
+ */
+@Service
+@AllArgsConstructor
+public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
+
+ private DeviceMapper deviceMapper;
+
+ private UserMapper userMapper;
+
+ private SysDeptMapper sysDeptMapper;
+
+ private SysDictDataMapper sysDictDataMapper;
+
+ private StructureItemParameterMapper structureItemParameterMapper;
+
+ private DataConfigService dataConfigService;
+
+ private InsSampleMapper insSampleMapper;
+
+ private DeviceDocumentsService documentService;
+
+ private DeviceMetricRecordMapper deviceMetricRecordMapper;
+
+ private DeviceMaintenanceMapper deviceMaintenanceMapper;
+
+ private CollectBridgeMapper collectBridgeMapper;
+
+ @Override
+ public IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull) {
+ IPage<DeviceDto> iPage = deviceMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(itemParameter), laboratoryNameIsNull);
+ return iPage;
+ }
+
+ @Override
+ public int addDeviceParameter(Device itemParameter) {
+ return deviceMapper.insert(itemParameter);
+ }
+
+ @Override
+ public int delDeviceParameter(Integer id) {
+ return deviceMapper.deleteById(id);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public int upDeviceParameter(Device itemParameter) {
+
+ return deviceMapper.updateById(itemParameter);
+ }
+
+ @Override
+ public List<Device> selectEquipmentOverview() {
+ return deviceMapper.selectEquipmentOverview(new Page(1, 10), QueryWrappers.queryWrappers(new Device()));
+ }
+
+ @Override
+ public List<Device> authorizedPerson() {
+ return deviceMapper.authorizedPerson();
+ }
+
+ @Override
+ public List<Device> search(Integer status, String deviceName, String specificationModel, String largeCategory) {
+ return deviceMapper.search(status, deviceName, specificationModel, largeCategory);
+ }
+
+ @Override
+ public List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass, String laboratory) {
+ List<Integer> id;
+
+ try {
+ id = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery()
+ .eq(StructureItemParameter::getInspectionItem, inspectionItem)
+ .eq(ObjectUtils.isNotEmpty(inspectionItemSubclass), StructureItemParameter::getInspectionItemSubclass, inspectionItemSubclass)
+ .eq(ObjectUtils.isNotEmpty(laboratory), StructureItemParameter::getLaboratory, laboratory)
+ .select(StructureItemParameter::getId)).stream().map(StructureItemParameter::getId).collect(Collectors.toList());
+ } catch (Exception e) {
+ return null;
+ }
+ List<Device> devices = deviceMapper.selectList(Wrappers.<Device>lambdaQuery()
+ .eq(Device::getDeviceStatus, 0)
+ .isNotNull(Device::getInsProductIds));
+ List<Device> devices2 = new ArrayList<>();
+ for (Device device : devices) {
+ String[] ids = device.getInsProductIds().split(",");
+ for (String i : ids) {
+ if (ObjectUtils.isNotEmpty(i)) {
+ if (id.contains(Integer.parseInt(i))) {
+ devices2.add(device);
+ break;
+ }
+ }
+ }
+ }
+ return devices2;
+ }
+
+ @Override
+ public DeviceDto selectDeviceByCode(Integer id) {
+ DeviceDto deviceDto = deviceMapper.selectDeviceByCode(id);
+ List<Integer> ids = new ArrayList<>();
+ if (Strings.isNotEmpty(deviceDto.getAuthorizedPerson())) {
+ if (deviceDto.getAuthorizedPerson().equals("null")) {
+ deviceDto.setAuthorizedPerson("[]");
+ }
+ ids = JSON.parseArray(deviceDto.getAuthorizedPerson(), Integer.class);
+ }
+ String name = "";
+ if (!ids.isEmpty()) {
+ name = userMapper.selectBatchIds(ids).stream().map(User::getName).collect(Collectors.joining(","));
+ }
+ deviceDto.setAuthorizedPersonName(name);
+ //鏌ヨ璁惧鏍″噯淇℃伅
+ DeviceMetricRecord calibrate = getDeviceMetricRecord(id, "calibrate");
+ deviceDto.setCalibrateNo(calibrate.getCertificateSerialNumber());
+
+ // 鍒颁簡鍋滅敤鏃ユ湡锛岃嚜鍔ㄥ皢鐘舵�佹敼涓哄仠鐢�
+ if (deviceDto.getNextCalibrationDate() != null) {
+ if (LocalDateTime.now().isAfter(deviceDto.getNextCalibrationDate())) {
+ // todo: 璁惧杩愯鐘舵�佸瓧鍏�
+// List<Enums> enums = enumService.selectEnumByCategory("璁惧鐘舵��");
+// List<Enums> status = enums.stream().filter(item -> item.getLabel().equals("鍋滅敤")).collect(Collectors.toList());
+// deviceDto.setDeviceStatus(Integer.parseInt(status.get(0).getValue()));
+ deviceMapper.updateById(deviceDto);
+ }
+ }
+ return deviceDto;
+ }
+
+ /**
+ * 鏌ヨ璁惧鏍″噯/鏍告煡璁板綍
+ * @param deviceId
+ * @param type
+ * @return
+ */
+ public DeviceMetricRecord getDeviceMetricRecord(int deviceId, String type){
+ return Optional.ofNullable(
+ deviceMetricRecordMapper.selectOne(Wrappers.<DeviceMetricRecord>lambdaQuery()
+ .eq(DeviceMetricRecord::getDeviceId, deviceId)
+ .eq(DeviceMetricRecord::getType, type)
+ .orderByDesc(DeviceMetricRecord::getCreateTime)
+ .last("limit 1"))).orElse(new DeviceMetricRecord());
+ }
+
+ @Override
+ public Result<?> dataAcquisition(HttpServletRequest request, DeviceCollectionDto dto) {
+
+ // 鏌ヨ妫�楠岄」
+ List<Integer> itemIds = dto.getItemIds();
+ if (CollectionUtils.isEmpty(itemIds)) {
+ throw new ErrorException("娌℃湁闇�瑕佹暟閲囩殑妫�楠岄」");
+ }
+ List<InsProduct> insProducts = insSampleMapper.selectProductResult(itemIds);
+
+ // 鏌ヨ妫�楠岄」缁戝畾鐨刬d
+ List<Integer> itemParameterIds = insProducts.stream().map(InsProduct::getStructureItemParameterId).collect(Collectors.toList());
+
+ Set<String> deviceCodeSet = new LinkedHashSet<>();
+ for (InsProduct product : insProducts) {
+ // 鏌ヨ璁惧
+ // 娣诲姞璁惧缂栧彿
+ if (product.getInsProductResult() != null) {
+ List<JSONObject> jsonObjects = JSON.parseArray(product.getInsProductResult().getEquipValue(), JSONObject.class);
+ for (JSONObject jsonObject : jsonObjects) {
+ if (!"".equals(jsonObject.get("v") + "")) {
+ List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�");
+ deviceCodeSet.addAll(v);
+ }
+ }
+ }
+ }
+ if (CollectionUtils.isEmpty(deviceCodeSet)) {
+ throw new ErrorException("鏈�夋嫨璁惧淇℃伅");
+ }
+ // 鑾峰彇璁惧闆嗗悎
+ List<Device> deviceList = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
+ .in(Device::getManagementNumber, deviceCodeSet)
+ .isNotNull(Device::getIp)
+ .ne(Device::getIp, ""));
+
+ if (CollectionUtils.isEmpty(deviceList)) {
+ throw new ErrorException("鏃犺澶囬厤缃噰闆嗙粦瀹氫俊鎭�");
+ }
+
+ // 鏁伴噰杩斿洖淇℃伅
+ Map<String, Object> map = new HashMap<>();
+ for (Device device : deviceList) {
+ String ip = device.getIp();
+ // 鏍规嵁妫�楠岄」鑾峰彇config
+ List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
+ .in(DataConfig::getStructureItemParameterId, itemParameterIds)
+ .eq(DataConfig::getDeviceId, device.getId()));
+
+ // 鑾峰彇璁惧閰嶇疆绫�
+ // 鍒ゆ柇璁惧鏄惁鏄暟瀛楃洿妗�
+ if (device.getManagementNumber().equals("JCZX-ZB-ER02022")) {
+ map.putAll(dataCollectBridge(list, device, dto.getEntrustCode()));
+ } else {
+ map.putAll(DataAcquisition.dataAcquisitionEntrance(list, device, dto.getEntrustCode(), dto.getEntrustCode(), ip, insProducts.get(0).getCableTag()));
+ }
+ }
+
+
+ // 4銆侀�犲惊鐜鏁帮紝鍙備笌鍏紡璁$畻
+ if (ObjectUtils.isNotEmpty(map)) {
+ Map<String, Object> frequency = DataAcquisition.createFrequency(dto.getEntrustCode(), dto.getEntrustCode(), map);
+ return Result.success(frequency);
+ } else {
+ return Result.success(null);
+ }
+ }
+
+ /**
+ * 鑾峰彇鏁板瓧鐩存ˉ妫�娴嬩俊鎭�
+ * @return
+ */
+ public Map<String, ?> dataCollectBridge(List<DataConfig> dataConfig, Device device, String entrustCode) {
+ // 鎷兼帴鍚嶅瓧
+ Map<String, List<DataConfig>> userMap = dataConfig.stream()
+ .peek(i -> {
+ String itemName = i.getInspectionItem();
+ if (StringUtils.isNotBlank(i.getInspectionItemClass())) {
+ itemName += "@" + i.getInspectionItemClass();
+ }
+ String name = i.getInspectionItem().equals(i.getInspectionItemSubclass()) ? itemName + "," : itemName + "," + i.getInspectionItemSubclass();
+
+ // 娣诲姞妫�楠岄」鍚嶇О
+ i.setInsProductItem(name);
+ })
+ .collect(Collectors.groupingBy(DataConfig::getInsProductItem));
+
+ Map<String, Object> map = new HashMap<>();
+
+ userMap.forEach((k, v) -> {
+ List<String> resultValue = new ArrayList<>();
+ // 鏌ヨ鐩存ˉ鐢垫祦鐢甸樆鏁伴噰鍊�
+ List<CollectBridge> collectBridges = collectBridgeMapper.selectList(Wrappers.<CollectBridge>lambdaQuery()
+ .like(CollectBridge::getEntrustCode, entrustCode)
+ .orderByAsc(CollectBridge::getCollectDate));
+
+ resultValue = collectBridges.stream().map(CollectBridge::getCollectValue).collect(Collectors.toList());
+
+ Map<String, Object> hashMap = new HashMap<>();
+ hashMap.put("equipName", device.getDeviceName());
+ hashMap.put("equipValue", device.getManagementNumber());
+ hashMap.put("result", resultValue);
+ map.put(k, hashMap);
+ });
+ return map;
+ }
+
+
+ @Override
+ public List<Map<String, Object>> treeDevice(String deviceName) {
+ List<Map<String, Object>> listMap = deviceMapper.treeDevice(deviceName);
+ return listMap;
+ }
+
+
+
+ @Override
+ public void exportDeviceFile(Integer deviceId, HttpServletResponse response) {
+
+ // 璁惧淇℃伅
+ Device device = baseMapper.selectById(deviceId);
+ // 璁惧妗f
+ List<DeviceDocuments> documentList = documentService.list(Wrappers.<DeviceDocuments>lambdaQuery().eq(DeviceDocuments::getDeviceId, deviceId));
+ // 璁惧鏍″噯琛�
+ List<DeviceMetricRecord> deviceMetricRecordList = deviceMetricRecordMapper.selectList(Wrappers.<DeviceMetricRecord>lambdaQuery().eq(DeviceMetricRecord::getDeviceId, deviceId));
+ // 璁惧缁翠慨琛�
+ List<DeviceMaintenance> deviceMaintenanceList = deviceMaintenanceMapper.selectList(Wrappers.<DeviceMaintenance>lambdaQuery().eq(DeviceMaintenance::getDeviceId, deviceId));
+
+
+ // 杩斿洖缁檞ord鐨勬暟鎹垪琛� 鍒嗕负宸﹀彸涓ゅ垪鏁版嵁
+ List<DocumentExportWordDto> documentExportWordDtoList = new ArrayList<>();
+ // 缁欐。妗堝姞搴忓彿 骞跺乏鍙冲垎涓哄乏鍙充袱鍒楀湪word涓樉绀�
+ extracted(documentList, documentExportWordDtoList);
+
+
+ // 灏嗘牎鍑嗚〃鍜岀淮淇〃鏀惧叆涓�涓璞′腑鏂逛究word琛ㄦ牸涓樉绀�
+ List<DeviceMetricRecordAndMaintenanceDto> deviceMetricRecordAndMaintenanceDtoList = getDeviceMetricRecordAndMaintenanceDtoList(deviceMetricRecordList, deviceMaintenanceList);
+
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-document.docx");
+ Configure configure = Configure.builder()
+ .bind("document", new HackLoopTableRenderPolicy())
+ .bind("deviceMetricRecordAndMaintenanceDtoList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("device", device);
+ put("document", documentExportWordDtoList); // 妗f
+ put("deviceMetricRecordAndMaintenanceDtoList", deviceMetricRecordAndMaintenanceDtoList); // 鏍″噯琛� 鍜� 缁翠慨琛�
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ device.getDeviceName() + "妗f", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ private List<DeviceMetricRecordAndMaintenanceDto> getDeviceMetricRecordAndMaintenanceDtoList(List<DeviceMetricRecord> deviceMetricRecordList, List<DeviceMaintenance> deviceMaintenanceList) {
+ // 璁惧鏍″噯琛ㄥ拰璁惧缁翠慨琛ㄧ殑闆嗗悎
+ List<DeviceMetricRecordAndMaintenanceDto> deviceMetricRecordAndMaintenanceDtoList = new ArrayList<>();
+ // 璁惧鏍″噯琛ㄥ拰璁惧缁翠慨琛ㄧ殑闀垮害鍙兘涓嶄竴鏍� 鍙栨渶澶у�� 涓嶅鐨勭敤绌烘暟鎹~鍏�
+ int metricRecordSize = deviceMetricRecordList.size();
+ int maintenanceSize = deviceMaintenanceList.size();
+ int size = Math.max(metricRecordSize, maintenanceSize);
+ // 缁� 鏍¢獙鍜岀淮淇璞� 璧嬪��
+ for (int i = 0; i < size; i++) {
+ // 鏍¢獙鍜岀淮淇璞�
+ DeviceMetricRecordAndMaintenanceDto deviceMetricRecordAndMaintenanceDto = new DeviceMetricRecordAndMaintenanceDto();
+ // 璁剧疆搴忓彿
+ deviceMetricRecordAndMaintenanceDto.setIndex(i + 1);
+
+ // 鏍″噯琛ㄦ暟鎹�
+ if (metricRecordSize > i) {
+ // 璁剧疆鏃ユ湡鏍煎紡
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ // 鑾峰彇璁惧鏍″噯琛ㄦ暟鎹�
+ DeviceMetricRecord deviceMetricRecord = deviceMetricRecordList.get(i);
+ // 璁剧疆鏍″噯鏃ユ湡
+ deviceMetricRecordAndMaintenanceDto.setCalibrationDateString(sdf.format(deviceMetricRecord.getCalibrationDate()));
+ // 璁剧疆璇佷功缂栧彿
+ deviceMetricRecordAndMaintenanceDto.setCertificateNumber(deviceMetricRecord.getCertificateSerialNumber());
+ // 璁剧疆鏈夋晥鏈�
+ deviceMetricRecordAndMaintenanceDto.setValidityDateString(sdf.format(deviceMetricRecord.getNextCalibrationDate()));
+ // 璁剧疆鏍″噯鏈夋晥鏃ユ湡
+ deviceMetricRecordAndMaintenanceDto.setValidityDateString(sdf.format(deviceMetricRecord.getConfirmDate()));
+ // 璁剧疆妫�楠岀粨鏋�
+ deviceMetricRecordAndMaintenanceDto.setJudgement(deviceMetricRecord.getStatus());
+ }
+
+ // 缁翠慨琛ㄦ暟鎹�
+ if (maintenanceSize > i) {
+ // 鑾峰彇璁惧缁翠慨琛ㄦ暟鎹�
+ DeviceMaintenance deviceMaintenance = deviceMaintenanceList.get(i);
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ // 缁翠慨鏃ユ湡
+ deviceMetricRecordAndMaintenanceDto.setMaintenanceDateString(deviceMaintenance.getMaintenanceDate().format(dateTimeFormatter));
+ // 澶勭悊鏂规硶
+ deviceMetricRecordAndMaintenanceDto.setHandlingMethod(deviceMaintenance.getMaintenanceContent());
+ // 澶囨敞
+ deviceMetricRecordAndMaintenanceDto.setComments(deviceMaintenance.getRemark());
+ }
+
+ deviceMetricRecordAndMaintenanceDtoList.add(deviceMetricRecordAndMaintenanceDto);
+ }
+ return deviceMetricRecordAndMaintenanceDtoList;
+ }
+
+ /**
+ * 缁欐。妗堝姞搴忓彿 骞跺乏鍙冲垎涓哄乏鍙充袱鍒楀湪word涓樉绀�
+ *
+ * @param documentList 妗f鍒楄〃
+ * @param documentExportWordDtoList 杩斿洖缁檞ord鐨勬暟鎹垪琛�
+ */
+ private static void extracted(List<DeviceDocuments> documentList, List<DocumentExportWordDto> documentExportWordDtoList) {
+ // 缁欐。妗堝姞搴忓彿 骞朵笖鍒嗕负宸﹀彸涓や釜鍒楄〃鍦╳ord涓樉绀�
+ for (int i = 0; i < documentList.size(); i++) {
+ // 鍒涘缓word琛ㄦ牸涓竴琛岀殑鏁版嵁瀵硅薄
+ DocumentExportWordDto documentExportWordDto = new DocumentExportWordDto();
+ // 鑾峰彇妗f淇℃伅
+ DeviceDocuments document = documentList.get(i);
+ // 鏍煎紡鍖栨棩鏈�
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ // 鏍规嵁搴忓彿 鍒嗗埆鍔犲叆涓や釜鍒楄〃
+ if (i % 2 == 0) {
+ // 濂囨暟鍦ㄥ乏鍒�
+ documentExportWordDto.setIndex1(i + 1);
+ documentExportWordDto.setName1(document.getName());
+ documentExportWordDto.setQuantity1(document.getQuantity());
+ documentExportWordDto.setPageCount1(document.getPageCount());
+ documentExportWordDto.setArchiveDateString1(document.getProvideDate().format(dateTimeFormatter));
+ } else {
+ // 鍋舵暟鍦ㄥ彸鍒�
+ documentExportWordDto.setIndex2(i + 1);
+ documentExportWordDto.setName2(document.getName());
+ documentExportWordDto.setQuantity2(document.getQuantity());
+ documentExportWordDto.setPageCount2(document.getPageCount());
+ documentExportWordDto.setArchiveDateString2(document.getProvideDate().format(dateTimeFormatter));
+ }
+ // 鎶婁竴琛屾暟鎹璞″姞鍏ュ垪琛�
+ documentExportWordDtoList.add(documentExportWordDto);
+ }
+ }
+
+ @Override
+ public void exportEquipmentDetails(HttpServletResponse response) {
+ List<Device> deviceList = baseMapper.selectList(null);
+ List<DeviceExport> deviceExportList = new ArrayList<>();
+
+ int index = 1;
+ for (Device device : deviceList) {
+ Integer equipmentManager = device.getEquipmentManager();
+ String equipmentManagerName = null;
+ if (equipmentManager != null) {
+ User user = userMapper.selectById(equipmentManager);
+ if (user != null) {
+ equipmentManagerName = user.getName();
+ }
+ }
+ DeviceExport deviceExport = new DeviceExport();
+ BeanUtils.copyProperties(device, deviceExport);
+ deviceExport.setIndex(index);
+ deviceExport.setEquipmentManagerName(equipmentManagerName);
+ deviceExportList.add(deviceExport);
+ index++;
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/quipment-details.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceList", deviceExportList);
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public void downloadImportTemplate(HttpServletResponse response) {
+ response.reset();
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+ try {
+ String fileName = URLEncoder.encode("璁惧瀵煎叆妯℃澘.xlsx", "UTF-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ EasyExcel.write(response.getOutputStream(), DeviceImport.class)
+ .sheet("璁惧瀵煎叆妯℃澘")
+ .doWrite(Collections.emptyList());
+ } catch (Exception e) {
+ throw new RuntimeException("璁惧瀵煎叆妯℃澘涓嬭浇澶辫触", e);
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int importDevice(org.springframework.web.multipart.MultipartFile file) {
+ if (file == null || file.isEmpty()) {
+ throw new RuntimeException("璇烽�夋嫨闇�瑕佸鍏ョ殑Excel鏂囦欢");
+ }
+ String fileName = file.getOriginalFilename();
+ if (fileName == null || !fileName.toLowerCase(Locale.ROOT).endsWith(".xlsx")) {
+ throw new RuntimeException("浠呮敮鎸�.xlsx鏍煎紡鏂囦欢");
+ }
+
+ final List<DeviceImport> rows;
+ try {
+ rows = EasyExcel.read(file.getInputStream())
+ .head(DeviceImport.class)
+ .sheet()
+ .doReadSync();
+ } catch (Exception e) {
+ throw new RuntimeException("Excel瑙f瀽澶辫触锛岃浣跨敤涓嬭浇鐨勫鍏ユā鏉�", e);
+ }
+ if (CollectionUtils.isEmpty(rows)) {
+ throw new RuntimeException("瀵煎叆鏂囦欢娌℃湁璁惧鏁版嵁");
+ }
+
+ Set<String> fileKeys = new HashSet<>();
+ for (int i = 0; i < rows.size(); i++) {
+ String managementNumber = required(rows.get(i).getManagementNumber(), i + 2, "绠$悊缂栧彿");
+ String deviceName = required(rows.get(i).getDeviceName(), i + 2, "浠櫒鍚嶇О");
+ String specificationModel = required(rows.get(i).getSpecificationModel(), i + 2, "瑙勬牸鍨嬪彿");
+ if (!fileKeys.add(deviceKey(deviceName, specificationModel, managementNumber))) {
+ throw new RuntimeException("绗�" + (i + 2) + "琛岋細浠櫒鍚嶇О+瑙勬牸鍨嬪彿+绠$悊缂栧彿鍦ㄦ枃浠朵腑閲嶅");
+ }
+ }
+ Set<String> existingKeys = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
+ .select(Device::getDeviceName, Device::getSpecificationModel, Device::getManagementNumber))
+ .stream().map(d -> deviceKey(d.getDeviceName(), d.getSpecificationModel(), d.getManagementNumber())).collect(Collectors.toSet());
+
+ Map<String, List<SysDept>> departmentMap = sysDeptMapper.selectDeptList(new SysDept()).stream()
+ .filter(item -> StringUtils.isNotBlank(item.getDeptName()))
+ .collect(Collectors.groupingBy(item -> item.getDeptName().trim()));
+ Map<String, List<User>> userMap = userMapper.selectList(Wrappers.<User>lambdaQuery()
+ .isNotNull(User::getName).select(User::getId, User::getName))
+ .stream().collect(Collectors.groupingBy(item -> item.getName().trim()));
+ Map<String, String> statusMap = dictMap("device_status");
+ Map<String, String> typeMap = dictMap("device_type");
+
+ List<Device> devices = new ArrayList<>();
+ for (int i = 0; i < rows.size(); i++) {
+ int rowNumber = i + 2;
+ DeviceImport row = rows.get(i);
+ String managementNumber = required(row.getManagementNumber(), rowNumber, "绠$悊缂栧彿");
+ String deviceName = required(row.getDeviceName(), rowNumber, "浠櫒鍚嶇О");
+ String specificationModel = required(row.getSpecificationModel(), rowNumber, "瑙勬牸鍨嬪彿");
+ if (existingKeys.contains(deviceKey(deviceName, specificationModel, managementNumber))) {
+ throw new RuntimeException("绗�" + rowNumber + "琛岋細浠櫒鍚嶇О鈥�" + deviceName + "鈥�+瑙勬牸鍨嬪彿鈥�" + specificationModel + "鈥�+绠$悊缂栧彿鈥�" + managementNumber + "鈥濆凡瀛樺湪");
+ }
+
+ String laboratoryName = required(row.getLaboratoryName(), rowNumber, "鎵�灞為儴闂�");
+ List<SysDept> departments = departmentMap.get(laboratoryName);
+ if (CollectionUtils.isEmpty(departments) || departments.size() > 1) {
+ throw new RuntimeException("绗�" + rowNumber + "琛岋細鎵�灞為儴闂ㄢ��" + laboratoryName + "鈥濅笉瀛樺湪鎴栦笉鍞竴");
+ }
+
+ Device device = new Device();
+ device.setDeviceName(deviceName);
+ device.setSpecificationModel(specificationModel);
+ device.setManagementNumber(managementNumber);
+ device.setActivationDate(parseDate(row.getActivationDate()));
+ device.setSubordinateDepartmentsId(departments.get(0).getDeptId().intValue());
+ device.setDeviceStatus(Integer.valueOf(dictValue(statusMap, row.getDeviceStatus(), rowNumber, "褰撳墠鐘舵��", true)));
+ device.setCalibrationDate(required(row.getCalibrationDate(), rowNumber, "鏍″噯鍛ㄦ湡(鏈�)"));
+ device.setEnDeviceName(trim(row.getEnDeviceName()));
+ device.setManufacturer(trim(row.getManufacturer()));
+ device.setFactoryNo(trim(row.getFactoryNo()));
+ device.setAssetCode(trim(row.getAssetCode()));
+ device.setOrigin(trim(row.getOrigin()));
+ device.setAcquisitionDate(parseDate(row.getAcquisitionDate()));
+ device.setStoragePoint(trim(row.getStoragePoint()));
+ device.setTechnicalIndicators(trim(row.getTechnicalIndicators()));
+ device.setCalibrationServices(trim(row.getCalibrationServices()));
+ device.setLastCalibrationDate(parseDate(row.getLastCalibrationDate()));
+ device.setNextCalibrationDate(parseDate(row.getNextCalibrationDate()));
+ device.setLargeCategory(dictValue(typeMap, row.getLargeCategory(), rowNumber, "璁惧绫诲瀷", false));
+ device.setUnitPrice(parseDecimal(row.getUnitPrice(), rowNumber, "鍗曚环(涓囧厓)"));
+
+ String managerName = trim(row.getEquipmentManagerName());
+ if (StringUtils.isNotBlank(managerName)) {
+ List<User> users = userMap.get(managerName);
+ if (CollectionUtils.isEmpty(users) || users.size() > 1) {
+ throw new RuntimeException("绗�" + rowNumber + "琛岋細璐熻矗浜衡��" + managerName + "鈥濅笉瀛樺湪鎴栦笉鍞竴");
+ }
+ device.setEquipmentManager(users.get(0).getId());
+ }
+ devices.add(device);
+ }
+ saveBatch(devices);
+ return devices.size();
+ }
+
+ private Map<String, String> dictMap(String dictType) {
+ return sysDictDataMapper.selectDictDataByType(dictType).stream()
+ .collect(Collectors.toMap(item -> item.getDictLabel().trim(), SysDictData::getDictValue, (first, second) -> first));
+ }
+
+ private String dictValue(Map<String, String> values, String input, int rowNumber, String column, boolean required) {
+ String text = trim(input);
+ if (StringUtils.isBlank(text)) {
+ if (required) {
+ throw new RuntimeException("绗�" + rowNumber + "琛岋細" + column + "涓嶈兘涓虹┖");
+ }
+ return null;
+ }
+ String value = values.get(text);
+ if (value == null && values.containsValue(text)) {
+ value = text;
+ }
+ if (value == null) {
+ throw new RuntimeException("绗�" + rowNumber + "琛岋細" + column + "鈥�" + text + "鈥濅笉鍦ㄧ郴缁熷瓧鍏镐腑");
+ }
+ return value;
+ }
+
+ private LocalDateTime parseDate(String input) {
+ String text = trim(input);
+ if (StringUtils.isBlank(text)) {
+ return null;
+ }
+ String datePart = text.replace('/', '-').split("\\s+")[0];
+ try {
+ return LocalDate.parse(datePart, DateTimeFormatter.ofPattern("yyyy-M-d")).atStartOfDay();
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ private BigDecimal parseDecimal(String input, int rowNumber, String column) {
+ String text = trim(input);
+ if (StringUtils.isBlank(text)) {
+ return null;
+ }
+ try {
+ return new BigDecimal(text);
+ } catch (NumberFormatException e) {
+ throw new RuntimeException("绗�" + rowNumber + "琛岋細" + column + "蹇呴』鏄暟瀛�", e);
+ }
+ }
+
+ private String required(String input, int rowNumber, String column) {
+ String value = trim(input);
+ if (StringUtils.isBlank(value)) {
+ throw new RuntimeException("绗�" + rowNumber + "琛岋細" + column + "涓嶈兘涓虹┖");
+ }
+ return value;
+ }
+
+ private String deviceKey(String deviceName, String specificationModel, String managementNumber) {
+ return (deviceName == null ? "" : deviceName.trim()) + "|"
+ + (specificationModel == null ? "" : specificationModel.trim()) + "|"
+ + (managementNumber == null ? "" : managementNumber.trim());
+ }
+
+ private String trim(String value) {
+ return value == null ? null : value.trim();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
new file mode 100644
index 0000000..4a0b914
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
@@ -0,0 +1,160 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.basic.mapper.LaboratoryMapper;
+import com.ruoyi.basic.pojo.Laboratory;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.device.dto.DeviceStateDto;
+import com.ruoyi.device.mapper.DeviceStateMapper;
+import com.ruoyi.device.pojo.DeviceState;
+import com.ruoyi.device.service.DeviceStateService;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.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-09-26 09:51:40
+ */
+@Service
+public class DeviceStateServiceImpl extends ServiceImpl<DeviceStateMapper, DeviceState> implements DeviceStateService {
+
+ @Resource
+ private LaboratoryMapper laboratoryMapper;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber) {
+ return baseMapper.getDeviceStatePage(deviceId, page, processNumber);
+ }
+
+ @Override
+ public void exportDeviceStatus(Integer deviceId, String processNumber, HttpServletResponse response) {
+ // 鏍规嵁娴佺▼缂栧彿 鏌ヨcnas璁惧鐘舵��
+ DeviceStateDto deviceStateDto = baseMapper.getDeviceStatePage(deviceId,new Page<DeviceStateDto>(1,1), processNumber).getRecords().get(0);
+
+ // 瀵规椂闂磋繘琛屼慨鏀�
+ DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+ deviceStateDto.setSubmitDateString(deviceStateDto.getSubmitDate() != null ? deviceStateDto.getSubmitDate().format(format) : " 骞� 鏈� 鏃�");
+ deviceStateDto.setDepartmentDateString(deviceStateDto.getDepartmentDate() != null? deviceStateDto.getDepartmentDate().format(format) : " 骞� 鏈� 鏃�");
+ deviceStateDto.setMeasuringRoomDateString(deviceStateDto.getMeasuringRoomDate() != null? deviceStateDto.getMeasuringRoomDate().format(format) : " 骞� 鏈� 鏃�");
+ deviceStateDto.setApprovalDateString(deviceStateDto.getApprovalDate() != null? deviceStateDto.getApprovalDate().format(format) : " 骞� 鏈� 鏃�");
+
+ // 鏌ヨ璁惧灞炰簬鍝釜瀹為獙瀹�
+ String laboratoryName;
+ String largeCategory = deviceStateDto.getLargeCategory();
+ if (StringUtils.isNotBlank(largeCategory)) {
+ largeCategory = largeCategory.substring(0, 1);
+ Laboratory laboratory = laboratoryMapper.selectOne(Wrappers.<Laboratory>lambdaQuery()
+ .eq(Laboratory::getLaboratoryNumber, largeCategory)
+ .select(Laboratory::getLaboratoryName));
+ laboratoryName = laboratory.getLaboratoryName();
+ } else {
+ laboratoryName = "";
+ }
+
+ //todo: 璁惧鐘舵�佹煡璇㈢鍚嶅湴鍧� 鏆傛椂浜哄悕鏌ヨ
+ //鑾峰彇鐢宠浜虹殑绛惧悕鍦板潃
+ String applicantUrl = null;
+ if (deviceStateDto.getSubmitOperatingPersonnel() != null) {
+ applicantUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, deviceStateDto.getSubmitOperatingPersonnel()))
+ .getSignatureUrl();
+ if (StringUtils.isBlank(applicantUrl)) {
+ throw new ErrorException("鎵句笉鍒扮敵璇蜂汉鐨勭鍚�");
+ }
+ }
+
+ //鑾峰彇閮ㄩ棬璐熻矗浜虹殑绛惧悕鍦板潃
+ String headOfDepartmentUrl = null;
+ if (deviceStateDto.getDepartmentNextPesponsible() != null) {
+ headOfDepartmentUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, deviceStateDto.getDepartmentNextPesponsible()))
+ .getSignatureUrl();
+ if (StringUtils.isBlank(headOfDepartmentUrl)) {
+ throw new ErrorException("鎵句笉鍒伴儴闂ㄨ礋璐d汉鐨勭鍚�");
+ }
+ }
+
+ //鑾峰彇璁¢噺瀹ゅ娴嬩汉鐨勭鍚嶅湴鍧�
+ String measurementRoomUrl = null;
+ if (deviceStateDto.getMeasuringRoomNextPesponsible() != null) {
+ measurementRoomUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, deviceStateDto.getMeasuringRoomNextPesponsible()))
+ .getSignatureUrl();
+ if (StringUtils.isBlank(measurementRoomUrl)) {
+ throw new ErrorException("鎵句笉鍒拌閲忓澶嶆祴浜虹殑绛惧悕");
+ }
+ }
+
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ String approvedUrl = null;
+ if (deviceStateDto.getApprovalNextPesponsible() != null) {
+ approvedUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, deviceStateDto.getApprovalNextPesponsible()))
+ .getSignatureUrl();
+ if (StringUtils.isBlank(approvedUrl)) {
+ throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
+ }
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-status.docx");
+ Configure configure = Configure.builder()
+ .build();
+ String finalApplicantUrl = applicantUrl; // 鐢宠浜虹殑绛惧悕鍦板潃
+ String finalHeadOfDepartmentUrl = headOfDepartmentUrl; // 閮ㄩ棬璐熻矗浜虹殑绛惧悕鍦板潃
+ String finalMeasurementRoomUrl = measurementRoomUrl; // 璁¢噺瀹ゅ娴嬩汉鐨勭鍚嶅湴鍧�
+ String finalApprovedUrl = approvedUrl; // 鎵瑰噯浜虹殑绛惧悕鍦板潃
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceStateDto", deviceStateDto);
+ put("submitOperatingPersonnelUrl", StringUtils.isNotBlank(finalApplicantUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApplicantUrl).create() : null);
+ put("departmentNextPesponsibleUrl", StringUtils.isNotBlank(finalHeadOfDepartmentUrl) ? Pictures.ofLocal(imgUrl + "/" + finalHeadOfDepartmentUrl).create() : null);
+ put("measuringRoomNextPesponsibleUrl", StringUtils.isNotBlank(finalMeasurementRoomUrl) ? Pictures.ofLocal(imgUrl + "/" + finalMeasurementRoomUrl).create() : null);
+ put("approvalNextPesponsibleUrl", StringUtils.isNotBlank(finalApprovedUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApprovedUrl).create() : null);
+ put("laboratory", laboratoryName);
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementDetailsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementDetailsServiceImpl.java
new file mode 100644
index 0000000..8e7763b
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementDetailsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceTraceabilityManagementDetailsMapper;
+import com.ruoyi.device.pojo.DeviceTraceabilityManagementDetails;
+import com.ruoyi.device.service.DeviceTraceabilityManagementDetailsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:58
+ */
+@Service
+public class DeviceTraceabilityManagementDetailsServiceImpl extends ServiceImpl<DeviceTraceabilityManagementDetailsMapper, DeviceTraceabilityManagementDetails> implements DeviceTraceabilityManagementDetailsService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java
new file mode 100644
index 0000000..4cba9bd
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java
@@ -0,0 +1,292 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.constant.MenuJumpPathConstants;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceTraceabilityManagementDetailsDto;
+import com.ruoyi.device.dto.DeviceTraceabilityManagementDto;
+import com.ruoyi.device.mapper.DeviceTraceabilityManagementDetailsMapper;
+import com.ruoyi.device.mapper.DeviceTraceabilityManagementMapper;
+import com.ruoyi.device.pojo.DeviceTraceabilityManagement;
+import com.ruoyi.device.pojo.DeviceTraceabilityManagementDetails;
+import com.ruoyi.device.service.DeviceTraceabilityManagementDetailsService;
+import com.ruoyi.device.service.DeviceTraceabilityManagementService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-20 02:27:44
+ */
+@Service
+public class DeviceTraceabilityManagementServiceImpl extends ServiceImpl<DeviceTraceabilityManagementMapper, DeviceTraceabilityManagement> implements DeviceTraceabilityManagementService {
+
+ @Resource
+ private DeviceTraceabilityManagementDetailsService deviceTraceabilityManagementDetailsService;
+
+ @Resource
+ private DeviceTraceabilityManagementDetailsMapper deviceTraceabilityManagementDetailsMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ @Resource
+ private InformationNotificationService informationNotificationService;
+
+ @Resource
+ private UserMapper userMapper;
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧閲忓�兼函婧愯鍒�
+ *
+ * @param page
+ * @return
+ */
+ @Override
+ public Result<IPage<DeviceTraceabilityManagement>> selectDeviceTraceabilityManagementByPage(Page page, DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ IPage<DeviceTraceabilityManagement> iPage = baseMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceTraceabilityManagementDto));
+ return Result.success(iPage);
+ }
+
+
+ /**
+ * 鏂板璁惧閲忓�兼函婧愯鍒�
+ *
+ * @param deviceTraceabilityManagementDto 璁惧閲忓�兼函婧愯鍒�
+ */
+ @Override
+ public Result addTraceabilityManagement(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ deviceTraceabilityManagementDto.setCompilerId(userId);
+ deviceTraceabilityManagementDto.setCompiler(user.getName());
+ deviceTraceabilityManagementDto.setDatePreparation(LocalDateTime.now());
+
+ // 鏌ヨ瀹℃牳浜篿d
+ if (deviceTraceabilityManagementDto.getAuditId() != null) {
+ User auditUser = userMapper.selectById(deviceTraceabilityManagementDto.getAuditId());
+ deviceTraceabilityManagementDto.setAudit(auditUser.getName());
+ }
+ this.saveOrUpdate(deviceTraceabilityManagementDto);
+
+ // 璇︽儏璧嬪�煎苟淇濆瓨
+ List<DeviceTraceabilityManagementDetailsDto> deviceTraceabilityManagementDetails = deviceTraceabilityManagementDto.getDeviceTraceabilityManagementDetails();
+ if (CollectionUtils.isNotEmpty(deviceTraceabilityManagementDetails)) { // 璇︽儏涓嶄负绌�
+ List<DeviceTraceabilityManagementDetails> collect = deviceTraceabilityManagementDetails.stream().map(detailsDto -> {
+ detailsDto.setTraceabilityManagementId(deviceTraceabilityManagementDto.getTraceabilityManagementId()); // 閲忓�兼函婧愯鍒扞D
+ DeviceTraceabilityManagementDetails details = new DeviceTraceabilityManagementDetails();
+ BeanUtils.copyProperties(detailsDto, details);
+ return details;
+ }).collect(Collectors.toList());
+ deviceTraceabilityManagementDetailsService.saveBatch(collect);
+ }
+
+ return Result.success();
+ }
+
+ /**
+ * 淇敼璁惧閲忓�兼函婧愯鍒�
+ *
+ * @param deviceTraceabilityManagementDto 璁惧閲忓�兼函婧愯鍒�
+ */
+ @Override
+ public Result updateTraceabilityManagement(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ // 鏌ヨ瀹℃牳浜篿d
+ if (deviceTraceabilityManagementDto.getAuditId() != null) {
+ User auditUser = userMapper.selectById(deviceTraceabilityManagementDto.getAuditId());
+ deviceTraceabilityManagementDto.setAudit(auditUser.getName());
+ }
+ this.saveOrUpdate(deviceTraceabilityManagementDto);
+
+ // 鍒犻櫎鍘熸湰鐨勮鎯�
+ deviceTraceabilityManagementDetailsService.remove(Wrappers.<DeviceTraceabilityManagementDetails>lambdaQuery().eq(DeviceTraceabilityManagementDetails::getTraceabilityManagementId, deviceTraceabilityManagementDto.getTraceabilityManagementId()));
+ // 璇︽儏璧嬪�煎苟淇濆瓨
+ List<DeviceTraceabilityManagementDetailsDto> deviceTraceabilityManagementDetails = deviceTraceabilityManagementDto.getDeviceTraceabilityManagementDetails();
+ if (CollectionUtils.isNotEmpty(deviceTraceabilityManagementDetails)) { // 璇︽儏涓嶄负绌�
+ List<DeviceTraceabilityManagementDetails> collect = deviceTraceabilityManagementDetails.stream().map(detailsDto -> {
+ detailsDto.setTraceabilityManagementId(deviceTraceabilityManagementDto.getTraceabilityManagementId()); // 閲忓�兼函婧愯鍒扞D
+ DeviceTraceabilityManagementDetails details = new DeviceTraceabilityManagementDetails();
+ BeanUtils.copyProperties(detailsDto, details);
+ return details;
+ }).collect(Collectors.toList());
+ deviceTraceabilityManagementDetailsService.saveBatch(collect);
+ }
+ return Result.success();
+ }
+
+ /**
+ * 鍒犻櫎璁惧閲忓�兼函婧愯鍒�
+ *
+ * @param deviceTraceabilityManagementDto 璁惧閲忓�兼函婧愯鍒�
+ */
+ @Override
+ public Result deleteTraceabilityManagement(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ this.removeById(deviceTraceabilityManagementDto);
+ deviceTraceabilityManagementDetailsService.remove(Wrappers.<DeviceTraceabilityManagementDetails>lambdaQuery().eq(DeviceTraceabilityManagementDetails::getTraceabilityManagementId, deviceTraceabilityManagementDto.getTraceabilityManagementId()));
+ return Result.success();
+ }
+
+ /**
+ * 鏌ヨ璁惧閲忓�兼函婧愯鍒掕鎯�
+ *
+ * @param traceabilityManagementId 璁惧閲忓�兼函婧愯鍒抜d
+ */
+ @Override
+ public Result<DeviceTraceabilityManagementDto> getTraceabilityManagementDetail(Integer traceabilityManagementId) {
+ // 鏌ヨ璁惧閲忓�兼函婧愯鍒�
+ DeviceTraceabilityManagement deviceTraceabilityManagement = baseMapper.selectById(traceabilityManagementId);
+ // 鏌ヨ璇︽儏
+ DeviceTraceabilityManagementDto deviceTraceabilityManagementDto = new DeviceTraceabilityManagementDto();
+ BeanUtils.copyProperties(deviceTraceabilityManagement, deviceTraceabilityManagementDto);
+ deviceTraceabilityManagementDto.setDeviceTraceabilityManagementDetails(deviceTraceabilityManagementDetailsMapper.deviceTraceabilityManagementDetailsList(traceabilityManagementId));
+ return Result.success(deviceTraceabilityManagementDto);
+ }
+
+ /**
+ * 鎻愪氦鎵瑰噯
+ * @param deviceTraceabilityManagementDto
+ * @return
+ */
+ @Override
+ public Result submitReviewTraceabilityManagementStatus(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ User audit = userMapper.selectById(deviceTraceabilityManagementDto.getAuditId());
+ this.update(Wrappers.<DeviceTraceabilityManagement>lambdaUpdate()
+ .eq(DeviceTraceabilityManagement::getTraceabilityManagementId, deviceTraceabilityManagementDto.getTraceabilityManagementId())
+ .set(DeviceTraceabilityManagement::getAuditId, audit.getId())
+ .set(DeviceTraceabilityManagement::getAudit, audit.getName())
+ .set(DeviceTraceabilityManagement::getAuditDate, null)
+ .set(DeviceTraceabilityManagement::getStatus, null)
+ .set(DeviceTraceabilityManagement::getAuditRemark, null));
+
+ DeviceTraceabilityManagement deviceTraceabilityManagement = baseMapper.selectById(deviceTraceabilityManagementDto.getTraceabilityManagementId());
+
+ // 鍙戦�佹秷鎭�
+ 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(deviceTraceabilityManagement.getPlanYear() + "骞寸殑璁惧閲忓�兼函婧愯鍒掑緟鎵瑰噯");
+ info.setSenderId(userId);
+ // 鎺ユ敹浜�
+ info.setConsigneeId(audit.getId());
+ info.setJumpPath(MenuJumpPathConstants.DEVICE);
+ informationNotificationService.addInformationNotification(info);
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ String message = "";
+ message += "CNAS璁惧閲忓�兼函婧愯鍒掓牳閫氱煡";
+ message += "\n璇峰幓璧勬簮绠$悊-璁惧涓�灞傜洰褰�-璁惧閲忓�兼函婧愯鍒掑~鍐�";
+ message += "\n" + deviceTraceabilityManagement.getPlanYear() + "骞寸殑璁惧閲忓�兼函婧愯鍒掑緟鎵瑰噯";
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(audit.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ return Result.success();
+ }
+
+ /**
+ * 瀹℃牳璁惧閲忓�兼函婧愯鍒�
+ *
+ * @param deviceTraceabilityManagementDto 璁惧閲忓�兼函婧愯鍒�
+ */
+ @Override
+ public Result reviewTraceabilityManagementStatus(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
+ LambdaUpdateWrapper<DeviceTraceabilityManagement> wrapper = Wrappers.<DeviceTraceabilityManagement>lambdaUpdate()
+ .eq(DeviceTraceabilityManagement::getTraceabilityManagementId, deviceTraceabilityManagementDto.getTraceabilityManagementId())
+ .set(DeviceTraceabilityManagement::getAuditDate, LocalDateTime.now())
+ .set(DeviceTraceabilityManagement::getStatus, deviceTraceabilityManagementDto.getStatus()) // 瀹℃牳鐘舵��
+ .set(DeviceTraceabilityManagement::getAuditRemark, deviceTraceabilityManagementDto.getAuditRemark());// 瀹℃牳澶囨敞
+
+ this.update(wrapper); // 鏇存柊
+ return Result.success();
+ }
+
+ /**
+ * 瀵煎嚭璁惧閲忓�兼函婧愯鍒�
+ *
+ * @param traceabilityManagementId 璁惧閲忓�兼函婧愯鍒抜d
+ */
+ @Override
+ public Result exportDeviceTraceabilityManagementDto(Integer traceabilityManagementId, HttpServletResponse response) {
+ // 鏌ヨ璁惧淇濆吇璁″垝
+ DeviceTraceabilityManagementDto deviceTraceabilityManagement = baseMapper.selectDeviceTraceabilityManagementById(traceabilityManagementId);
+
+ // 鏌ヨ璁惧淇濆吇璁″垝璇︽儏
+ List<DeviceTraceabilityManagementDetailsDto> deviceTraceabilityManagementDetailsDtoList = deviceTraceabilityManagementDetailsMapper.deviceTraceabilityManagementDetailsList(traceabilityManagementId);
+ // 璁剧疆搴忓彿
+ deviceTraceabilityManagementDetailsDtoList.forEach(deviceTraceabilityManagementDetails -> {
+ deviceTraceabilityManagementDetails.setIndex(deviceTraceabilityManagementDetailsDtoList.indexOf(deviceTraceabilityManagementDetails) + 1);
+ });
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/traceability-management-details.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceTraceabilityManagementDetailsDtoList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceTraceabilityManagement", deviceTraceabilityManagement);
+ put("deviceTraceabilityManagementDetailsDtoList", deviceTraceabilityManagementDetailsDtoList);
+ // 缂栧埗浜虹鍚嶅湴鍧�
+ put("compilerUrl", UserUtils.getFinalUserSignatureUrl(deviceTraceabilityManagement.getCompilerId()));
+ // 瀹℃牳浜虹鍚嶅湴鍧�
+ put("auditUrl", UserUtils.getFinalUserSignatureUrl(deviceTraceabilityManagement.getAuditId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String finalFileName = deviceTraceabilityManagement.getFileName() == null ? "" : deviceTraceabilityManagement.getFileName() + "_";
+ String fileName = URLEncoder.encode(
+ finalFileName+ "璁惧閲忓�兼函婧愯鍒�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ return Result.success();
+ }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/task/DeviceRecordSchedule.java b/cnas-device/src/main/java/com/ruoyi/device/task/DeviceRecordSchedule.java
new file mode 100644
index 0000000..24bc432
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/task/DeviceRecordSchedule.java
@@ -0,0 +1,104 @@
+package com.ruoyi.device.task;
+
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceRecordDto;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.mapper.DeviceRecordMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceRecord;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 璁惧浣跨敤璁板綍鎻愰啋
+ */
+@Component
+public class DeviceRecordSchedule {
+
+ @Resource
+ private DeviceMapper deviceMapper;
+ @Resource
+ private DeviceRecordMapper deviceRecordMapper;
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+ /**
+ * 鎻愰啋濉啓璁惧浣跨敤璁板綍
+ */
+// @Scheduled(cron = "0/5 * * * * *")
+ @Scheduled(cron = "0 0 9 * * 6") // 姣忓懆鍏墽琛屼竴娆�
+ public void task1() {
+ // 鏌ヨ鏈~鍐欑殑璁惧浣跨敤璁板綍
+ List<DeviceRecordDto> deviceRecords = deviceRecordMapper.selectNotFilled();
+ Map<Integer, List<DeviceRecordDto>> userPersonIdMap = deviceRecords.stream().collect(Collectors.groupingBy(DeviceRecord::getUsePersonId));
+ userPersonIdMap.forEach((userId, recordList) -> {
+ threadPoolTaskExecutor.execute(() -> {
+ // 浼佷笟寰俊閫氱煡濉啓璁惧浣跨敤璁板綍
+ User user = userMapper.selectById(userId);
+ String message = "";
+ message += "璁惧浣跨敤璁板綍鏈~鍐欐彁閱掗�氱煡";
+ for (DeviceRecordDto deviceRecord : recordList) {
+ message += "\n璁惧鍚嶇О缂栧彿: " + deviceRecord.getDeviceName() + "-" + deviceRecord.getManagementNumber();
+ message += "\n濮旀墭缂栧彿: " + deviceRecord.getSampleCode();
+ message += "\n";
+ }
+ message += "\n璇峰幓濉啓璁惧浣跨敤璁板綍";
+
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(user.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ });
+ });
+ }
+
+
+ /**
+ * 姣忓ぉ9鐐规墽琛屼竴娆� 闄や簡鏄熸湡澶�
+ * 鍒ゆ柇鏄惁鏈夎澶囧埌杈炬牎鍑嗘湁鏁堟湡
+ */
+// @Scheduled(cron = "0/10 * * * * *")
+ @Scheduled(cron = "0 0 9 * * 1-6") // 姣忓ぉ9鐐规墽琛屼竴娆� 闄や簡鏄熸湡澶�
+ public void task2() {
+ // 鏌ヨ鍒拌揪鏍″噯鏈夋晥鏈熺殑璁惧-鎻愬墠5澶�
+ List<Device> deviceList = deviceMapper.selectOverdueDevice();
+ Map<Integer, List<Device>> userPersonIdMap = deviceList.stream().collect(Collectors.groupingBy(Device::getEquipmentManager));
+ userPersonIdMap.forEach((userId, recordList) -> {
+ threadPoolTaskExecutor.execute(() -> {
+ // 浼佷笟寰俊閫氱煡濉啓璁惧浣跨敤璁板綍
+ User user = userMapper.selectById(userId);
+ String message = "";
+ message += "璁惧鍒拌揪鏍″噯鏈夋晥鏈�";
+ for (Device deviceRecord : recordList) {
+ message += "\n璁惧鍚嶇О: " + deviceRecord.getDeviceName();
+ message += "\n璁惧缂栧彿: " + deviceRecord.getManagementNumber();
+ message += "\n鏍″噯鏈夋晥鏈�: " + deviceRecord.getActivationDate();
+ message += "\n";
+ }
+ message += "\n璇峰幓杩涜璁惧鏍″噯";
+
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(user.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ });
+ });
+ }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java b/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
new file mode 100644
index 0000000..90a0573
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
@@ -0,0 +1,861 @@
+package com.ruoyi.device.utils;
+
+import cn.hutool.core.io.IORuntimeException;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.ruoyi.device.pojo.DataConfig;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.framework.exception.ErrorException;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import jakarta.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+public class DataAcquisition {
+
+ private static final String HTTP = "http://";
+
+ private static final String GETFILE = ":9527/lims/getFile"; // 鑾峰彇鏂囦欢鎺ュ彛
+
+ private static final String MOVEFILE = ":9527/lims/moveFile"; // 鏂囦欢绉诲姩鍦板潃
+
+ private static final String splitIdentifier = "@-@"; // 鑷畾涔夊敮涓�鏍囪瘑鍒嗗壊绗�
+
+ public static final String frequency = "frequency";
+
+ /**
+ * 鏁伴噰鍏ュ彛
+ *
+ * @param dataConfig
+ * @param device
+ * @return
+ */
+ public static Map<String, Object> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip, String cableTag) {
+ // 鍒ゆ柇鏄惁鏄奖鍍忔祴閲忎华
+ if (device.getManagementNumber().equals("JCZX-ZB-OP07001")) {
+ if (device.getFileType().equals(".xlsx")) {
+ String url = device.getCollectUrl() + "\\" + sampleCode.replace("/", "");
+ if (StringUtils.isNotBlank(dataConfig.get(0).getAnotherName())) {
+ url += dataConfig.get(0).getAnotherName() ;
+ }
+ url += ".xlsx";
+ device.setCollectUrl(url);
+ }
+ }
+ // 鍒ゆ柇鏄惁鏄數缂嗙噧鐑х儫瀵嗗害娴嬮噺绯荤粺
+ if (device.getManagementNumber().equals("JCZX-ZB-ZT03002")) {
+ if (device.getFileType().equals(".txt")) {
+ device.setCollectUrl(device.getCollectUrl() + "\\-" + sampleCode.replace("/", ""));
+ }
+ }
+ /**
+ * filePath 鏂囦欢閲囬泦璺緞
+ * fileExtension 鏂囦欢鍚庣紑
+ * entrustCode 濮旀墭缂栧彿
+ * sampleCode 鏍峰搧缂栧彿
+ * mdbEntrustCode mdb鏂囦欢闇�瑕侊細濮旀墭缂栧彿瀛楁 涓轰粈涔堟病鏈夊幓杩欎釜mdb鍓嶇紑鍛紵鍥犱负宸茬粡缁欏鎴风殑閮ㄥ垎鐢佃剳涓婂畨瑁呬簡閲囬泦鍣紝鑰岀敤鎴蜂笉鎺ュ彈閲嶆柊瀹夎閲囬泦鍣紝鎵�浠ュ氨娌℃湁鍘婚櫎
+ * mdbSampleCode mdb鏂囦欢闇�瑕侊細鏍峰搧缂栧彿瀛楁
+ */
+ String http = HTTP + ip + GETFILE +
+ "?filePath=" + device.getCollectUrl() +
+ "&fileExtension=" + device.getFileType() +
+ "&entrustCode=" + entrustCode +
+ "&sampleCode=" + sampleCode +
+ "&mdbEntrustCode=" + device.getEntrustCode() +
+ "&mdbSampleCode=" + device.getSampleCode() +
+ "&dbFileName=" + device.getDbFileName();
+ String result = null;
+ try {
+ result = HttpUtil.get(http);
+ } catch (IORuntimeException e) {
+ e.printStackTrace();
+ throw new ErrorException("鎵�鍦ㄧ數鑴戞湭瀹夎鎴栨湭鍚姩锛歀IMS鏂囦欢閲囬泦鍣紒");
+ }
+ JSONObject jsonObject = JSON.parseObject(result);
+ if (Objects.equals(jsonObject.get("code"), 1)) {
+ if (ObjectUtils.isEmpty(jsonObject.get("msg"))) {
+ throw new ErrorException("鏈煡璇㈠埌鏂囦欢锛佸彲鑳借璺緞锛�" + device.getCollectUrl() + "锛変笅骞舵病鏈夋墍闇�(" + device.getFileType() +")鏂囦欢锛�");
+ } else {
+ throw new ErrorException(jsonObject.get("msg") + "");
+ }
+ } else {
+ String data = jsonObject.get("data") + "";
+ // 鑰冭檻鍒颁竴涓娴嬮」鍙兘浼氬瓨鍦ㄥ涓暟閲囬厤缃紝鎵�浠ラ渶瑕佽繘琛屽垎缁�
+ Map<String, List<DataConfig>> userMap = dataConfig.stream()
+ .peek(i -> {
+ String itemName = i.getInspectionItem();
+ if (StringUtils.isNotBlank(i.getInspectionItemClass())) {
+ itemName += "@" + i.getInspectionItemClass();
+ }
+ String name = i.getInspectionItem().equals(i.getInspectionItemSubclass()) ? itemName + "," : itemName + "," + i.getInspectionItemSubclass();
+
+ // 娣诲姞妫�楠岄」鍚嶇О
+ i.setInsProductItem(name);
+ })
+ .collect(Collectors.groupingBy(DataConfig::getInsProductItem));
+ Map<String, Object> map;
+ switch (device.getFileType()) {
+ case ".docx":
+ map = analysisString(data, userMap, device, entrustCode, sampleCode);
+ break;
+ case ".xlsx":
+ map = analysisList(data, userMap, device, entrustCode, sampleCode);
+ break;
+ case ".txt":
+ map = analysisTxt(data, userMap, device, entrustCode, sampleCode);
+ break;
+ case ".csv":
+ map = analysisList(data, userMap, device, entrustCode, sampleCode);
+ break;
+ case ".mdb":
+ // 鍒ゆ柇鏄惁鏄媺鍔涙満
+ if (device.getManagementNumber().equals("JCZX-ZB-FF01014")) {
+ map = analysisMdbByPull(data, userMap, device, cableTag);
+ } else {
+ map = analysisMdb(data, userMap, device);
+ }
+ break;
+ case ".db":
+ map = analysisDb(data, userMap, device);
+ break;
+ case ".png":
+ map = readPngString(data, userMap, device);
+ break;
+ default:
+ map = null;
+ break;
+ }
+ // 濡傛灉瀛樺湪瀛樺偍鍦板潃锛屽垯绉诲姩鍦板潃
+ if (ObjectUtils.isNotEmpty(device.getStorageUrl())) {
+ String s = HTTP + ip + MOVEFILE + "?startFilePath=" + device.getCollectUrl() + "&endFilePath=" + device.getStorageUrl() + "&fileType=" + device.getFileType();
+ HttpUtil.get(s);
+ }
+ return map;
+ }
+ }
+
+ public static Map<String, Object> createFrequency(String entrustCode, String sampleCode, Map<String, Object> map) {
+ Set<String> set = new LinkedHashSet<>();
+ map.forEach((key, value) -> {
+ String[] split = key.split(",");
+ String inspectionItem = split[0];
+ // 鍙鏈変竴涓笉涓虹┖灏眘et杩涘幓
+ if (ObjectUtils.isNotEmpty(value)) {
+ set.add(inspectionItem);
+ }
+ });
+ Map<String, Object> result = new HashMap<>();
+ for (String inspectionItemKey : set) {
+ Map<String, Object> hashMap = new HashMap<>();
+ map.forEach((key, value) -> {
+ String[] split = key.split(",");
+ String inspectionItem = split[0];
+ if (inspectionItemKey.equals(inspectionItem)) {
+ if (split.length > 1) {
+ hashMap.put(split[1], value);
+ } else {
+ hashMap.put("", value);
+ }
+ }
+ });
+ String frequency = createKey(entrustCode, sampleCode, inspectionItemKey);
+ hashMap.put("frequency", frequency);
+ result.put(inspectionItemKey, hashMap);
+ }
+ return result;
+ }
+
+ public static String createKey(String entrustCode, String sampleCode, String inspectionItemKey) {
+
+ return "1";
+ }
+
+ /**
+ * 闇�瑕侀�氳繃X,Y杞村畾浣�
+ *
+ * @param data
+ * @param dataConfig
+ * @return
+ */
+ private static Map<String, Object> analysisDb(String data, Map<String, List<DataConfig>> dataConfig, Device device) {
+ JSONObject jsonObject = JSON.parseObject(data);
+ Map<String, Object> map = new HashMap<>();
+ if (jsonObject.isEmpty()) {
+ return map;
+ }
+ JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
+ dataConfig.forEach((k, v) -> {
+ AtomicInteger numberOfDataEntries = new AtomicInteger();
+ List<Object> list = new ArrayList<>();
+ for (int config = 0; config < v.size(); config++) {
+ String refery = getRefer(v.get(config).getRefery());
+ for (int i = 0; i < dataList.size(); i++) {
+ JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
+ Object o = jsonObject1.get(refery);
+ if (ObjectUtils.isNotEmpty(o)) {
+ numberOfDataEntries.addAndGet(1);
+ list.add(o);
+ }
+ }
+ }
+ // 鎷兼帴鏁伴噰閰嶇疆
+ List<Object> result = new ArrayList<>();
+ for (int i = 0; i < numberOfDataEntries.get(); i++) {
+ String aggregate = "";
+ for (int j = 0; j < v.size(); j++) {
+ int index;
+ if (j == 0) {
+ index = i;
+ } else {
+ index = numberOfDataEntries.get() + i;
+ }
+ aggregate += list.get(index).toString() + ",";
+ }
+ int lastIndex = aggregate.lastIndexOf(",");
+ String substring = aggregate.substring(0, lastIndex);
+ result.add(substring);
+ }
+ // 杩涜鍏紡璁$畻
+ Object resultValue = calculationFormula(result, v.get(0), k, device);
+ map.put(k, resultValue);
+ });
+ return map;
+ }
+
+ /**
+ * @param data
+ * @param dataConfig
+ * @return
+ */
+ private static Map<String, Object> analysisMdb(String data, Map<String, List<DataConfig>> dataConfig, Device device) {
+ JSONObject jsonObject = JSON.parseObject(data);
+ Map<String, Object> map = new HashMap<>();
+ if (jsonObject.isEmpty()) {
+ return map;
+ }
+ JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
+ dataConfig.forEach((k, v) -> {
+ DataConfig configVo = v.get(0);
+ AtomicInteger numberOfDataEntries = new AtomicInteger();
+ List<Object> list = new ArrayList<>();
+ for (int config = 0; config < v.size(); config++) {
+ String refery = getRefer(v.get(config).getRefery());
+ for (int i = 0; i < dataList.size(); i++) {
+ JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
+ Object o = jsonObject1.get(refery);
+ if (ObjectUtils.isNotEmpty(o)) {
+ numberOfDataEntries.addAndGet(1);
+ list.add(o);
+ }
+ }
+ }
+ // 鎷兼帴鏁伴噰閰嶇疆
+ List<Object> result = new ArrayList<>();
+ for (int i = 0; i < numberOfDataEntries.get(); i++) {
+ String aggregate = "";
+ for (int j = 0; j < v.size(); j++) {
+ int index;
+ if (j == 0) {
+ index = i;
+ } else {
+ index = numberOfDataEntries.get() + i;
+ }
+ aggregate += list.get(index).toString() + ",";
+ }
+ int lastIndex = aggregate.lastIndexOf(",");
+ String substring = aggregate.substring(0, lastIndex);
+ result.add(substring);
+
+ }
+ // 杩涜鍏紡璁$畻
+ Object resultValue = calculationFormula(result, v.get(0), k, device);
+ map.put(k, resultValue);
+ });
+ return map;
+ }
+
+
+ /**
+ * 鎷夊姏鏈烘暟閲�
+ *
+ * @param data
+ * @param dataConfig
+ * @return
+ */
+ private static Map<String, Object> analysisMdbByPull(String data, Map<String, List<DataConfig>> dataConfig, Device device, String cableTag) {
+ JSONObject jsonObject = JSON.parseObject(data);
+ Map<String, Object> map = new HashMap<>();
+ if (jsonObject.isEmpty()) {
+ return map;
+ }
+ JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
+
+ dataConfig.forEach((k, v) -> {
+ List<Map<String, String>> resultValue = new ArrayList<>();
+
+ DataConfig configVo = v.get(0);
+ for (int i = 0; i < dataList.size(); i++) {
+ JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
+ // 鑾峰彇鏃堕棿
+ String dDate = jsonObject1.getString("dDate");
+ String dTime = jsonObject1.getString("dTime");
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
+
+ // 瑙f瀽绗竴涓棩鏈熸椂闂村瓧绗︿覆
+ LocalDateTime dateTime1 = LocalDateTime.parse(dDate, formatter);
+ // 鑾峰彇骞存湀鏃�
+ String yearMonthDay = dateTime1.toLocalDate().toString();
+
+ // 瑙f瀽绗簩涓棩鏈熸椂闂村瓧绗︿覆
+ LocalDateTime dateTime2 = LocalDateTime.parse(dTime, formatter);
+ // 鑾峰彇鏃跺垎
+ String hourMinute = dateTime2.toLocalTime().toString();
+ // 鎷兼帴骞存湀鏃ュ拰鏃跺垎
+ String mergedDateTime = yearMonthDay + " " + hourMinute;
+
+ // 鑾峰彇鍘氬害
+ String report = jsonObject1.getString("Report");
+ String thickness = extractValue(report, "鍘氬害:\\s*(\\S*?)~");
+
+ // 鑾峰彇鎷変几寮哄害浼搁暱鐜�
+ String result = "";
+ if (StringUtils.isNotBlank(configVo.getMatchingName()) && configVo.getMatchingName().contains("鎷変几寮哄害")) {
+ result = extractValue(report, "鎷変几寮哄害:\\s*(\\S*?)~");
+
+ }
+ //鍒ゆ柇妫�楠屽瓙椤规槸鍚︽槸鎷変几寮哄害
+ if (StringUtils.isNotBlank(configVo.getMatchingName()) && configVo.getMatchingName().contains("浼搁暱鐜�")) {
+ result = extractValue(report, "浼搁暱鐜�:\\s*(\\S*?)~");
+ }
+ Map<String, String> reportMap = new HashMap<>();
+ reportMap.put("mergedDateTime", mergedDateTime);
+ reportMap.put("thickness", thickness);
+ reportMap.put("result", result);
+ resultValue.add(reportMap);
+ }
+ Map<String, Object> hashMap = new HashMap<>();
+ hashMap.put("equipName", device.getDeviceName());
+ hashMap.put("equipValue", device.getManagementNumber());
+ hashMap.put("result", resultValue);
+ map.put(k, hashMap);
+ });
+ return map;
+ }
+
+ private static String extractValue(String input, String regex) {
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(input);
+ return matcher.find() ? matcher.group(1) : null;
+ }
+
+ private static Pattern SPATTERN = Pattern.compile("([-+])?\\d+(\\.\\d+)?");
+
+ /**
+ * 鍙渶X杞�
+ *
+ * @param data 閲囬泦鍒扮殑鏂囦欢瀛楃涓�
+ * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗�
+ * @return
+ */
+ private static Map<String, Object> readPngString(String data, Map<String, List<DataConfig>> dataConfig, Device device) {
+ Map<String, Object> map = new HashMap<>();
+ dataConfig.forEach((k, v) -> {
+ List<Object> list = new ArrayList<>();
+ for (int config = 0; config < v.size(); config++) {
+ String referx = getRefer(v.get(config).getReferx());
+ String result = null;
+ // 閫氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿
+ String[] aColumnY = data.split("\n");
+ List<String> list1 = new ArrayList<>();
+ // 璇ュ惊鐜緱鍑虹敤鎴烽厤缃殑y杞�
+ for (int i = 0; i < aColumnY.length; i++) {
+ String addDataWithSpaces = referx.replaceAll("", " ");
+ int x = getXOrY(v.get(config).getX(), k, "X");
+ if (aColumnY[i].contains(addDataWithSpaces)) {
+ Matcher matcher = SPATTERN.matcher(aColumnY[i]);
+ while (matcher.find()) {
+ String group = matcher.group();
+ list1.add(group);
+ }
+ }
+ if (ObjectUtils.isNotEmpty(list1)) {
+ result = list1.get(x);
+ }
+ }
+ if (ObjectUtils.isNotEmpty(result)) {
+ list.add(result);
+ }
+ }
+ // 杩涜鍏紡璁$畻
+ Object resultValue = calculationFormula(list, v.get(0), k, device);
+ map.put(k, resultValue);
+ });
+ return map;
+ }
+
+ /**
+ * 浠庢枃浠朵腑鎻愬彇鍑烘潵鐨勬枃瀛楋紝濡傛灉鏈夊叕寮忥紝杩涜鍏紡璁$畻锛屽惁鍒欏彇鍒楄〃绗竴涓��
+ *
+ * @param list 鎻愬彇鍑虹殑鏁板瓧
+ * @param dataConfig 瀛樺偍鍏紡鐨勫璞�
+ * @return
+ */
+ private static Object calculationFormula(List<Object> list, DataConfig dataConfig, String insProductItem, Device device) {
+ if (list.size() == 0) {
+ Map<String, Object> hashMap = new HashMap<>();
+ hashMap.put("equipName", device.getDeviceName());
+ hashMap.put("equipValue", device.getManagementNumber());
+ hashMap.put("result", null);
+ return hashMap;
+ }
+ ArrayList<Object> listResult = new ArrayList<>();
+ Map<String, Object> hashMap = new HashMap<>();
+ // 濡傛灉涓嶄负绌猴紝杩涜鍏紡璁$畻
+ if (ObjectUtils.isNotEmpty(dataConfig.getFormula())) {
+ // 鍚﹀垯锛氭病鏈夊叕寮忎唬琛ㄤ笉闇�瑕佽绠楋紝鐩存帴鎻愬彇List閲岄潰鐨勬暟鎹�
+ if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
+ String s = calculationFormulaList(list, dataConfig.getFormula());
+ listResult.add(s);
+ } else {
+ list.forEach(i -> {
+ List<Object> strings = Arrays.asList(i.toString().split(","));
+ String s = calculationFormulaList(strings, dataConfig.getFormula());
+ listResult.add(s);
+ });
+ }
+ } else {
+ listResult.addAll(list);
+ }
+ // 涓轰簡缁欏墠绔仛鏁版嵁鍖哄垎
+ if (listResult.size() > 1) {
+ hashMap.put("result", listResult);
+ } else {
+ hashMap.put("result", listResult.get(0).toString());
+ }
+ hashMap.put("equipName", device.getDeviceName());
+ hashMap.put("equipValue", device.getManagementNumber());
+ return hashMap;
+ }
+
+ /**
+ * 瑙f瀽String鏁版嵁
+ *
+ * @param data 閲囬泦鍒扮殑鏂囦欢瀛楃涓�
+ * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗�
+ * @return
+ */
+ private static Map<String, Object> analysisTxt(String data, Map<String, List<DataConfig>> dataConfig,
+ Device device, String entrustCode, String sampleCode) {
+ Map<String, Object> map = new HashMap<>();
+ dataConfig.forEach((k, v) -> {
+ List<Object> list = new ArrayList<>();
+ // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X
+ if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
+ // 鍒ゆ柇鏄惁鏄儫瀵嗗害
+ if (device.getManagementNumber().equals("JCZX-ZB-ZT03002")) {
+ // 鎸夎鍒嗗壊鏁版嵁
+ String[] lines = data.split("\n");
+
+ // 鎻愬彇鏈�鍚庝竴琛岀殑绗竴涓暟瀛�
+ String lastLine = lines[lines.length - 1];
+ String firstNumber = lastLine.split("\t")[0];
+ list.add(firstNumber);
+ } else {
+ list = analyzeData(data, v, k, ",");
+ }
+ // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
+ } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
+ list = analyzeDataEntrustCodAndSampleCode(data, v, k, ",", device, entrustCode, sampleCode);
+ }
+ // 杩涜鍏紡璁$畻
+ Object resultValue = calculationFormula(list, v.get(0), k, device);
+ map.put(k, resultValue);
+ });
+ return map;
+ }
+
+ /**
+ * @param data 閲囬泦鍒扮殑鏂囦欢瀛楃涓�
+ * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗�
+ * @return
+ */
+ private static Map<String, Object> analysisString(String data, Map<String, List<DataConfig>> dataConfig, Device device,
+ String entrustCode, String sampleCode) {
+ String processingDataAfterSpaces = data
+ .replaceAll(" +", splitIdentifier)
+ .replaceAll("\r", "")
+ .replaceAll(" ", "");
+ Map<String, Object> map = new HashMap<>();
+ dataConfig.forEach((k, v) -> {
+ List<Object> list = new ArrayList<>();
+ // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X
+ if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
+ list = analyzeData(processingDataAfterSpaces, v, k, splitIdentifier);
+ // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
+ } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
+ list = analyzeDataEntrustCodAndSampleCode(processingDataAfterSpaces, v, k, splitIdentifier, device, entrustCode, sampleCode);
+ }
+ // 杩涜鍏紡璁$畻
+ Object resultValue = calculationFormula(list, v.get(0), k, device);
+ map.put(k, resultValue);
+ });
+ return map;
+ }
+
+ /**
+ * 鍙朮锛孻涓や釜瀹氫綅
+ *
+ * @param data 閲囬泦鍒扮殑鏂囦欢瀛楃涓�
+ * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗�
+ * @return
+ */
+ public static Map<String, Object> analysisList(String data, Map<String, List<DataConfig>> dataConfig,
+ Device device, String entrustCode, String sampleCode) {
+ Map<String, Object> map = new HashMap<>();
+ dataConfig.forEach((k, v) -> {
+ List<Object> list = new ArrayList<>();
+ // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X
+ if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
+ list = analyzeData(data, v, k, splitIdentifier);
+ // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
+ } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
+ list = analyzeDataEntrustCodAndSampleCode(data, v, k, splitIdentifier, device, entrustCode, sampleCode);
+ }
+ // 杩涜鍏紡璁$畻
+ Object resultValue = calculationFormula(list, v.get(0), k, device);
+ map.put(k, resultValue);
+ });
+ return map;
+ }
+
+ private static List<Object> analyzeDataEntrustCodAndSampleCode(String data, List<DataConfig> v, String k, String splitIdentifier,
+ Device device, String entrustCodeValue, String sampleCodeValue) {
+ entrustCodeValue = entrustCodeValue.replaceAll(" ", "");
+ sampleCodeValue = sampleCodeValue.replaceAll(" ", "");
+ // 鏈�缁堢粨鏋�
+ List<Object> list = new ArrayList<>();
+ int numberOfDataEntries = 0;
+ // 鍙杄ntrustCode涓巗ampleCode鎵�鍦ㄤ綅
+ for (int config = 0; config < v.size(); config++) {
+ numberOfDataEntries = 0;
+ Integer entrustCodeY = null;
+ Integer sampleCodeY = null;
+ Integer referYCoordinate = null;
+ String refery = getRefer(v.get(config).getRefery());
+ String entrustCode = getRefer(device.getEntrustCode()); // 濮旀墭缂栧彿瀛楁
+ String sampleCode = getRefer(device.getSampleCode()); // 鏍峰搧缂栧彿瀛楁
+ if (ObjectUtils.isEmpty(refery)) {
+ continue;
+ }
+ // 鍘婚櫎鎵�鏈夌殑绌烘牸锛岄�氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿
+ String[] aColumnY = data.replaceAll(" ", "").split("\n");
+ for (int i = 0; i < aColumnY.length; i++) {
+ // 濡傛灉閫氳繃鍒ゆ柇锛屽畾浣嶅埌Y杞�
+ if (aColumnY[i].contains(entrustCode) && aColumnY[i].contains(sampleCode)) {
+ String[] aLine = aColumnY[i].split(splitIdentifier);
+ for (int j = 0; j < aLine.length; j++) {
+ if (aLine[j].contains(entrustCode)) {
+ entrustCodeY = j;
+ }
+ if (aLine[j].contains(sampleCode) ) {
+ sampleCodeY = j;
+ }
+ if (aLine[j].contains(refery)) {
+ referYCoordinate = j;
+ }
+ }
+ }
+ if (ObjectUtils.isNotEmpty(entrustCodeY) && ObjectUtils.isNotEmpty(sampleCodeY) && ObjectUtils.isNotEmpty(referYCoordinate)) {
+ String[] aLine = aColumnY[i].split(splitIdentifier);
+ try {
+ if (aLine[entrustCodeY].contains(entrustCodeValue) && aLine[sampleCodeY].contains(sampleCodeValue)) {
+ String result = aLine[referYCoordinate];
+ // 闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁
+ if (ObjectUtils.isNotEmpty(result)) {
+ numberOfDataEntries += 1;
+ list.add(result);
+ }
+ }
+ } catch (Exception e) {}
+ }
+ }
+ }
+ // 鎷兼帴鏁伴噰閰嶇疆
+ List<Object> result = new ArrayList<>();
+ for (int i = 0; i < numberOfDataEntries; i++) {
+ String aggregate = "";
+ for (int j = 0; j < v.size(); j++) {
+ int index;
+ if (j == 0) {
+ index = i;
+ } else {
+ index = numberOfDataEntries + i;
+ }
+ aggregate += list.get(index).toString() + ",";
+ }
+ int lastIndex = aggregate.lastIndexOf(",");
+ String substring = aggregate.substring(0, lastIndex);
+ result.add(substring);
+ }
+ return result;
+ }
+
+ // 鐢变簬鍦ㄦ柟娉曚腑浼氬ぇ閲忕殑鍒ゆ柇锛屾墍浠ュ仛涓�涓柟娉�
+ private static int getXOrY(String value, String k, String tips) {
+ try {
+ return Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ throw new ErrorException(k + "锛氭湭閰嶇疆" + tips + "鍧愭爣杞寸殑鍊硷紒");
+ }
+ }
+
+ // 闃叉鍙傜収鐗╀负绌烘姤閿欙紝杩涜鍒ゆ柇濡傛灉涓虹┖璧嬪�肩┖瀛楃
+ private static String getRefer(String refer) {
+ return ObjectUtils.isNotEmpty(refer) ? refer.replaceAll(" ", "") : "";
+ }
+
+ /**
+ * 濮旀墭缂栧彿涓庢牱鍝佺紪鍙烽兘涓虹┖鎵ц
+ *
+ * @param data
+ * @param v
+ * @param k
+ * @param split
+ * @return
+ */
+ public static List<Object> analyzeData(String data, List<DataConfig> v, String k, String split) {
+ List<Object> list = new ArrayList<>();
+ for (int config = 0; config < v.size(); config++) {
+ // 鍙栦袱涓敤鎴烽厤缃殑鍙傜収鐗�
+ String referx = getRefer(v.get(config).getReferx());
+ String refery = getRefer(v.get(config).getRefery());
+ if (ObjectUtils.isEmpty(refery) && ObjectUtils.isEmpty(referx)) {
+ continue;
+ }
+ // 鏈�缁堢粨鏋�
+ List<Object> result = new ArrayList<>();
+ // 閫氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿
+ String[] aColumnY = data.replaceAll(" ", "").split("\n");
+ Integer end = null;
+ // 閲囬泦鏁版嵁锛歒杞�
+ for (int i = 0; i < aColumnY.length; i++) {
+ // 濡傛灉Y鍙傜収涓嶄负绌轰笌X鍙傜収涓虹┖鍒欐墽琛岋紝鍚屾椂璇ヨ鍖呭惈Y鍙傜収
+ if (ObjectUtils.isNotEmpty(refery) && ObjectUtils.isEmpty(referx) && aColumnY[i].contains(refery)) {
+ // 鍙朰鍧愭爣鍊�
+ int y = getXOrY(v.get(config).getY(), k, "Y");
+ String[] aLineX = aColumnY[i].split(split);
+ for (int j = 0; j < aLineX.length; j++) {
+ if (aLineX[j].contains(refery)) {
+ String[] split1 = new String[0];
+ try {
+ split1 = aColumnY[i + y].split(split);
+ } catch (Exception e) {
+ throw new ErrorException(k + "锛歒杞村畾浣嶈秴鍑猴紒");
+ }
+ try {
+ result.add(split1[j]);
+ } catch (Exception e) {
+ throw new ErrorException(k + "锛歑杞村畾浣嶈秴鍑猴紒");
+ }
+ }
+ }
+ // 濡傛灉Y鍙傜収涓嶄负绌轰笌X鍙傜収涓嶄负绌哄垯鎵ц,姝ゅY瀹氬尯鍩�
+ } else if (ObjectUtils.isNotEmpty(refery) && ObjectUtils.isNotEmpty(referx)) {
+ // 鍙杧鐨勫�硷紝闃叉鎶ラ敊
+ int x = getXOrY(v.get(config).getX(), k, "X");
+ // 鍙朰鍧愭爣鍊�
+ int y = getXOrY(v.get(config).getY(), k, "Y");
+ // 缂撳瓨Y鐨勭粨鏉熷��
+ if (ObjectUtils.isEmpty(end) && aColumnY[i].contains(refery)) {
+ end = i + y;
+ }
+ // 鍒ゆ柇鏄惁鍦ㄥ弬鐓х墿涓鸿捣鍒帮紝Y鍧愭爣鍊间负鏈�缁堣寖鍥�
+ if (ObjectUtils.isNotEmpty(end) && i <= end) {
+ String[] aLineX = aColumnY[i].split(split);
+ for (int j = 0; j < aLineX.length; j++) {
+ if (aLineX[j].contains(referx)) {
+ try {
+ result.add(aLineX[j + x]);
+ } catch (Exception e) {
+ throw new ErrorException(k + "锛歑杞村畾浣嶈秴鍑猴紒");
+ }
+ break;
+ }
+ }
+ }
+ // 濡傛灉X鍙傜収涓嶄负绌哄悓鏃惰琛屽寘鍚玐鍙傜収锛屽垯鎵ц涓嬮潰鐨勪唬鐮�
+ } else if (aColumnY[i].contains(referx) && ObjectUtils.isEmpty(refery)) {
+ String[] aLineX = aColumnY[i].split(split);
+ // 鍙杧鐨勫�硷紝闃叉鎶ラ敊
+ int x = getXOrY(v.get(config).getX(), k, "X");
+ for (int j = 0; j < aLineX.length; j++) {
+ if (aLineX[j].contains(referx)) {
+ try {
+ result.add(aLineX[j + x]);
+ } catch (Exception e) {
+ throw new ErrorException(k + "锛歑杞村畾浣嶈秴鍑猴紒");
+ }
+ }
+ }
+ }
+ }
+ // 闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁
+ if (ObjectUtils.isNotEmpty(result)) {
+// String formatProcessing = getFormatProcessing(result);
+ list.addAll(result);
+ }
+ }
+ return list;
+ }
+
+ public static String getFormatProcessing(String value) {
+ value = value.replaceAll("%", "");
+ if (value.contains("=")) {
+ String[] split = value.split("=");
+ return split[split.length - 1];
+ } else if (value.contains(":")) {
+ String[] split = value.split(":");
+ return split[split.length - 1];
+ } else {
+ return value;
+ }
+ }
+
+ public static String getIp(HttpServletRequest request) {
+ String ipAddress = request.getRemoteAddr();
+ // 闃叉鍥炵幆鍦板潃鍙樹负IPv6
+ return ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress;
+ }
+
+ public static String calculationFormulaList(List<Object> list, String formula) {
+ //棣栧厛灏唋ist杞崲涓篵igdecmic
+ List<BigDecimal> bigDecimalList = list.stream()
+ .map(obj -> {
+ return new BigDecimal((obj).toString());
+ }).collect(Collectors.toList());
+
+ //灏嗕腑鏂囩殑(杞崲鑻辨枃鐨�())
+ formula = formula.replace("锛�", "(")
+ .replace("锛�", ")")
+ .replace("锛�", ",");
+ //鐒跺悗鎻愬彇鍏紡
+ String strs = formula.substring(0, formula.indexOf("("));
+ String upperStr = strs.toUpperCase();
+ if (upperStr.matches(".*\\d.*")) {
+ upperStr = "";
+ }
+ //鐒跺悗鑾峰彇鏈�澶栭潰鎷彿閲岄潰鐨勫��,鍐嶆牴鎹�","鍒嗗壊
+ int start = formula.indexOf("(");
+ int end = -1;
+ int a = 0;
+ for (int i = start; i < formula.length(); i++) {
+ char c = formula.charAt(i);
+ if (c == '(') {
+ a++;
+ } else if (c == ')') {
+ a--;
+ if (a == 0) {
+ end = i;
+ }
+ }
+ }
+ if (start == -1 || end == -1) {
+ throw new ErrorException("鍏紡鎷彿涓嶅尮閰�: " + formula);
+ }
+
+ String argumentsStr = formula.substring(start + 1, end);
+ List<String> arguments = new ArrayList<>();
+ int bracketCount = 0;
+ StringBuilder currentArgument = new StringBuilder();
+ for (char c : argumentsStr.toCharArray()) {
+ if (c == ',' && bracketCount == 0) {
+ arguments.add(currentArgument.toString());
+ currentArgument.setLength(0);
+ } else {
+ if (c == '(') bracketCount++;
+ if (c == ')') bracketCount--;
+ currentArgument.append(c);
+ }
+ }
+ arguments.add(currentArgument.toString());
+ String[] bracketStrs = arguments.toArray(new String[0]);
+ List<BigDecimal> results = new ArrayList<>();
+ for (String expr : bracketStrs) {
+ Pattern pattern = Pattern.compile("([A-Z])(\\d+)");
+ Matcher matcher = pattern.matcher(expr);
+ StringBuffer sb = new StringBuffer();
+ while (matcher.find()) {
+ String letter = matcher.group(1);
+ int index = Integer.parseInt(matcher.group(2)) - 1; // 灏�1-based杞负0-based
+ if (index < bigDecimalList.size()) {
+ matcher.appendReplacement(sb, bigDecimalList.get(index).toString());
+ } else {
+ throw new RuntimeException("鍏紡涓殑涓嬫爣 " + index + " 瓒呭嚭鑼冨洿");
+ }
+ }
+ matcher.appendTail(sb);
+
+ // 璁$畻琛ㄨ揪寮�
+ ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
+ try {
+ Object result = engine.eval(sb.toString());
+ results.add(new BigDecimal(result.toString()));
+ } catch (Exception e) {
+ throw new IllegalArgumentException("鏃犳硶璁$畻鍏紡: " + sb, e);
+ }
+ }
+ // 鏍规嵁鍑芥暟鍚嶇О杩涜鐩稿簲璁$畻
+ BigDecimal finalResult;
+ if (upperStr.equals("") || upperStr == null) {
+ finalResult = results.get(0);
+ } else {
+ switch (upperStr) {
+ case "MAX":
+ finalResult = results.stream().max(BigDecimal::compareTo)
+ .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MAX鍊�"));
+ break;
+ case "MIN":
+ finalResult = results.stream().min(BigDecimal::compareTo)
+ .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MIN鍊�"));
+ break;
+ case "SUM":
+ finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+ break;
+ case "ABS":
+ finalResult = results.stream().map(BigDecimal::abs).reduce(BigDecimal.ZERO, BigDecimal::add);
+ break;
+ case "AVERAGE":
+ finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::divide)
+ .divide(BigDecimal.valueOf(results.size()), 2, BigDecimal.ROUND_HALF_UP);
+ break;
+ case "MEDIAN":
+ int size = results.size();
+ if (size % 2 == 1) {
+ finalResult = results.get(size / 2);
+ } else {
+ BigDecimal sum = results.get(size / 2 - 1).add(results.get(size / 2));
+ finalResult = sum.divide(BigDecimal.valueOf(2), 2, BigDecimal.ROUND_HALF_UP);
+ }
+ break;
+ default:
+ throw new UnsupportedOperationException("鏆備笉鏀寔鍑芥暟: " + upperStr);
+ }
+ }
+
+ return finalResult.toString();
+ // 鍚﹀垯锛氭病鏈夊叕寮忎唬琛ㄤ笉闇�瑕佽绠楋紝鐩存帴鎻愬彇List閲岄潰鐨勬暟鎹�
+ }
+
+}
diff --git a/cnas-device/src/main/resources/mapper/DataConfigMapper.xml b/cnas-device/src/main/resources/mapper/DataConfigMapper.xml
new file mode 100644
index 0000000..b5dac74
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DataConfigMapper.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.device.mapper.DataConfigMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.device.pojo.DataConfig">
+ <id column="id" property="id" />
+ <result column="formula" property="formula" />
+ <result column="referx" property="referx" />
+ <result column="refery" property="refery" />
+ <result column="x" property="x" />
+ <result column="y" property="y" />
+ </resultMap>
+
+ <select id="selectDataConfigList" resultType="com.ruoyi.device.dto.DeviceConfigDtoPage">
+ SELECT ddc.*,
+ d.device_name,
+ sip.sample
+ FROM device_data_config ddc
+ left join device d on ddc.device_id = d.id
+ left join structure_item_parameter sip on sip.id = ddc.structure_item_parameter_id
+ where d.id = #{deviceId}
+ order by ddc.id desc
+ </select>
+
+ <select id="deleteDataConfig" resultType="integer">
+ SELECT ddc.id
+ FROM device d
+ left join structure_item_parameter ip on not FIND_IN_SET(ip.id, d.ins_product_ids)
+ inner join device_data_config ddc on ddc.device_id = d.id and ddc.structure_item_parameter_id = ip.id
+ </select>
+ <select id="getNoConfigProduct" resultType="com.ruoyi.device.pojo.DataConfig">
+ SELECT d.id device_id,
+ ip.inspection_item,
+ ip.inspection_item_class,
+ ip.inspection_item_subclass ,
+ ip.sample,
+ ip.id structureItemParameterId,
+ ddc.id
+ FROM structure_item_parameter ip
+ left join device d on FIND_IN_SET(d.id, ip.device_ids)
+ left join device_data_config ddc on ddc.device_id = d.id and ddc.structure_item_parameter_id = ip.id
+ where d.id = #{deviceId}
+ and ddc.id is null
+ order by ip.sample
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml b/cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml
new file mode 100644
index 0000000..45071c4
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceAcceptanceMapper">
+
+ <!-- 璁惧楠屾敹鍒楄〃 -->
+ <select id="pageDeviceAcceptance" resultType="com.ruoyi.device.pojo.DeviceAcceptance">
+ select * from (
+ select *
+ from device_acceptance
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceAccidentReportMapper.xml b/cnas-device/src/main/resources/mapper/DeviceAccidentReportMapper.xml
new file mode 100644
index 0000000..2bbfce0
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceAccidentReportMapper.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.device.mapper.DeviceAccidentReportMapper">
+
+ <!-- 璁惧浜嬫晠鎶ュ憡鍒楄〃 -->
+ <select id="pageDeviceAccidentReport" resultType="com.ruoyi.device.pojo.DeviceAccidentReport">
+ select * from (
+ select *
+ from device_accident_report
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="selectDeviceAccidentReportById" resultType="com.ruoyi.device.dto.DeviceAccidentReportDto">
+ select
+ d.*,
+ date_format(d.accident_date,'%Y-%m-%d') accidentDateStr, -- 鏃堕棿
+ date_format(d.report_date,'%Y-%m-%d') reportDateStr, -- 鎶ュ憡浜哄~鍐欐椂闂�
+ date_format(d.assessor_date,'%Y-%m-%d') assessorDateStr, -- 璇勪及浜哄~鍐欐椂闂�
+ date_format(d.department_head_date,'%Y-%m-%d') departmentHeadDateStr, -- 閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�
+ date_format(d.technical_director_date,'%Y-%m-%d') technicalDirectorDateStr, -- 鎶�鏈礋璐d汉濉啓鏃堕棿
+ date_format(d.director_head_date,'%Y-%m-%d') directorHeadDateStr -- 涓讳换濉啓鏃堕棿
+ from device_accident_report d
+ where d.accident_report_id = #{accidentReportId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceBorrowMapper.xml b/cnas-device/src/main/resources/mapper/DeviceBorrowMapper.xml
new file mode 100644
index 0000000..4b62f5b
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceBorrowMapper.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.device.mapper.DeviceBorrowMapper">
+
+ <select id="deviceBorrowPage" resultType="com.ruoyi.device.pojo.DeviceBorrow">
+ select * from (
+ select db.*,device_name
+ from device_borrow db
+ left join device on db.device_id=device.id
+ )a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="getDeviceBorrowBydeviceId" resultType="com.ruoyi.device.pojo.DeviceBorrow">
+ select db.*,device_name
+ from device_borrow db
+ left join device on db.device_id=device.id
+ where device_id=#{deviceId}
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceBreakdownMaintenanceMapper.xml b/cnas-device/src/main/resources/mapper/DeviceBreakdownMaintenanceMapper.xml
new file mode 100644
index 0000000..4877ecf
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceBreakdownMaintenanceMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceBreakdownMaintenanceMapper">
+
+ <!--璁惧鏁呴殰缁翠慨鍒楄〃-->
+ <select id="pageDeviceBreakdownMaintenance" resultType="com.ruoyi.device.dto.DeviceBreakdownMaintenance">
+ select * from (
+ select *
+ from device_breakdown_maintenance
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceCalibrationPlanDetailMapper.xml b/cnas-device/src/main/resources/mapper/DeviceCalibrationPlanDetailMapper.xml
new file mode 100644
index 0000000..d6bce8c
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceCalibrationPlanDetailMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceCalibrationPlanDetailMapper">
+
+ <!-- 璁惧鏍″噯璁″垝璇︽儏鍒楄〃 -->
+ <select id="pageDeviceCalibrationPlanDetail" resultType="com.ruoyi.device.pojo.DeviceCalibrationPlanDetail">
+ select * from (
+ select *
+ from device_calibration_plan_detail
+ order by plan_date asc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceCalibrationPlanMapper.xml b/cnas-device/src/main/resources/mapper/DeviceCalibrationPlanMapper.xml
new file mode 100644
index 0000000..bf7cf39
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceCalibrationPlanMapper.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.device.mapper.DeviceCalibrationPlanMapper">
+
+ <!-- 璁惧鏍″噯璁″垝鍒楄〃 -->
+ <select id="pageDeviceCalibrationPlan" resultType="com.ruoyi.device.dto.DeviceCalibrationPlanDto">
+ select *
+ from (select cqm.*,
+ u1.name write_name,
+ u3.name ratify_name
+ from device_calibration_plan 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-device/src/main/resources/mapper/DeviceExaminePlanDetailsMapper.xml b/cnas-device/src/main/resources/mapper/DeviceExaminePlanDetailsMapper.xml
new file mode 100644
index 0000000..9eb714c
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceExaminePlanDetailsMapper.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper">
+
+
+ <!--璁惧鏍告煡璁″垝璇︽儏鍒楄〃-->
+ <select id="pageDeviceExaminePlanDetail" resultType="com.ruoyi.device.dto.DeviceExaminePlanDetailsDto">
+ select * from (
+ select
+ d.plan_details_id,
+ d.plan_id,
+ d.device_id,
+ d.device_number,
+ d.device_name,
+ d.check_time,
+ d.check_index,
+ d.check_method,
+ d.how_results,
+ d.check_charger_user_id,
+ CASE WHEN d.check_charger_user='' or d.check_charger_user is null THEN u.name
+ ELSE d.check_charger_user END AS check_charger_user,
+ d.remark,
+ d.create_user,
+ d.create_time,
+ d.update_user,
+ d.update_time,
+ CASE
+ WHEN dc.review_status = 0 THEN 3
+ WHEN dc.review_status = 1 THEN 2
+ WHEN dc.record_id IS NOT NULL THEN 1
+ ELSE 0 END record_status,
+ CASE
+ WHEN dd.review_status = 0 THEN 3
+ WHEN dd.review_status = 1 THEN 2
+ WHEN dd.record_contrast_id IS NOT NULL THEN 1
+ ELSE 0 END record_contrast_status
+ from device_examine_plan_details d
+ left join user u on u.id = d.check_charger_user_id
+ left join device_examine_record dc on d.plan_details_id = dc.plan_details_id
+ left join device_examine_record_contrast dd on dd.plan_details_id = dc.plan_details_id
+ order by check_time asc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceExaminePlanMapper.xml b/cnas-device/src/main/resources/mapper/DeviceExaminePlanMapper.xml
new file mode 100644
index 0000000..cf4b0ae
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceExaminePlanMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceExaminePlanMapper">
+
+ <!-- 璁惧鏍告煡璁″垝鍒楄〃 -->
+ <select id="deviceExaminePlanDetailsMapper" resultType="com.ruoyi.device.dto.DeviceExaminePlanDto">
+ select *
+ from (select cqm.*,
+ u1.name write_name,
+ u3.name ratify_name
+ from device_examine_plan 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>
+ <select id="selectExamineExaminePlanDto" resultType="com.ruoyi.device.dto.DeviceExaminePlanDto">
+ select
+ cqm.*,
+ date_format(cqm.write_time, '%Y-%m-%d') writeTimeStr,
+ date_format(cqm.ratify_time, '%Y-%m-%d') ratifyTimeStr,
+ date_format(cqm.create_time, '%Y') year,
+ u1.name write_name,
+ u3.name ratify_name
+ from device_examine_plan cqm
+ left join user u1 on u1.id = cqm.write_user_id
+ left join user u3 on u3.id = cqm.ratify_user_id
+ where cqm.plan_id = #{deviceExaminePlanId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceExamineRecordContrastMapper.xml b/cnas-device/src/main/resources/mapper/DeviceExamineRecordContrastMapper.xml
new file mode 100644
index 0000000..e41b339
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceExamineRecordContrastMapper.xml
@@ -0,0 +1,39 @@
+<?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.device.mapper.DeviceExamineRecordContrastMapper">
+
+ <!-- 鏌ヨ鏍告煡瀵规瘮璁板綍 -->
+ <select id="getExamineRecordContrast" resultType="com.ruoyi.device.dto.DeviceExamineRecordContrastDto">
+ select derc.*,
+ d1.device_name aDeviceName,
+ d1.management_number aDeviceNumber,
+ d2.device_name bDeviceName,
+ d2.management_number bDeviceNumber,
+ d3.device_name cDeviceName,
+ d3.management_number cDeviceNumber
+ from device_examine_record_contrast derc
+ left join device d1 on d1.id = derc.a_device_id
+ left join device d2 on d2.id = derc.a_device_id
+ left join device d3 on d3.id = derc.a_device_id
+ where derc.plan_details_id = #{planDetailsId}
+ </select>
+ <select id="selectExamineRecordContrastDto"
+ resultType="com.ruoyi.device.dto.DeviceExamineRecordContrastDto">
+ select derc.*,
+ d1.device_name aDeviceName,
+ d1.management_number aDeviceNumber,
+ d2.device_name bDeviceName,
+ d2.management_number bDeviceNumber,
+ d3.device_name cDeviceName,
+ d3.management_number cDeviceNumber,
+ DATE_FORMAT(derc.create_time, '%Y-%m-%d') checkerTimeStr,
+ DATE_FORMAT(derc.review_time, '%Y-%m-%d') reviewTimeStr,
+ d1.storage_point labName
+ from device_examine_record_contrast derc
+ left join device d1 on d1.id = derc.a_device_id
+ left join device d2 on d2.id = derc.a_device_id
+ left join device d3 on d3.id = derc.a_device_id
+ where derc.plan_details_id = #{planDetailsId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceExamineRecordMapper.xml b/cnas-device/src/main/resources/mapper/DeviceExamineRecordMapper.xml
new file mode 100644
index 0000000..4dd397b
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceExamineRecordMapper.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.device.mapper.DeviceExamineRecordMapper">
+
+ <select id="getExamineRecord" resultType="com.ruoyi.device.dto.DeviceExamineRecordDto">
+ select der.*,
+ d.device_name,
+ d.management_number deviceNumber
+ from device_examine_record der
+ left join device_examine_plan_details depd on depd.plan_details_id = der.plan_details_id
+ left join device d on d.id = depd.device_id
+ where der.plan_details_id = #{planDetailsId}
+ </select>
+ <select id="selectReviewExamineRecordDto" resultType="com.ruoyi.device.dto.DeviceExamineRecordDto">
+ select der.*,
+ Date_Format(der.update_time, '%Y-%m-%d') updateTimeStr,
+ d.device_name,
+ d.management_number deviceNumber
+ from device_examine_record der
+ left join device_examine_plan_details depd on depd.plan_details_id = der.plan_details_id
+ left join device d on d.id = depd.device_id
+ where der.plan_details_id = #{planDetailsId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceExternalApplyMapper.xml b/cnas-device/src/main/resources/mapper/DeviceExternalApplyMapper.xml
new file mode 100644
index 0000000..b3419fb
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceExternalApplyMapper.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.device.mapper.DeviceExternalApplyMapper">
+
+ <!--鍒╃敤澶栭儴璁惧鐢宠鍒楄〃-->
+ <select id="pageDeviceExternalApply" resultType="com.ruoyi.device.pojo.DeviceExternalApply">
+ select * from (
+ select *
+ from device_external_apply
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="selectDeviceExternalById" resultType="com.ruoyi.device.pojo.DeviceExternalApply">
+ select
+ dea.*
+ from device_external_apply dea
+ where dea.external_apply_id = #{externalApplyId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceImpowerDetailsMapper.xml b/cnas-device/src/main/resources/mapper/DeviceImpowerDetailsMapper.xml
new file mode 100644
index 0000000..18b36c6
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceImpowerDetailsMapper.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.device.mapper.DeviceImpowerDetailsMapper">
+
+ <!-- 鏌ヨ璁惧浣跨敤璇︽儏 -->
+ <select id="deviceImpowerDetailsList" resultType="com.ruoyi.device.dto.DeviceImpowerDetailsDto">
+ select
+ did.*,
+ d.device_name,
+ d.specification_model,
+ d.management_number
+ from device_impower_details did
+ left join device d on did.device_id = d.id
+ where did.impower_id = #{impowerId}
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceImpowerMapper.xml b/cnas-device/src/main/resources/mapper/DeviceImpowerMapper.xml
new file mode 100644
index 0000000..dc9a454
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceImpowerMapper.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.device.mapper.DeviceImpowerMapper">
+
+
+ <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.pojo.DeviceImpower">
+ select
+ *
+ from device_impower
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml b/cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml
new file mode 100644
index 0000000..8540d74
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.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.device.mapper.DeviceInspectionRecordMapper">
+
+
+ <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.pojo.DeviceInspectionRecord">
+ select * from ( SELECT *
+ from device_inspection_record ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceMaintenanceMapper.xml b/cnas-device/src/main/resources/mapper/DeviceMaintenanceMapper.xml
new file mode 100644
index 0000000..b6ab4cc
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceMaintenanceMapper.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.device.mapper.DeviceMaintenanceMapper">
+
+
+ <!-- 璁惧缁存姢鍒嗛〉鏌ヨ -->
+ <select id="selectDeviceMaintenancePage" resultType="com.ruoyi.device.dto.DeviceMaintenanceDto">
+ select * from (
+ select db.*,
+ d.device_name,
+ d.management_number
+ from device_maintenance db
+ left join device d on db.device_id = d.id)a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ order by maintenance_date desc
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceMaintenancePlanDetailsMapper.xml b/cnas-device/src/main/resources/mapper/DeviceMaintenancePlanDetailsMapper.xml
new file mode 100644
index 0000000..aeb49ce
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceMaintenancePlanDetailsMapper.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.device.mapper.DeviceMaintenancePlanDetailsMapper">
+
+
+ <select id="deviceInspectionRecordDetailsList"
+ resultType="com.ruoyi.device.dto.DeviceMaintenancePlanDetailsDto">
+ select
+ dmpd.*,
+ d.device_name,
+ d.management_number device_number,
+ d.specification_model,
+ d.management_number,
+ d.storage_point
+ from device_maintenance_plan_details dmpd
+ left join device d on dmpd.device_id = d.id
+ where dmpd.maintenance_plan_id = #{maintenancePlanId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceMaintenancePlanMapper.xml b/cnas-device/src/main/resources/mapper/DeviceMaintenancePlanMapper.xml
new file mode 100644
index 0000000..2f8aac5
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceMaintenancePlanMapper.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.device.mapper.DeviceMaintenancePlanMapper">
+
+ <!-- 鏍规嵁璁惧id鏌ヨ璁惧鐨勪繚鍏昏鍒� -->
+ <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.pojo.DeviceMaintenancePlan">
+ select
+ *
+ from device_maintenance_plan
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="selectMaintenancePlanById" resultType="com.ruoyi.device.dto.DeviceMaintenancePlanDto">
+ select
+ dmp.*,
+ date_format(dmp.date_preparation, '%Y-%m-%d') as datePreparationStr,
+ date_format(dmp.audit_date, '%Y-%m-%d') as auditDateStr
+ from device_maintenance_plan dmp
+ where dmp.maintenance_plan_id = #{maintenancePlanId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceMapper.xml b/cnas-device/src/main/resources/mapper/DeviceMapper.xml
new file mode 100644
index 0000000..5460a17
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceMapper.xml
@@ -0,0 +1,196 @@
+<?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.device.mapper.DeviceMapper">
+ <select id="selectDeviceParameter" resultType="com.ruoyi.device.pojo.Device">
+ select * from(
+ select id,
+ large_category,
+ date_production,
+ equipment_manager,
+ authorized_person,
+ device_name,
+ internal_code,
+ asset_code,
+ calibration_date,
+ scrap_time,
+ acceptance_records,
+ subclass,
+ factory_no,
+ acquisition_date,
+ accurate_measurement,
+ specification_model,
+ device_status,
+ storage_point,
+ activation_date,
+ latest_traceability,
+ down_time,
+ maintenance_records,
+ manufacturer,
+ detection_type,
+ _costs,
+ calibration_certicate,
+ create_user,
+ create_time,
+ update_user,
+ update_time,
+ status
+ from device
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="selectEquipmentOverview" resultType="com.ruoyi.device.pojo.Device">
+ select * from(
+ select id,
+ device_name,
+ specification_model,
+ device_status,
+ create_user,
+ status,
+ update_time
+ from device
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="authorizedPerson" resultType="com.ruoyi.device.pojo.Device">
+ select id,
+ authorized_person
+ from device
+ </select>
+ <select id="search" resultType="com.ruoyi.device.pojo.Device">
+ select *
+ from device
+ <where>
+ <if test="deviceName!=null and deviceName!=''">
+ and device_name like concat('%',#{deviceName},'%')
+ </if>
+ <if test="status!=null and status!=''">
+ and device_status = status
+ </if>
+ <if test="specificationModel!=null and specificationModel!= ''">
+ and specification_model = #{specificationModel}
+ </if>
+ <if test="largeCategory!=null">
+ and large_category = #{largeCategory}
+ </if>
+ <if test="largeCategory == 'null'">
+ and (large_category = '' or large_category is null)
+ </if>
+ </where>
+ </select>
+
+ <select id="selectDeviceImage" resultType="com.ruoyi.device.pojo.Device">
+ select (image_upload, create_user, create_time) values (#{image_upload}
+ , #{createUser}
+ , #{createTime})
+ </select>
+
+ <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.dto.DeviceDto">
+ select * from(
+ SELECT
+ d.*,
+ cmr.calibration_date as last_calibration_date_two,
+ cmr.next_calibration_date as next_calibration_date_two,
+ GROUP_CONCAT(distinct inspection_item SEPARATOR ';') AS insProductItem,
+ u.name ,
+ sd.dept_name AS laboratory_name
+ FROM
+ device d
+ LEFT JOIN `user` u ON u.id = d.equipment_manager
+ LEFT JOIN sys_dept sd ON sd.dept_id = d.subordinate_departments_id AND sd.del_flag = '0'
+ LEFT JOIN device_metric_record cmr ON d.id = cmr.device_id
+ LEFT JOIN structure_item_parameter sip ON FIND_IN_SET(sip.id, d.ins_product_ids)
+ <where>
+ <if test="laboratoryNameIsNull != null and laboratoryNameIsNull == true">
+ sd.dept_name is null
+ </if>
+ AND cmr.type = 'calibrate' or cmr.type is null or cmr.type = ''
+ </where>
+ GROUP BY
+ d.id,
+ u.name, sd.dept_name
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+ <select id="getInspectionItemSubclass" resultType="map">
+ SELECT ip.inspection_item,
+ if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '',
+ ip.inspection_item_subclass, ip.inspection_item) inspection_item_subclass
+ FROM ins_product ip
+ where ip.ins_sample_id = #{id}
+ </select>
+ <resultMap id="treeDeviceDto" type="map">
+ <result property="label" column="laboratory_name"/>
+ <result property="value" column="value" />
+ <collection property="children" resultMap="storagePointMap" javaType="List"/>
+ </resultMap>
+
+ <resultMap id="storagePointMap" type="map">
+ <result property="value" column="value"/>
+ <result property="label" column="storage_point"/>
+ <collection property="children" resultMap="deviceNameMap" javaType="List"/>
+ </resultMap>
+
+ <resultMap id="deviceNameMap" type="map">
+ <result property="value" column="id"/>
+ <result property="label" column="device_name"/>
+ <result property="activationDate" column="activation_date"/>
+ <result property="managementNumber" column="management_number"/>
+ </resultMap>
+
+ <select id="treeDevice" resultMap="treeDeviceDto">
+ select
+ d.id,
+ case when sd.dept_name is null || sd.dept_name ='' then '鍏朵粬' else sd.dept_name end as laboratory_name,
+ case when d.storage_point is null || d.storage_point ='' then '鍏朵粬' else d.storage_point end as storage_point,
+ d.device_name,
+ d.management_number,
+ null as value,
+ d.activation_date
+ from device d
+ LEFT JOIN sys_dept sd ON sd.dept_id = d.subordinate_departments_id AND sd.del_flag = '0'
+ <where>
+ <if test="deviceName!=null and deviceName!=''">
+ and device_name like concat('%',#{deviceName},'%')
+ </if>
+ </where>
+ </select>
+
+ <select id="selectDeviceByCode" resultType="com.ruoyi.device.dto.DeviceDto">
+ SELECT d.*,
+ GROUP_CONCAT(DISTINCT inspection_item SEPARATOR ';') AS ins_product_item,
+ sd.dept_name AS laboratory_name,
+ u1.name equipmentManager_name,
+ u2.name authorized_person_name
+ FROM device d
+ LEFT JOIN structure_item_parameter sip ON FIND_IN_SET(sip.id, d.ins_product_ids)
+ LEFT JOIN sys_dept sd ON d.subordinate_departments_id = sd.dept_id AND sd.del_flag = '0'
+ LEFT JOIN user u1 ON u1.id = d.equipment_manager
+ LEFT JOIN user u2 ON u2.id = d.authorized_person
+ WHERE d.id = #{id}
+
+ GROUP BY d.id,
+ sd.dept_name,
+ u1.name,
+ u2.name
+ </select>
+
+ <!-- 鏌ヨ鍒拌揪鏍″噯鏈夋晥鏈熺殑璁惧-鎻愬墠5澶� -->
+ <select id="selectOverdueDevice" resultType="com.ruoyi.device.pojo.Device">
+ SELECT *
+ FROM device
+ WHERE
+ -- 绛涢�夊嚭 activation_date 鍦ㄥ綋鍓嶆棩鏈熷墠浜斿ぉ鍐呯殑鏁版嵁
+ activation_date BETWEEN now() AND now() + INTERVAL 5 DAY
+ -- 绛涢�夊嚭 activation_date 宸茬粡瓒呰繃褰撳墠鏃ユ湡鐨勬暟鎹�
+ OR activation_date < now()
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceScrappedMapper.xml b/cnas-device/src/main/resources/mapper/DeviceScrappedMapper.xml
new file mode 100644
index 0000000..9bc7595
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceScrappedMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceScrappedMapper">
+
+ <!-- 璁惧鎶ュ簾鐢宠鍒楄〃 -->
+ <select id="pageDeviceScrapped" resultType="com.ruoyi.device.pojo.DeviceScrapped">
+ select * from (
+ select *
+ from device_scrapped
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="selectDeviceScrappedById" resultType="com.ruoyi.device.dto.DeviceScrappedDto">
+ select
+ *,
+ date_format(applicant_date,'%Y骞�%m鏈�%d鏃�') as applicantDateStr,
+ date_format(department_head_date,'%Y骞�%m鏈�%d鏃�') as departmentHeadDateStr,
+ date_format(metering_room_date,'%Y骞�%m鏈�%d鏃�') as meteringRoomDateStr,
+ date_format(approver_date,'%Y骞�%m鏈�%d鏃�') as approverDateStr
+ from device_scrapped
+ where scrapped_id = #{scrappedId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceStateMapper.xml b/cnas-device/src/main/resources/mapper/DeviceStateMapper.xml
new file mode 100644
index 0000000..3423111
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceStateMapper.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.device.mapper.DeviceStateMapper">
+
+
+ <select id="getDeviceStatePage" resultType="com.ruoyi.device.dto.DeviceStateDto">
+ select ds.*,
+ d.device_name,
+ d.management_number,
+ d.specification_model,
+ d.large_category
+ from device_state ds
+ left join device d on d.id = ds.device_id
+ where ds.device_id = #{deviceId}
+ <if test="processNumber != '' and processNumber != null">
+ and ds.process_number like concat('%', #{processNumber}, '%')
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceTraceabilityManagementDetailsMapper.xml b/cnas-device/src/main/resources/mapper/DeviceTraceabilityManagementDetailsMapper.xml
new file mode 100644
index 0000000..6fc4960
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceTraceabilityManagementDetailsMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceTraceabilityManagementDetailsMapper">
+
+ <select id="deviceTraceabilityManagementDetailsList"
+ resultType="com.ruoyi.device.dto.DeviceTraceabilityManagementDetailsDto">
+ select
+ dtmd.*,
+ d.device_name,
+ d.specification_model,
+ d.management_number
+ from device_traceability_management_details dtmd
+ left join device d on dtmd.device_id = d.id
+ where dtmd.traceability_management_id = #{traceabilityManagementId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceTraceabilityManagementMapper.xml b/cnas-device/src/main/resources/mapper/DeviceTraceabilityManagementMapper.xml
new file mode 100644
index 0000000..cf7c861
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceTraceabilityManagementMapper.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.device.mapper.DeviceTraceabilityManagementMapper">
+
+ <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.pojo.DeviceTraceabilityManagement">
+ select
+ *
+ from device_traceability_management
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="selectDeviceTraceabilityManagementById"
+ resultType="com.ruoyi.device.dto.DeviceTraceabilityManagementDto">
+ select
+ dtm.*,
+ date_format(dtm.date_preparation, '%Y-%m-%d') as datePreparationStr,
+ date_format(dtm.audit_date, '%Y-%m-%d') as auditDateStr
+ from device_traceability_management dtm
+ where dtm.traceability_management_id = #{traceabilityManagementId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/InsOrderDeviceRecordMapper.xml b/cnas-device/src/main/resources/mapper/InsOrderDeviceRecordMapper.xml
new file mode 100644
index 0000000..8a5e3cf
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/InsOrderDeviceRecordMapper.xml
@@ -0,0 +1,51 @@
+<?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.device.mapper.DeviceRecordMapper">
+
+ <select id="deviceRecordPage" resultType="com.ruoyi.device.dto.DeviceRecordDto">
+ select dr.*,
+ d.device_name,
+ d.management_number
+ from device_record dr
+ left join device d on d.id = dr.device_id
+ where 1=1
+ <if test="deviceId != null">
+ and dr.device_id = #{deviceId}
+ </if>
+ <if test="sampleCode != '' and sampleCode != null">
+ and dr.sample_code like concat('%', #{sampleCode}, '%')
+ </if>
+ <if test="managementNumber != '' and managementNumber != null">
+ and d.management_number like concat('%', #{managementNumber}, '%')
+ </if>
+ <if test="userId != null">
+ and dr.use_person_id = #{userId}
+ and dr.use_start_date is null
+ </if>
+ ORDER BY (dr.use_start_date IS NULL) desc , dr.use_start_date DESC
+ </select>
+
+
+ <select id="selectNotFilled" resultType="com.ruoyi.device.dto.DeviceRecordDto">
+ select dr.*,
+ d.device_name,
+ d.management_number
+ from device_record dr
+ left join device d on d.id = dr.device_id
+ where dr.use_start_date is null
+ </select>
+
+ <!-- 鏌ヨ瀵煎嚭璁惧浣跨敤璁板綍 -->
+ <select id="selectExportList" resultType="com.ruoyi.device.dto.DeviceRecordDto">
+ select dr.*
+ from device_record dr
+ where dr.use_start_date is not null
+ <if test="deviceId != null">
+ and dr.device_id = #{deviceId}
+ </if>
+ <if test="exportDate != '' and exportDate != null">
+ and DATE_FORMAT(dr.use_start_date, '%Y-%m') = #{exportDate}
+ </if>
+ ORDER BY dr.use_start_date asc
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/InstructionMapper.xml b/cnas-device/src/main/resources/mapper/InstructionMapper.xml
new file mode 100644
index 0000000..8404014
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/InstructionMapper.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.device.mapper.InstructionMapper">
+ <select id="pageByPageQueryOfHomeworkInstructions" resultType="com.ruoyi.device.dto.DeviceOperationInstructionDto">
+ SELECT
+ doi.*,di.*,
+ d.device_name deviceName,
+ d.management_number deviceNumber,
+ d.specification_model deviceModel,
+ u.name uploaderName,
+ u1.name approverName
+ FROM
+ device_operation_instruction doi
+ LEFT JOIN device_instruction di ON di.id = doi.instruction_id
+ left join device d on d.id = doi.device_id
+ left join user u on u.id = doi.uploader
+ left join user u1 on u1.id = doi.approver_id
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/OperationInstructionMapper.xml b/cnas-device/src/main/resources/mapper/OperationInstructionMapper.xml
new file mode 100644
index 0000000..5679e35
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/OperationInstructionMapper.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.device.mapper.OperationInstructionMapper">
+
+ <select id="homeworkGuidebookEditor" resultType="com.ruoyi.device.dto.DeviceOperationInstructionDto">
+ SELECT
+ doi.*,d.device_name, d.management_number device_number, d.specification_model device_model
+ FROM
+ device_operation_instruction doi
+ left join device d on d.id = doi.device_id
+ where doi.instruction_id = #{instructionId}
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/static/word/acceptance-certificate.docx b/cnas-device/src/main/resources/static/word/acceptance-certificate.docx
new file mode 100644
index 0000000..c4412dd
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/acceptance-certificate.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-accident-report.docx b/cnas-device/src/main/resources/static/word/device-accident-report.docx
new file mode 100644
index 0000000..6263ba9
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-accident-report.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-breakdown-maintenance.docx b/cnas-device/src/main/resources/static/word/device-breakdown-maintenance.docx
new file mode 100644
index 0000000..595edc5
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-breakdown-maintenance.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-calibration-plan.docx b/cnas-device/src/main/resources/static/word/device-calibration-plan.docx
new file mode 100644
index 0000000..fc32f72
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-calibration-plan.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-document.docx b/cnas-device/src/main/resources/static/word/device-document.docx
new file mode 100644
index 0000000..d9e1d51
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-document.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-external-apply.docx b/cnas-device/src/main/resources/static/word/device-external-apply.docx
new file mode 100644
index 0000000..8df765b
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-external-apply.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-impower.docx b/cnas-device/src/main/resources/static/word/device-impower.docx
new file mode 100644
index 0000000..a1275a8
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-impower.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-inspection-record.docx b/cnas-device/src/main/resources/static/word/device-inspection-record.docx
new file mode 100644
index 0000000..2c7a4f4
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-inspection-record.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-maintenance.docx b/cnas-device/src/main/resources/static/word/device-maintenance.docx
new file mode 100644
index 0000000..267a258
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-maintenance.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-scrapped.docx b/cnas-device/src/main/resources/static/word/device-scrapped.docx
new file mode 100644
index 0000000..96dfdd8
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-scrapped.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/device-status.docx b/cnas-device/src/main/resources/static/word/device-status.docx
new file mode 100644
index 0000000..5753f22
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/device-status.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/examine-plan-detail.docx b/cnas-device/src/main/resources/static/word/examine-plan-detail.docx
new file mode 100644
index 0000000..118c324
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/examine-plan-detail.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/examine-record.docx b/cnas-device/src/main/resources/static/word/examine-record.docx
new file mode 100644
index 0000000..2462971
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/examine-record.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/incident-report.docx b/cnas-device/src/main/resources/static/word/incident-report.docx
new file mode 100644
index 0000000..c190287
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/incident-report.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/maintenance-plan.docx b/cnas-device/src/main/resources/static/word/maintenance-plan.docx
new file mode 100644
index 0000000..d4e69a0
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/maintenance-plan.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/maintenance-records.docx b/cnas-device/src/main/resources/static/word/maintenance-records.docx
new file mode 100644
index 0000000..ba8c9f8
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/maintenance-records.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/quipment-details.docx b/cnas-device/src/main/resources/static/word/quipment-details.docx
new file mode 100644
index 0000000..d244180
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/quipment-details.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/review-examine-record-contrast.docx b/cnas-device/src/main/resources/static/word/review-examine-record-contrast.docx
new file mode 100644
index 0000000..dd48c97
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/review-examine-record-contrast.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/traceability-management-details.docx b/cnas-device/src/main/resources/static/word/traceability-management-details.docx
new file mode 100644
index 0000000..cb6d3b9
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/traceability-management-details.docx
Binary files differ
diff --git a/cnas-device/src/main/resources/static/word/use-record.docx b/cnas-device/src/main/resources/static/word/use-record.docx
new file mode 100644
index 0000000..00632d7
--- /dev/null
+++ b/cnas-device/src/main/resources/static/word/use-record.docx
Binary files differ
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java
new file mode 100644
index 0000000..b5b0102
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java
@@ -0,0 +1,140 @@
+package com.ruoyi.manage.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.mapper.ClientSatisfactionAnalyseFileMapper;
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import com.ruoyi.manage.service.ClientSatisfactionService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Tag(name = "瀹㈡埛婊℃剰搴﹁皟鏌�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/clientSatisfaction")
+public class ClientSatisfactionController {
+
+ private ClientSatisfactionService clientSatisfactionService;
+ private ClientSatisfactionAnalyseFileMapper clientSatisfactionAnalyseFileMapper;
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+ * @param
+ * @return
+ */
+ @Operation(summary = "瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�")
+ @GetMapping("/pageClientSatisfaction")
+ public Result<IPage<ClientSatisfaction>> pageClientSatisfaction(Page page,ClientSatisfaction clientSatisfaction) throws Exception {
+ return Result.success(clientSatisfactionService.pageClientSatisfaction(page, clientSatisfaction));
+ }
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹁皟鏌ユ柊澧�
+ * @return
+ */
+ @Operation(summary = "瀹㈡埛婊℃剰搴﹁皟鏌ユ柊澧�")
+ @PostMapping("/addClientSatisfaction")
+ public Result addClientSatisfaction(@RequestBody ClientSatisfaction clientSatisfaction){
+ return Result.success(clientSatisfactionService.save(clientSatisfaction));
+ }
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹁皟鏌ヤ慨鏀�
+ * @return
+ */
+ @Operation(summary = "瀹㈡埛婊℃剰搴﹁皟鏌ユ柊澧�")
+ @PostMapping("/updateClientSatisfaction")
+ public Result updateClientSatisfaction(@RequestBody ClientSatisfaction clientSatisfaction){
+ return Result.success(clientSatisfactionService.updateById(clientSatisfaction));
+ }
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹁皟鏌ヤ慨鏀�
+ * @return
+ */
+
+ @Operation(summary = "瀹㈡埛婊℃剰搴﹁皟鏌ユ柊澧�")
+ @DeleteMapping("/delClientSatisfaction")
+ public Result updateClientSatisfaction(Integer clientSatisfactionId){
+ return Result.success(clientSatisfactionService.removeById(clientSatisfactionId));
+ }
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹀鍑�
+ * @param clientSatisfactionId
+ * @param response
+ * @return
+ */
+
+ @Operation(summary = "瀹㈡埛婊℃剰瀵煎嚭")
+ @GetMapping("/exportWordClientSatisfaction")
+ public Result exportWordClientSatisfaction(Integer clientSatisfactionId, HttpServletResponse response){
+ clientSatisfactionService.exportWordClientSatisfaction(clientSatisfactionId, response);
+ return Result.success();
+ }
+
+ /**
+ * 纭瀹㈡埛婊℃剰搴�
+ * @param clientSatisfaction 瑕佷慨鏀瑰鎴锋弧鎰忓害鐨勭姸鎬佸璞�
+ * @param userId 淇敼浜篿d
+ */
+
+ @Operation(summary = "纭瀹㈡埛婊℃剰搴�")
+ @PostMapping("/confirmClientSatisfaction")
+ public void confirmClientSatisfaction(@RequestBody ClientSatisfaction clientSatisfaction, Integer userId){
+ clientSatisfactionService.confirmClientSatisfaction(clientSatisfaction, userId);
+ }
+
+ /**
+ * 鏂板瀹㈡埛鍒嗘瀽闄勪欢
+ * @param file
+ * @return
+ */
+
+ @Operation(summary = "鏂板鎴峰垎鏋愰檮浠�")
+ @PostMapping("/uploadAnalyseFile")
+ public Result<?> uploadAnalyseFile(MultipartFile file) {
+ return Result.success(clientSatisfactionService.uploadAnalyseFile(file));
+ }
+
+
+ /**
+ * 鏌ヨ鎴峰垎鏋愰檮浠�
+ * @return
+ */
+
+ @Operation(summary = "鏌ヨ鎴峰垎鏋愰檮浠�")
+ @GetMapping("/pageAnalyseFile")
+ public Result<IPage<ClientSatisfactionAnalyseFile>> pageAnalyseFile(Page page, ClientSatisfactionAnalyseFile analyseFile) {
+ return Result.success(clientSatisfactionService.pageAnalyseFile(page, analyseFile));
+ }
+
+ /**
+ * 鍒犻櫎鎴峰垎鏋愰檮浠�
+ * @return
+ */
+
+ @Operation(summary = "鍒犻櫎鎴峰垎鏋愰檮浠�")
+ @DeleteMapping("/delAnalyseFile")
+ public Result delAnalyseFile(Integer analyseFileId){
+ return Result.success(clientSatisfactionAnalyseFileMapper.deleteById(analyseFileId));
+ }
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCheckController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCheckController.java
new file mode 100644
index 0000000..034cbc4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCheckController.java
@@ -0,0 +1,116 @@
+package com.ruoyi.manage.controller;
+
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.InternalCheckDto;
+import com.ruoyi.manage.pojo.InternalCheck;
+import com.ruoyi.manage.service.InternalCheckService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Tag(name = "鍐呭妫�鏌�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalCheck")
+public class InternalCheckController {
+
+ private InternalCheckService internalCheckService;
+
+ /**
+ * 鍐呭妫�鏌ュ垎椤垫煡璇�
+ * @param
+ * @return
+ */
+
+ @Operation(summary = "鍐呭妫�鏌ュ垎椤垫煡璇�")
+ @GetMapping("/pageInternalCheck")
+ public Result<IPage<InternalCheckDto>> pageInternalCheck(Page page,InternalCheck internalCheck) throws Exception {
+ return Result.success(internalCheckService.pageInternalCheck(page, internalCheck));
+ }
+
+ /**
+ * 鍐呭妫�鏌ユ柊澧�
+ * @return
+ */
+
+ @Operation(summary = "鍐呭妫�鏌ユ柊澧�")
+ @PostMapping("/addInternalCheck")
+ public Result addInternalCheck(@RequestBody InternalCheckDto internalCheck){
+ return Result.success(internalCheckService.addInternalCheck(internalCheck));
+ }
+
+ /**
+ * 鍐呭妫�鏌ヤ慨鏀�
+ * @return
+ */
+
+ @Operation(summary = "鍐呭妫�鏌ヤ慨鏀�")
+ @PostMapping("/updateInternalCheck")
+ public Result updateInternalCheck(@RequestBody InternalCheckDto internalCheck){
+ return Result.success(internalCheckService.updateInternalCheck(internalCheck));
+ }
+
+ /**
+ * 鍐呭妫�鏌ュ垹闄�
+ * @return
+ */
+
+ @Operation(summary = "鍐呭妫�鏌ュ垹闄�")
+ @DeleteMapping("/delInternalCheck")
+ public Result delInternalCheck(Integer checkId){
+ return Result.success(internalCheckService.delInternalCheck(checkId));
+ }
+
+ /**
+ * 鍐呭妫�鏌ユ煡鐪嬭鎯�
+ * @return
+ */
+
+ @Operation(summary = "鍐呭妫�鏌ユ煡鐪嬭鎯�")
+ @GetMapping("/getInternalCheckOne")
+ public Result<InternalCheckDto> getInternalCheckOne(Integer checkId){
+ return Result.success(internalCheckService.getInternalCheckOne(checkId));
+ }
+
+
+ /**
+ * 鍐呭妫�鏌ユ壒鍑�
+ * @return
+ */
+ @Operation(summary = "鍐呭妫�鏌ユ壒鍑�")
+ @PostMapping("/ratifyInternalCheck")
+ public Result ratifyInternalCheck(@RequestBody InternalCheckDto internalCheck){
+ return Result.success(internalCheckService.ratifyInternalCheck(internalCheck));
+ }
+
+ /**
+ * 瀵煎嚭鍐呭妫�鏌�
+ * @return
+ */
+
+ @Operation(summary = "瀵煎嚭鍐呭妫�鏌�")
+ @GetMapping("/exportInternalCheck")
+ public void exportInternalCheck(Integer checkId, HttpServletResponse response){
+ internalCheckService.exportInternalCheck(checkId, response);
+ }
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCorrectController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCorrectController.java
new file mode 100644
index 0000000..a736d46
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalCorrectController.java
@@ -0,0 +1,119 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.mapper.InternalCorrectFileMapper;
+import com.ruoyi.manage.pojo.InternalCorrect;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import com.ruoyi.manage.service.InternalCorrectService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:15
+ */
+@Tag(name = "鍐呭绾犳鎺柦")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalCorrect")
+public class InternalCorrectController {
+
+ private InternalCorrectService internalCorrectService;
+ private InternalCorrectFileMapper internalCorrectFileMapper;
+
+ /**
+ * 鏂板鍐呭绠$悊绾犳澶勭悊淇℃伅
+ * @return
+ */
+
+ @Operation(summary = "鏂板鍐呭绠$悊绾犳澶勭悊")
+ @PostMapping("/addInternalCorrect")
+ public Result addInternalCorrect(@RequestBody InternalCorrect internalCorrect){
+ return Result.success(internalCorrectService.addInternalCorrect(internalCorrect));
+ }
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳澶勭悊
+ * @return
+ */
+
+ @Operation(summary = "鏌ヨ鍐呭绠$悊绾犳澶勭悊")
+ @GetMapping("/getInternalCorrect")
+ public Result<InternalCorrect> getInternalCorrect(Integer correctId){
+ return Result.success(internalCorrectService.getInternalCorrect(correctId));
+ }
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃
+ * @return
+ */
+
+ @Operation(summary = "鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃")
+ @GetMapping("/pageInternalCorrect")
+ public Result<IPage<InternalCorrect>> pageInternalCorrect(Page page, InternalCorrect detailsCorrect) {
+ return Result.success(internalCorrectService.pageInternalCorrect(page, detailsCorrect));
+ }
+
+ /**
+ * 鏂板鍐呭绠$悊绾犳鎺柦闄勪欢
+ * @param correctId
+ * @param file
+ * @return
+ */
+
+ @Operation(summary = "鏂板鍐呭绠$悊绾犳鎺柦闄勪欢")
+ @PostMapping("/uploadInternalCorrectFile")
+ public Result<?> uploadInternalCorrectFile(Integer correctId, MultipartFile file) {
+ return Result.success(internalCorrectService.uploadInternalCorrectFile(correctId, file));
+ }
+
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢
+ * @return
+ */
+
+ @Operation(summary = "鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢")
+ @GetMapping("/getInternalCorrectFileList")
+ public Result<List<InternalCorrectFile>> getInternalCorrectFileList(Integer correctId){
+ return Result.success(internalCorrectService.getInternalCorrectFileList(correctId));
+ }
+
+ /**
+ * 鍒犻櫎鍐呭绠$悊绾犳鎺柦闄勪欢
+ * @return
+ */
+
+ @Operation(summary = "鍒犻櫎鍐呭绠$悊绾犳鎺柦闄勪欢")
+ @DeleteMapping("/delInternalCorrectFile")
+ public Result delInternalCorrectFile(Integer correctFileId){
+ return Result.success(internalCorrectFileMapper.deleteById(correctFileId));
+ }
+
+ /**
+ * 瀵煎嚭绾犳鎺柦
+ * @return
+ */
+
+ @Operation(summary = "瀵煎嚭绾犳鎺柦")
+ @GetMapping("/exportInternalCorrect")
+ public void exportInternalCorrect(Integer correctId, HttpServletResponse response){
+ internalCorrectService.exportInternalCorrect(correctId, response);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalImplementController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalImplementController.java
new file mode 100644
index 0000000..cd7b1a0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalImplementController.java
@@ -0,0 +1,117 @@
+package com.ruoyi.manage.controller;
+
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+
+import com.ruoyi.manage.dto.InternalImplementDto;
+import com.ruoyi.manage.pojo.InternalImplement;
+import com.ruoyi.manage.service.InternalImplementService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Tag(name = "鍐呭瀹炴柦璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalImplement")
+public class InternalImplementController {
+
+ private InternalImplementService internalImplementService;
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+ * @param
+ * @return
+ */
+
+ @Operation(summary = "鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ")
+ @GetMapping("/pageInternalImplement")
+ public Result<IPage<InternalImplementDto>> pageInternalImplement(Page page,InternalImplement internalImplement) throws Exception {
+ return Result.success(internalImplementService.pageInternalImplement(page, internalImplement));
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鏂板
+ * @return
+ */
+
+ @Operation(summary = "鍐呭瀹炴柦璁″垝鏂板")
+ @PostMapping("/addInternalImplement")
+ public Result addInternalImplement(@RequestBody InternalImplementDto internalImplement){
+ return Result.success(internalImplementService.addInternalImplement(internalImplement));
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝淇敼
+ * @return
+ */
+
+ @Operation(summary = "鍐呭瀹炴柦璁″垝淇敼")
+ @PostMapping("/updateInternalImplement")
+ public Result updateInternalImplement(@RequestBody InternalImplementDto internalImplement){
+ return Result.success(internalImplementService.updateInternalImplement(internalImplement));
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鍒犻櫎
+ * @return
+ */
+
+ @Operation(summary = "鍐呭瀹炴柦璁″垝鍒犻櫎")
+ @DeleteMapping("/delInternalImplement")
+ public Result delInternalImplement(Integer implementId){
+ return Result.success(internalImplementService.delInternalImplement(implementId));
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鏌ョ湅璇︽儏
+ * @return
+ */
+
+ @Operation(summary = "鍐呭瀹炴柦璁″垝鏌ョ湅璇︽儏")
+ @GetMapping("/getInternalImplementOne")
+ public Result<InternalImplementDto> getInternalImplementOne(Integer implementId){
+ return Result.success(internalImplementService.getInternalImplementOne(implementId));
+ }
+
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "鍐呭瀹炴柦璁″垝鎵瑰噯")
+ @PostMapping("/ratifyInternalImplement")
+ public Result ratifyInternalImplement(@RequestBody InternalImplementDto internalImplement){
+ return Result.success(internalImplementService.ratifyInternalImplement(internalImplement));
+ }
+
+ /**
+ * 瀵煎嚭鍐呭瀹炴柦璁″垝
+ * @return
+ */
+
+ @Operation(summary = "瀵煎嚭鍐呭瀹炴柦璁″垝")
+ @GetMapping("/exportInternalImplement")
+ public void exportInternalImplement(Integer implementId, HttpServletResponse response){
+ internalImplementService.exportInternalImplement(implementId, response);
+ }
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalMeetingController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalMeetingController.java
new file mode 100644
index 0000000..e81c526
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalMeetingController.java
@@ -0,0 +1,103 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.InternalMeetingDto;
+import com.ruoyi.manage.pojo.InternalMeeting;
+import com.ruoyi.manage.service.InternalMeetingService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:50:44
+ */
+@Tag(name = "鍐呭浼氳")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalMeeting")
+public class InternalMeetingController {
+
+ private InternalMeetingService internalMeetingService;
+
+ /**
+ * 鍐呭浼氳鍒嗛〉鏌ヨ
+ * @param
+ * @return
+ */
+
+ @Operation(summary = "鍐呭浼氳鍒嗛〉鏌ヨ")
+ @GetMapping("/pageInternalMeeting")
+ public Result<IPage<InternalMeetingDto>> pageInternalMeeting(Page page,InternalMeeting internalMeeting) throws Exception {
+ return Result.success(internalMeetingService.pageInternalMeeting(page, internalMeeting));
+ }
+
+ /**
+ * 鍐呭浼氳鏂板
+ * @return
+ */
+
+ @Operation(summary = "鍐呭浼氳鏂板")
+ @PostMapping("/addInternalMeeting")
+ public Result addInternalMeeting(@RequestBody InternalMeetingDto internalMeeting){
+ return Result.success(internalMeetingService.addInternalMeeting(internalMeeting));
+ }
+
+ /**
+ * 鍐呭浼氳淇敼
+ * @return
+ */
+
+ @Operation(summary = "鍐呭浼氳淇敼")
+ @PostMapping("/updateInternalMeeting")
+ public Result updateInternalMeeting(@RequestBody InternalMeetingDto internalMeeting){
+ return Result.success(internalMeetingService.updateInternalMeeting(internalMeeting));
+ }
+
+ /**
+ * 鍐呭浼氳鍒犻櫎
+ * @return
+ */
+
+ @Operation(summary = "鍐呭浼氳鍒犻櫎")
+ @DeleteMapping("/delInternalMeeting")
+ public Result delInternalMeeting(Integer meetingId){
+ return Result.success(internalMeetingService.delInternalMeeting(meetingId));
+ }
+
+ /**
+ * 鍐呭浼氳鏌ョ湅璇︽儏
+ * @return
+ */
+
+ @Operation(summary = "鍐呭浼氳鏌ョ湅璇︽儏")
+ @GetMapping("/getInternalMeetingOne")
+ public Result<InternalMeetingDto> getInternalMeetingOne(Integer meetingId){
+ return Result.success(internalMeetingService.getInternalMeetingOne(meetingId));
+ }
+
+ /**
+ * 瀵煎嚭鍐呭浼氳
+ * @return
+ */
+
+ @Operation(summary = "瀵煎嚭鍐呭浼氳")
+ @GetMapping("/exportInternalMeeting")
+ public void exportInternalMeeting(Integer meetingId, HttpServletResponse response){
+ internalMeetingService.exportInternalMeeting(meetingId, response);
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalPlanController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalPlanController.java
new file mode 100644
index 0000000..ff6c6cb
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalPlanController.java
@@ -0,0 +1,125 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.InternalPlanDto;
+import com.ruoyi.manage.pojo.InternalPlan;
+import com.ruoyi.manage.service.InternalPlanService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:27:47
+ */
+@Tag(name = "鍐呭骞村害璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalPlan")
+public class InternalPlanController {
+
+
+ private InternalPlanService internalPlanService;
+
+ /**
+ * 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ
+ * @param
+ * @return
+ */
+
+ @Operation(summary = "鍐呭骞村害璁″垝鍒嗛〉鏌ヨ")
+ @GetMapping("/pageInternalPlan")
+ public Result<IPage<InternalPlanDto>> pageInternalPlan(Page page,InternalPlan internalPlan) throws Exception {
+ return Result.success(internalPlanService.pageInternalPlan(page, internalPlan));
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝鏂板
+ * @return
+ */
+
+ @Operation(summary = "鍐呭骞村害璁″垝鏂板")
+ @PostMapping("/addInternalPlan")
+ public Result addInternalPlan(@RequestBody InternalPlanDto internalPlan){
+ return Result.success(internalPlanService.addInternalPlan(internalPlan));
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝淇敼
+ * @return
+ */
+
+ @Operation(summary = "鍐呭骞村害璁″垝淇敼")
+ @PostMapping("/updateInternalPlan")
+ public Result updateInternalPlan(@RequestBody InternalPlanDto internalPlan){
+ return Result.success(internalPlanService.updateInternalPlan(internalPlan));
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝鍒犻櫎
+ * @return
+ */
+
+ @Operation(summary = "鍐呭骞村害璁″垝鍒犻櫎")
+ @DeleteMapping("/delInternalPlan")
+ public Result delInternalPlan(Integer planId){
+ return Result.success(internalPlanService.delInternalPlan(planId));
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝鏌ョ湅璇︽儏
+ * @return
+ */
+
+ @Operation(summary = "鍐呭骞村害璁″垝鏌ョ湅璇︽儏")
+ @GetMapping("/getInternalPlanOne")
+ public Result<InternalPlanDto> getInternalPlanOne(Integer planId){
+ return Result.success(internalPlanService.getInternalPlanOne(planId));
+ }
+
+
+ /**
+ * 鍐呭骞村害璁″垝瀹℃牳
+ * @return
+ */
+ @Operation(summary = "鍐呭骞村害璁″垝瀹℃牳")
+ @PostMapping("/examineInternalPlan")
+ public Result examineInternalPlan(@RequestBody InternalPlanDto internalPlanDto){
+ return Result.success(internalPlanService.examineInternalPlan(internalPlanDto));
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "鍐呭瀹炴柦璁″垝鎵瑰噯")
+ @PostMapping("/ratifyInternalPlan")
+ public Result ratifyInternalPlan(@RequestBody InternalPlanDto internalPlanDto){
+ return Result.success(internalPlanService.ratifyInternalPlan(internalPlanDto));
+ }
+
+ /**
+ * 瀵煎嚭鍐呭骞村害璁″垝
+ * @return
+ */
+
+ @Operation(summary = "瀵煎嚭鍐呭骞村害璁″垝")
+ @GetMapping("/exportInternalPlan")
+ public void exportInternalPlan(Integer planId, HttpServletResponse response){
+ internalPlanService.exportInternalImplement(planId, response);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalReportController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalReportController.java
new file mode 100644
index 0000000..d3df1d3
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/InternalReportController.java
@@ -0,0 +1,124 @@
+package com.ruoyi.manage.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.InternalReport;
+import com.ruoyi.manage.service.InternalReportService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author makejava
+ * @since 2024-11-11
+ */
+@Tag(name = "鍐呭鎶ュ憡")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalReport")
+public class InternalReportController {
+
+ private InternalReportService internalReportService;
+
+ /**
+ * 鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+ * @param
+ * @return
+ */
+
+ @Operation(summary = "鍐呭鎶ュ憡鍒嗛〉鏌ヨ")
+ @GetMapping("/pageInternalReport")
+ public Result<IPage<InternalReport>> pageInternalReport(Page page,InternalReport internalReport) throws Exception {
+ return Result.success(internalReportService.pageInternalReport(page, internalReport));
+ }
+
+ /**
+ * 鍐呭鎶ュ憡鏂板
+ * @return
+ */
+
+ @Operation(summary = "鍐呭鎶ュ憡鏂板")
+ @PostMapping("/addInternalReport")
+ public Result addInternalReport(@RequestBody InternalReport internalReport){
+ return Result.success(internalReportService.save(internalReport));
+ }
+
+ /**
+ * 鍐呭鎶ュ憡淇敼
+ * @return
+ */
+
+ @Operation(summary = "鍐呭鎶ュ憡淇敼")
+ @PostMapping("/updateInternalReport")
+ public Result updateInternalReport(@RequestBody InternalReport internalReport){
+ return Result.success(internalReportService.updateById(internalReport));
+ }
+
+ /**
+ * 鍐呭鎶ュ憡鍒犻櫎
+ * @return
+ */
+
+ @Operation(summary = "鍐呭鎶ュ憡鍒犻櫎")
+ @DeleteMapping("/delInternalReport")
+ public Result delInternalReport(Integer reportId){
+ return Result.success(internalReportService.removeById(reportId));
+ }
+
+ /**
+ * 鍐呭鎶ュ憡鏌ョ湅璇︽儏
+ * @return
+ */
+
+ @Operation(summary = "鍐呭鎶ュ憡鏌ョ湅璇︽儏")
+ @GetMapping("/getInternalReportOne")
+ public Result<InternalReport> getInternalReportOne(Integer reportId){
+ return Result.success(internalReportService.getById(reportId));
+ }
+
+ /**
+ * 鍐呭妫�鏌ュ鏍�
+ * @return
+ */
+ @Operation(summary = "鍐呭妫�鏌ュ鏍�")
+ @PostMapping("/examineInternalReport")
+ public Result examineInternalReport(@RequestBody InternalReport internalReport){
+ return Result.success(internalReportService.ratifyInternalCheck(internalReport));
+ }
+
+ /**
+ * 鍐呭鎶ュ憡璐ㄩ噺璐熻矗浜哄~鍐�
+ * @return
+ */
+ @Operation(summary = "鍐呭鎶ュ憡璐ㄩ噺璐熻矗浜哄~鍐�")
+ @PostMapping("/qualityInternalReport")
+ public Result qualityInternalReport(@RequestBody InternalReport internalReport){
+ return Result.success(internalReportService.qualityInternalReport(internalReport));
+ }
+
+ /**
+ * 瀵煎嚭鍐呭鎶ュ憡
+ * @return
+ */
+
+ @Operation(summary = "瀵煎嚭鍐呭鎶ュ憡")
+ @GetMapping("/exportInternalReport")
+ public void exportInternalReport(Integer reportId, HttpServletResponse response){
+ internalReportService.exportInternalReport(reportId, response);
+ }
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageControlPlanListController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageControlPlanListController.java
new file mode 100644
index 0000000..fb0c5bb
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageControlPlanListController.java
@@ -0,0 +1,134 @@
+package com.ruoyi.manage.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import com.ruoyi.manage.service.ManageControlPlanListService;
+import com.ruoyi.manage.vo.ManageControlPlanListVo;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:30
+ */
+@Tag(name = "閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�")
+@RestController
+@RequestMapping("/manageControlPlanList")
+public class ManageControlPlanListController {
+
+
+ @Resource
+ private ManageControlPlanListService manageControlPlanListService;
+
+
+
+ @Operation(summary = "鍒嗛〉鏌ヨ")
+ @GetMapping("/getPageList")
+ public Result<IPage<ManageControlPlanListVo>> getPageList(Page page) {
+ return Result.success(manageControlPlanListService.getPageList(page));
+ }
+
+ @Operation(summary = "鎵瑰噯")
+ @PostMapping("/approvalOfControlPlanChecklist")
+ public Result<?> approvalOfControlPlanChecklist(@RequestBody Map<String, Integer> param){
+ Integer approve = param.get("approve");
+ Integer status= param.get("status");
+ manageControlPlanListService.update(Wrappers.<ManageControlPlanList>lambdaUpdate()
+ .set(ManageControlPlanList::getApprove, approve)
+ .set(ManageControlPlanList::getApproveStatus, status)
+ .set(ManageControlPlanList::getApproveDate, LocalDateTime.now()));
+ return Result.success();
+ }
+
+ @Operation(summary = "瀹℃壒")
+ @PostMapping("/riskAnalysisApprovalOfControlPlanChecklist")
+ public Result<?> riskAnalysisApprovalOfControlPlanChecklist(@RequestBody Map<String, Integer> param){
+ Integer approval = param.get("approval");
+ Integer status= param.get("status");
+ manageControlPlanListService.update(Wrappers.<ManageControlPlanList>lambdaUpdate()
+ .set(ManageControlPlanList::getApproval, approval)
+ .set(ManageControlPlanList::getApprovalStatus, status)
+ .set(ManageControlPlanList::getApprovalDate, LocalDateTime.now()));
+ return Result.success();
+ }
+
+ @PostMapping("/importControlPlanList")
+ public void importControlPlanList(MultipartFile file) throws IOException {
+ boolean excelFile = isExcelFile(file);
+ if (!excelFile) {
+ throw new ErrorException("璇峰鍏xcel鏂囦欢锛�");
+ }
+ EasyExcel.read(file.getInputStream(), ManageControlPlanList.class, new PageReadListener<ManageControlPlanList>(dataList -> {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ dataList.forEach(i -> {
+ i.setEditor(userId);
+ i.setEditorDate(LocalDateTime.now());
+ i.setApproveStatus(0);
+ i.setApprovalStatus(0);
+ });
+ manageControlPlanListService.saveOrUpdateBatch(dataList);
+ })).sheet().doRead();
+ }
+
+ @Operation(summary = "鏂板")
+ @PostMapping("/analysisOfMajorRiskFactorsAdded")
+ public void analysisOfMajorRiskFactorsAdded(@RequestBody ManageControlPlanList manageControlPlanList) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ manageControlPlanList.setEditor(userId);
+ manageControlPlanList.setEditorDate(LocalDateTime.now());
+ manageControlPlanListService.saveOrUpdate(manageControlPlanList);
+ }
+
+ @Operation(summary = "鍒犻櫎")
+ @DeleteMapping("/deleteSignificantRiskFactorAnalysis")
+ public void deleteSignificantRiskFactorAnalysis(Integer id) {
+ manageControlPlanListService.removeById(id);
+ }
+
+ /**
+ *
+ * @return
+ */
+
+ @Operation(summary = "閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�")
+ @GetMapping("/exportSignificantRiskFactors")
+ public void exportSignificantRiskFactors(HttpServletResponse response){
+ manageControlPlanListService.exportPersonTraining(response);
+ }
+
+ public static boolean isExcelFile(MultipartFile file) {
+ if (file.isEmpty()) {
+ return false;
+ }
+ String originalFilename = file.getOriginalFilename();
+ if (originalFilename == null) {
+ return false;
+ }
+ String[] parts = originalFilename.split("\\.");
+ if (parts.length == 0) {
+ return false;
+ }
+ String fileExtension = parts[parts.length - 1].toLowerCase();
+ return fileExtension.equals("xls") || fileExtension.equals("xlsx");
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentAlterController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentAlterController.java
new file mode 100644
index 0000000..6889d7a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentAlterController.java
@@ -0,0 +1,89 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.manage.pojo.ManageDocumentAlter;
+import com.ruoyi.manage.service.ManageDocumentAlterService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 11:04:01
+ */
+@Tag(name = "绠$悊浣撶郴鏂囦欢鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageDocumentAlter")
+public class ManageDocumentAlterController {
+
+ @Resource
+ private ManageDocumentAlterService manageDocumentAlterService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鏂囦欢鍙樻洿")
+ @GetMapping("/pageManageDocumentAlter")
+ public Result pageManageDocumentAlter(Page page,ManageDocumentAlter manageDocumentAlter) throws Exception {
+ return Result.success(manageDocumentAlterService.pageManageDocumentAlter(page, manageDocumentAlter));
+ }
+
+ @Operation(summary = "鍒犻櫎鏂囦欢鍙樻洿")
+ @DeleteMapping("/delManageDocumentAlter")
+ public Result delManageDocumentAlter(Integer id){
+ return Result.success(manageDocumentAlterService.delManageDocumentAlter(id));
+ }
+
+
+ @Operation(summary = "鏌ョ湅鏂囦欢鍙樻洿")
+ @GetMapping("/getManageDocumentAlter")
+ public Result getManageDocumentAlter(Integer id){
+ return Result.success(manageDocumentAlterService.getManageDocumentAlter(id));
+ }
+
+ @Operation(summary = "鏂板鏂囦欢鍙樻洿")
+ @PostMapping("/addManageDocumentAlter")
+ public Result addManageDocumentAlter(ManageDocumentAlter manageDocumentAlter){
+ return Result.success(manageDocumentAlterService.addManageDocumentAlter(manageDocumentAlter));
+ }
+
+
+ @Operation(summary = "缂栬緫鏂囦欢鍙樻洿")
+ @PostMapping("/doManageDocumentAlter")
+ public Result doManageDocumentAlter(ManageDocumentAlter manageDocumentAlter){
+ return Result.success(manageDocumentAlterService.doManageDocumentAlter(manageDocumentAlter));
+ }
+
+
+ @Operation(summary = "瀹℃牳鏂囦欢鍙樻洿")
+ @PostMapping("/checkManageDocumentAlter")
+ public Result checkManageDocumentAlter(ManageDocumentAlter manageDocumentAlter){
+ return Result.success(manageDocumentAlterService.checkManageDocumentAlter(manageDocumentAlter));
+ }
+
+
+ @Operation(summary = "瀹℃牳鏌ョ湅闄勪欢")
+ @GetMapping("/checkManageDocumentAlterPdf")
+ public void checkManageDocumentAlterPdf(Long id, HttpServletResponse response)throws Exception {
+ manageDocumentAlterService.checkManageDocumentAlterPdf(id,response);
+ }
+
+ @Operation(summary = "瀵煎嚭鏂囦欢鍙樻洿")
+ @GetMapping("/exportManageDocumentAlter")
+ public void exportManageDocumentAlter(ManageDocumentAlter manageDocumentAlter,HttpServletResponse response) throws Exception {
+ manageDocumentAlterService.exportManageDocumentAlter(manageDocumentAlter,response);
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentCancelController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentCancelController.java
new file mode 100644
index 0000000..932c0ec
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentCancelController.java
@@ -0,0 +1,83 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageDocumentCancel;
+import com.ruoyi.manage.service.ManageDocumentCancelService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 02:37:35
+ */
+@Tag(name = "绠$悊浣撶郴鏂囦欢鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageDocumentCancel")
+public class ManageDocumentCancelController {
+
+ @Resource
+ private ManageDocumentCancelService manageDocumentCancelService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鏂囦欢浣滃簾")
+ @GetMapping("/pageManageDocumentCancel")
+ public Result pageManageDocumentCancel(Page page,ManageDocumentCancel manageDocumentCancel) throws Exception {
+ return Result.success(manageDocumentCancelService.pageManageDocumentCancel(page, manageDocumentCancel));
+ }
+
+ @Operation(summary = "鏂板鏂囦欢浣滃簾")
+ @PostMapping("/addManageDocumentCancel")
+ public Result addManageDocumentCancel(@RequestBody ManageDocumentCancel manageDocumentCancel) {
+ return Result.success(manageDocumentCancelService.addManageDocumentCancel(manageDocumentCancel));
+ }
+
+
+ @Operation(summary = "瀹℃牳鏂囦欢浣滃簾")
+ @PostMapping("/checkManageDocumentCancel")
+ public Result checkManageDocumentCancel(@RequestBody Map<String, Object> param) {
+ Integer id = (Integer) param.get("id");
+ String state = (String) param.get("state");
+ return Result.success(manageDocumentCancelService.checkManageDocumentCancel(id, state));
+ }
+
+ @Operation(summary = "鍒犻櫎鏂囦欢浣滃簾")
+ @DeleteMapping("/delManageDocumentCancel")
+ public Result delManageDocumentCancel(Integer id) {
+ return Result.success(manageDocumentCancelService.delManageDocumentCancel(id));
+ }
+
+
+ @Operation(summary = "鏌ョ湅鏂囦欢浣滃簾")
+ @GetMapping("/getManageDocumentCancel")
+ public Result getManageDocumentCancel(Integer id) {
+ return Result.success(manageDocumentCancelService.getManageDocumentCancel(id));
+ }
+
+
+ @Operation(summary = "缂栬緫鏂囦欢浣滃簾")
+ @PostMapping("/doManageDocumentCancel")
+ public Result doManageDocumentCancel(@RequestBody ManageDocumentCancel manageDocumentCancel) {
+ return Result.success(manageDocumentCancelService.doManageDocumentCancel(manageDocumentCancel));
+ }
+
+ @Operation(summary = "瀵煎嚭鏂囦欢浣滃簾")
+ @GetMapping("/exportManageDocumentCancel")
+ public void exportManageDocumentCancel(ManageDocumentCancel manageDocumentCancel,HttpServletResponse response) throws Exception {
+ manageDocumentCancelService.exportManageDocumentCancel(manageDocumentCancel,response);
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentControlledController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentControlledController.java
new file mode 100644
index 0000000..a9c1c9d
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentControlledController.java
@@ -0,0 +1,82 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageDocumentControlled;
+import com.ruoyi.manage.service.ManageDocumentControlledService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 02:54:44
+ */
+@Tag(name = "绠$悊浣撶郴鏂囦欢鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageDocumentControlled")
+public class ManageDocumentControlledController {
+
+ @Resource
+ private ManageDocumentControlledService manageDocumentControlledService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鏂囦欢鍙楁帶")
+ @GetMapping("/pageManageDocumentControlled")
+ public Result pageManageDocumentControlled(Page page,ManageDocumentControlled manageDocumentControlled) throws Exception {
+ return Result.success(manageDocumentControlledService.pageManageDocumentControlled(page, manageDocumentControlled));
+ }
+
+ @Operation(summary = "鏂板鏂囦欢鍙楁帶")
+ @PostMapping("/addManageDocumentControlled")
+ public Result addManageDocumentControlled(ManageDocumentControlled manageDocumentControlled){
+ return Result.success(manageDocumentControlledService.addManageDocumentControlled(manageDocumentControlled));
+ }
+
+
+ @Operation(summary = "鏌ョ湅鏂囦欢鍙楁帶")
+ @GetMapping("/getManageDocumentControlled")
+ public Result getManageDocumentControlled(Long id){
+ return Result.success(manageDocumentControlledService.getManageDocumentControlled(id));
+ }
+
+
+ @Operation(summary = "缂栬緫鏂囦欢鍙楁帶")
+ @PostMapping("/doManageDocumentControlled")
+ public Result doManageDocumentControlled(ManageDocumentControlled manageDocumentControlled){
+ return Result.success(manageDocumentControlledService.doManageDocumentControlled(manageDocumentControlled));
+ }
+
+ @Operation(summary = "鍒犻櫎鏂囦欢鍙楁帶")
+ @DeleteMapping("/delManageDocumentControlled")
+ public Result delManageDocumentControlled(Long id){
+ return Result.success(manageDocumentControlledService.delManageDocumentControlled(id));
+ }
+
+
+ @Operation(summary = "瀹℃牳鏂囦欢鍙楁帶")
+ @PostMapping("/checkManageDocumentControlled")
+ public Result checkManageDocumentControlled(ManageDocumentControlled manageDocumentControlled){
+ return Result.success(manageDocumentControlledService.checkManageDocumentControlled(manageDocumentControlled));
+ }
+
+
+ @Operation(summary = "瀹℃牳鏌ョ湅闄勪欢")
+ @GetMapping("/checkManageDocumentControlledPdf")
+ public void checkManageDocumentControlledPdf(Long id, HttpServletResponse response)throws Exception {
+ manageDocumentControlledService.checkManageDocumentControlledPdf(id,response);
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentIssueRecycleController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentIssueRecycleController.java
new file mode 100644
index 0000000..98f5e45
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentIssueRecycleController.java
@@ -0,0 +1,84 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+import com.ruoyi.manage.service.ManageDocumentIssueRecycleService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 09:18:24
+ */
+@Tag(name = "绠$悊浣撶郴鏂囦欢鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageDocumentIssueRecycle")
+public class ManageDocumentIssueRecycleController {
+
+ @Resource
+ private ManageDocumentIssueRecycleService manageDocumentIssueRecycleService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鏂囦欢鍙戞斁鍥炴敹")
+ @GetMapping("/pageManageDocumentIssueRecycle")
+ public Result pageManageDocumentIssueRecycle(Page page,ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto) throws Exception {
+ return Result.success(manageDocumentIssueRecycleService.pageManageDocumentIssueRecycle(page, manageDocumentIssueRecycleDto));
+ }
+
+ @Operation(summary = "鏂板鏂囦欢鍙戞斁鍥炴敹")
+ @PostMapping("/addManageDocumentIssueRecycle")
+ public Result addManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle){
+ return Result.success(manageDocumentIssueRecycleService.addManageDocumentIssueRecycle(manageDocumentIssueRecycle));
+ }
+
+ @Operation(summary = "鍒犻櫎鏂囦欢鍙戞斁鍥炴敹")
+ @DeleteMapping("/delManageDocumentIssueRecycle")
+ public Result delManageDocumentIssueRecycle(Long id){
+ return Result.success(manageDocumentIssueRecycleService.delManageDocumentIssueRecycle(id));
+ }
+
+
+ @Operation(summary = "鏌ョ湅鏂囦欢鍙戞斁鍥炴敹")
+ @GetMapping("/getManageDocumentIssueRecycle")
+ public Result getManageDocumentIssueRecycle(Long id){
+ return Result.success(manageDocumentIssueRecycleService.getManageDocumentIssueRecycle(id));
+ }
+
+
+ @Operation(summary = "缂栬緫鏂囦欢鍙戞斁鍥炴敹")
+ @PostMapping("/doManageDocumentIssueRecycle")
+ public Result doManageDocumentIssueRecycle(@RequestBody ManageDocumentIssueRecycle manageDocumentIssueRecycle){
+ return Result.success(manageDocumentIssueRecycleService.doManageDocumentIssueRecycle(manageDocumentIssueRecycle));
+ }
+
+
+ @Operation(summary = "瀹℃牳鏂囦欢鍙戞斁鍥炴敹")
+ @PostMapping("/checkManageDocumentIssueRecycle")
+ public Result checkManageDocumentIssueRecycle(@RequestBody ManageDocumentIssueRecycle manageDocumentIssueRecycle){
+ return Result.success(manageDocumentIssueRecycleService.checkManageDocumentIssueRecycle(manageDocumentIssueRecycle.getId(),manageDocumentIssueRecycle.getDocumentState()));
+ }
+
+ @Operation(summary = "瀵煎嚭鏂囦欢鍙戞斁鍥炴敹")
+ @GetMapping("/exportManageDocumentIssueRecycle")
+ public void exportManageDocumentIssueRecycle(ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto, HttpServletResponse response) throws Exception {
+ manageDocumentIssueRecycleService.exportManageDocumentIssueRecycle(manageDocumentIssueRecycleDto,response);
+ }
+
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentListController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentListController.java
new file mode 100644
index 0000000..da18c1f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageDocumentListController.java
@@ -0,0 +1,76 @@
+package com.ruoyi.manage.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.builder.ExcelReaderBuilder;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.excel.ManageDocumentListListener;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.service.ManageDocumentListService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+ 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 11:08:11
+ */
+@Tag(name = "绠$悊浣撶郴鏂囦欢鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageDocumentList")
+public class ManageDocumentListController {
+
+ @Resource
+ private ManageDocumentListService manageDocumentListService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鏂囦欢娓呭崟")
+ @GetMapping("/pageManageDocumentList")
+ public Result pageManageDocumentList(Page page,ManageDocumentList manageDocumentList) throws Exception {
+ return Result.success(manageDocumentListService.pageManageDocumentList(page, manageDocumentList));
+ }
+
+ @Operation(summary = "缂栬緫鏂囦欢娓呭崟")
+ @PostMapping("/doManageDocumentList")
+ public Result doManageDocumentList(@RequestBody ManageDocumentList manageDocumentList) {
+ return Result.success(manageDocumentListService.updateById(manageDocumentList));
+ }
+
+ @Operation(summary = "鍒犻櫎鏂囦欢娓呭崟")
+ @DeleteMapping("/delManageDocumentList")
+ public Result delManageDocumentList(Integer id) {
+ return Result.success(manageDocumentListService.removeById(id));
+ }
+
+ @Operation(summary = "涓婁紶闄勪欢-鏂囦欢娓呭崟")
+ @PostMapping("/uploadFileManageDocumentList")
+ public Result uploadFileManageDocumentList(Integer id, MultipartFile file) {
+ return Result.success(manageDocumentListService.uploadFile(id,file));
+ }
+
+ @Operation(summary = "瀵煎叆鏂囦欢娓呭崟鍒楄〃")
+ @PostMapping("/exportManageDocumentList")
+ public Result exportManageDocumentList(MultipartFile file) {
+ try {
+ // 琛ㄥご鏍¢獙妯℃澘鏄惁姝g‘
+ EasyExcel.read(file.getInputStream(), ManageDocumentList.class, new ManageDocumentListListener(manageDocumentListService)).sheet().doRead();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return Result.success();
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingController.java
new file mode 100644
index 0000000..d351a7d
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingController.java
@@ -0,0 +1,66 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.dto.ManageMeetingDto;
+import com.ruoyi.manage.service.ManageMeetingService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:33:47
+ */
+@Tag(name = "绠$悊璇勫浼氳")
+@RestController
+@RequestMapping("/manageMeeting")
+public class ManageMeetingController {
+
+ @Resource
+ private ManageMeetingService manageMeetingService;
+
+ @Operation(summary = "绠$悊璇勫浼氳璁板綍鏌ヨ")
+ @GetMapping("/getPageMeeting")
+ public Result<IPage<ManageMeetingDto>> getPageMeeting(Page page, String startTime, String endTime, String place) throws Exception {
+ IPage<ManageMeetingDto> ipage = manageMeetingService.page(page,startTime,endTime,place);
+ return Result.success(ipage);
+ }
+
+ @Operation(summary = "鏂板浼氳璁板綍")
+ @PostMapping("/addMeeting")
+ public Result addMeeting(@RequestBody ManageMeetingDto dto){
+ manageMeetingService.addMeeting(dto);
+ return Result.success();
+ }
+
+ @Operation(summary = "缂栬緫浼氳璁板綍")
+ @PostMapping("/modifyMeeting")
+ public Result modifyMeeting(@RequestBody ManageMeetingDto manageMeetingDto){
+ return Result.success(manageMeetingService.modifyMeeting(manageMeetingDto));
+ }
+
+ @Operation(summary = "鍒犻櫎浼氳璁板綍")
+ @DeleteMapping("/deleteMeeting")
+ public Result deleteMeeting(Integer id){
+ return Result.success(manageMeetingService.removeById(id));
+ }
+
+
+ @Operation(summary = "涓嬭浇浼氳璁板綍")
+ @GetMapping("/exportMeeting")
+ public void exportMeeting(Integer id, HttpServletResponse response){
+ manageMeetingService.exportMeeting(id,response);
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingParticipantsController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingParticipantsController.java
new file mode 100644
index 0000000..b5958d3
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageMeetingParticipantsController.java
@@ -0,0 +1,53 @@
+package com.ruoyi.manage.controller;
+
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import com.ruoyi.manage.service.ManageMeetingParticipantsService;
+import com.ruoyi.manage.vo.MeetingParticipantsDetailsVo;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:34:27
+ */
+@Tag(name = "绠$悊璇勫浼氳")
+@RestController
+@RequestMapping("/manageMeetingParticipants")
+public class ManageMeetingParticipantsController {
+
+ @Resource
+ private ManageMeetingParticipantsService manageMeetingParticipantsService;
+
+
+ @Operation(summary = "鏌ヨ浼氳璁板綍鍙備細浜哄憳")
+ @GetMapping("/getParticipants")
+ public Result<MeetingParticipantsDetailsVo> getParticipants(Integer id){
+ return Result.success(manageMeetingParticipantsService.getParticipants(id));
+ }
+
+ @Operation(summary = "鏂板浼氳璁板綍鍙備細浜哄憳")
+ @PostMapping("/add")
+ public Result addParticipants(@RequestBody List<ManageMeetingParticipants> list){
+ manageMeetingParticipantsService.saveBatch(list);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍒犻櫎浼氳璁板綍鍙備細浜哄憳")
+ @DeleteMapping("/delete")
+ public Result deleteParticipants(List<Integer> ids){
+ manageMeetingParticipantsService.removeByIds(ids);
+ return Result.success();
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordAuditController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordAuditController.java
new file mode 100644
index 0000000..47fa373
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordAuditController.java
@@ -0,0 +1,75 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+import com.ruoyi.manage.service.ManageRecordAuditService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 10:29:18
+ */
+@Tag(name = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordAudit")
+public class ManageRecordAuditController {
+
+ @Resource
+ private ManageRecordAuditService manageRecordAuditService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鏂囦欢淇鐢宠瀹℃壒璁板綍")
+ @GetMapping("/pageManageRecordAudit")
+ public Result pageManageRecordAudit(Page page,ManageRecordAudit manageRecordAudit) throws Exception {
+ return Result.success(manageRecordAuditService.pageManageRecordAudit(page, manageRecordAudit));
+ }
+
+ @Operation(summary = "鏂板鏂囦欢淇鐢宠瀹℃壒璁板綍")
+ @PostMapping("/addManageRecordAudit")
+ public Result addManageRecordAudit(ManageRecordAudit manageRecordAudit){
+ return Result.success(manageRecordAuditService.addManageRecordAudit(manageRecordAudit));
+ }
+
+
+ @Operation(summary = "缂栬緫鏂囦欢淇鐢宠瀹℃壒璁板綍")
+ @PostMapping("/doManageRecordAudit")
+ public Result doManageRecordAudit(ManageRecordAudit manageRecordAudit){
+ return Result.success(manageRecordAuditService.doManageRecordAudit(manageRecordAudit));
+ }
+
+ @Operation(summary = "鍒犻櫎鏂囦欢淇鐢宠瀹℃壒璁板綍")
+ @DeleteMapping("/delManageRecordAudit")
+ public Result delManageRecordAudit(Integer id){
+ return Result.success(manageRecordAuditService.removeById(id));
+ }
+
+ @Operation(summary = "鎵瑰噯鏂囦欢淇鐢宠瀹℃壒璁板綍")
+ @PostMapping("/ratifyManageRecordAudit")
+ public Result ratifyManageRecordAudit(@RequestBody Map<String, Integer> param){
+ Integer id = param.get("id");
+ return Result.success(manageRecordAuditService.ratifyManageRecordAudit(id));
+ }
+
+ @Operation(summary = "瀵煎嚭鏂囦欢淇鐢宠瀹℃壒璁板綍")
+ @GetMapping("/exportOutManageRecordAudit")
+ public Result exportOutManageRecordAudit(ManageRecordAudit manageRecordAudit, HttpServletResponse response) {
+ return Result.success(manageRecordAuditService.exportOutManageRecordAudit(manageRecordAudit,response));
+ }
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java
new file mode 100644
index 0000000..51471e6
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java
@@ -0,0 +1,87 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordCancel;
+import com.ruoyi.manage.service.ManageRecordCancelService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.time.LocalDate;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 01:27:22
+ */
+@Tag(name = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordCancel")
+public class ManageRecordCancelController {
+
+ @Resource
+ private ManageRecordCancelService manageRecordCancelService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ浣滃簾鏂囦欢閿�姣佽褰�")
+ @GetMapping("/pageManageRecordCancel")
+ public Result pageManageRecordCancel(Page page,ManageRecordCancel manageRecordCancel) throws Exception {
+ return Result.success(manageRecordCancelService.pageManageRecordCancel(page, manageRecordCancel));
+ }
+
+ @Operation(summary = "鏂板浣滃簾鏂囦欢閿�姣佽褰�")
+ @PostMapping("/addManageRecordCancel")
+ public Result addManageRecordCancel(@RequestBody ManageRecordCancel manageRecordCancel){
+ manageRecordCancel.setCreateTime(LocalDate.now());
+ return Result.success(manageRecordCancelService.save(manageRecordCancel));
+ }
+
+
+ @Operation(summary = "缂栬緫浣滃簾鏂囦欢閿�姣佽褰�")
+ @PostMapping("/doManageRecordCancel")
+ public Result doManageRecordCancel(@RequestBody ManageRecordCancel manageRecordCancel){
+ return Result.success(manageRecordCancelService.updateById(manageRecordCancel));
+ }
+
+ @Operation(summary = "鍒犻櫎浣滃簾鏂囦欢閿�姣佽褰�")
+ @DeleteMapping("/delManageRecordCancel")
+ public Result delManageRecordCancel(Integer id){
+ return Result.success(manageRecordCancelService.removeById(id));
+ }
+
+ @Operation(summary = "鎵瑰噯浣滃簾鏂囦欢閿�姣佽褰�")
+ @PostMapping("/ratifyManageRecordCancel")
+ public Result ratifyManageRecordCancel(@RequestBody Map<String, Object> param){
+ Integer id = (Integer) param.get("id");
+ String ratifyState = (String) param.get("ratifyState");
+ return Result.success(manageRecordCancelService.ratifyManageRecordCancel(id,ratifyState));
+ }
+
+ @Operation(summary = "瀵煎嚭浣滃簾鏂囦欢閿�姣佽褰�")
+ @GetMapping("/exportOutManageRecordCancel")
+ public Result exportOutManageRecordCancel(ManageRecordCancel manageRecordCancel, HttpServletResponse response) throws Exception {
+ return Result.success(manageRecordCancelService.exportOutManageRecordCancel(manageRecordCancel,response));
+ }
+
+ @Operation(summary = "瀵煎叆浣滃簾鏂囦欢閿�姣佽褰�")
+ @PostMapping("/exportInManageRecordCancel")
+ public Result exportInManageRecordCancel(MultipartFile file){
+ try {
+ return Result.success(manageRecordCancelService.exportInManageRecordCancel(file));
+ }catch (Exception e){
+ return Result.fail(e.getMessage());
+ }
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCheckController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCheckController.java
new file mode 100644
index 0000000..cb105e0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCheckController.java
@@ -0,0 +1,90 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.service.ManageRecordCheckService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍) 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:31:36
+ */
+@Tag(name = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordCheck")
+public class ManageRecordCheckController {
+
+ @Resource
+ private ManageRecordCheckService manageRecordCheckService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鏂囦欢瀹℃壒璁板綍")
+ @GetMapping("/pageManageRecordCheck")
+ public Result pageManageRecordCheck(Page page,ManageRecordCheck manageRecordCheck) throws Exception {
+ return Result.success(manageRecordCheckService.pageManageRecordCheck(page, manageRecordCheck));
+ }
+
+ @Operation(summary = "鏂板鏂囦欢瀹℃壒璁板綍")
+ @PostMapping("/addManageRecordCheck")
+ public Result addManageRecordCheck(@RequestBody ManageRecordCheck manageRecordCheck) {
+ return Result.success(manageRecordCheckService.save(manageRecordCheck));
+ }
+
+
+ @Operation(summary = "缂栬緫鏂囦欢瀹℃壒璁板綍")
+ @PostMapping("/doManageRecordCheck")
+ public Result doManageRecordCheck(@RequestBody ManageRecordCheck manageRecordCheck) {
+ return Result.success(manageRecordCheckService.updateById(manageRecordCheck));
+ }
+
+ @Operation(summary = "鍒犻櫎鏂囦欢瀹℃壒璁板綍")
+ @DeleteMapping("/delManageRecordCheck")
+ public Result delManageRecordCheck(Integer id) {
+ return Result.success(manageRecordCheckService.removeById(id));
+ }
+
+ @Operation(summary = "瀹℃牳鏂囦欢瀹℃壒璁板綍")
+ @PostMapping("/checkManageRecordCheck")
+ public Result checkManageRecordCheck(@RequestBody Map<String, Object> param) {
+ Integer id = (Integer) param.get("id");
+ String checkState = (String) param.get("checkState");
+ return Result.success(manageRecordCheckService.checkManageRecordCheck(id,checkState));
+ }
+
+ @Operation(summary = "鎵瑰噯鏂囦欢瀹℃壒璁板綍")
+ @PostMapping("/ratifyManageRecordCheck")
+ public Result ratifyManageRecordCheck(@RequestBody Map<String, Object> param) {
+ Integer id = (Integer) param.get("id");
+ String ratifyState = (String) param.get("ratifyState");
+ return Result.success(manageRecordCheckService.ratifyManageRecordCheck(id,ratifyState));
+ }
+
+ @Operation(summary = "瀵煎嚭鏂囦欢瀹℃壒璁板綍")
+ @GetMapping("/exportOutManageRecordCheck")
+ public Result exportOutManageRecordCheck(ManageRecordCheck manageRecordCheck, HttpServletResponse response) throws Exception {
+ return Result.success(manageRecordCheckService.exportOutManageRecordCheck(manageRecordCheck,response));
+ }
+
+ @Operation(summary = "瀵煎叆鏂囦欢瀹℃壒璁板綍")
+ @PostMapping("/exportInManageRecordCheck")
+ public Result exportInManageRecordCheck(MultipartFile file){
+ return Result.success(manageRecordCheckService.exportInManageRecordCheck(file));
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsController.java
new file mode 100644
index 0000000..cd49f08
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsController.java
@@ -0,0 +1,74 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import com.ruoyi.manage.service.ManageRecordIntervalsService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 10:54:31
+ */
+@Tag(name = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordIntervals")
+public class ManageRecordIntervalsController {
+
+ @Resource
+ private ManageRecordIntervalsService manageRecordIntervalsService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鏂囦欢瀹氭湡瀹℃煡璁板綍")
+ @GetMapping("/pageManageRecordIntervals")
+ public Result pageManageRecordIntervals(Page page,ManageRecordIntervals manageRecordIntervals) throws Exception {
+ return Result.success(manageRecordIntervalsService.pageManageRecordIntervals(page, manageRecordIntervals));
+ }
+
+ @Operation(summary = "鏂板鏂囦欢瀹氭湡瀹℃煡璁板綍")
+ @PostMapping("/addManageRecordIntervals")
+ public Result addManageRecordIntervals(@RequestBody ManageRecordIntervals manageRecordIntervals) {
+ return Result.success(manageRecordIntervalsService.addManageRecordIntervals(manageRecordIntervals));
+ }
+
+
+ @Operation(summary = "缂栬緫鏂囦欢瀹氭湡瀹℃煡璁板綍")
+ @PostMapping("/doManageRecordIntervals")
+ public Result doManageRecordIntervals(@RequestBody ManageRecordIntervals manageRecordIntervals) {
+ return Result.success(manageRecordIntervalsService.updateById(manageRecordIntervals));
+ }
+
+ @Operation(summary = "鍒犻櫎鏂囦欢瀹氭湡瀹℃煡璁板綍")
+ @DeleteMapping("/delManageRecordIntervals")
+ public Result delManageRecordIntervals(Integer id) {
+ return Result.success(manageRecordIntervalsService.delManageRecordIntervals(id));
+ }
+
+ @Operation(summary = "瀵煎嚭鏂囦欢瀹氭湡瀹℃煡璁板綍")
+ @GetMapping("/exportOutManageRecordIntervals")
+ public Result exportOutManageRecordIntervals(ManageRecordIntervals manageRecordIntervals, HttpServletResponse response) throws Exception {
+ return Result.success(manageRecordIntervalsService.exportOutManageRecordIntervals(manageRecordIntervals,response));
+ }
+
+ @Operation(summary = "瀵煎叆鏂囦欢瀹氭湡瀹℃煡璁板綍")
+ @PostMapping("/exportInManageRecordIntervals")
+ public Result exportInManageRecordIntervals(MultipartFile file){
+ return Result.success(manageRecordIntervalsService.exportInManageRecordIntervals(file));
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsTotalController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsTotalController.java
new file mode 100644
index 0000000..d457282
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIntervalsTotalController.java
@@ -0,0 +1,55 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import com.ruoyi.manage.service.ManageRecordIntervalsTotalService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 01:12:11
+ */
+@Tag(name = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordIntervalsTotal")
+public class ManageRecordIntervalsTotalController {
+
+ @Resource
+ private ManageRecordIntervalsTotalService manageRecordIntervalsTotalService;
+
+ @Operation(summary = "鏌ヨ鏂囦欢瀹氭湡瀹℃煡璁板綍鍘嗗彶鍒楄〃")
+ @GetMapping("/pageManageRecordIntervalsTotal")
+ public Result pageManageRecordIntervalsTotal(Page page,ManageRecordIntervalsTotal manageRecordIntervalsTotal) throws Exception {
+ return Result.success(manageRecordIntervalsTotalService.pageManageRecordIntervalsTotal(page, manageRecordIntervalsTotal));
+ }
+
+ @Operation(summary = "鎻愪氦鏂囦欢瀹氭湡瀹℃煡璁板綍鍘嗗彶鍒楄〃")
+ @PostMapping("/submitManageRecordIntervalsTotal")
+ public Result submitManageRecordIntervalsTotal(@RequestBody Map<String, Integer> param) {
+ Integer id = param.get("id");
+ return Result.success(manageRecordIntervalsTotalService.submitManageRecordIntervalsTotal(id));
+ }
+
+ @Operation(summary = "鎵瑰噯鏂囦欢瀹氭湡瀹℃煡璁板綍鍘嗗彶鍒楄〃")
+ @PostMapping("/ratifyManageRecordIntervalsTotal")
+ public Result ratifyManageRecordIntervalsTotal(@RequestBody Map<String, Object> param) {
+ Integer id = (Integer) param.get("id");
+ String ratifyState = (String) param.get("ratifyState");
+ return Result.success(manageRecordIntervalsTotalService.ratifyManageRecordIntervalsTotal(id, ratifyState));
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIssueRecycleController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIssueRecycleController.java
new file mode 100644
index 0000000..99ab189
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordIssueRecycleController.java
@@ -0,0 +1,74 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import com.ruoyi.manage.service.ManageRecordIssueRecycleService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 09:11:05
+ */
+@Tag(name = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordIssueRecycle")
+public class ManageRecordIssueRecycleController {
+
+ @Resource
+ private ManageRecordIssueRecycleService manageRecordIssueRecycleService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+ @GetMapping("/pageManageRecordIssueRecycle")
+ public Result pageManageRecordIssueRecycle(Page page,ManageRecordIssueRecycle manageRecordIssueRecycle) throws Exception {
+ return Result.success(manageRecordIssueRecycleService.pageManageRecordIssueRecycle(page, manageRecordIssueRecycle));
+ }
+
+ @Operation(summary = "鍒犻櫎鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+ @DeleteMapping("/delManageRecordIssueRecycle")
+ public Result delManageRecordIssueRecycle(Integer id){
+ return Result.success(manageRecordIssueRecycleService.removeById(id));
+ }
+
+ @Operation(summary = "鏂板鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+ @PostMapping("/addManageRecordIssueRecycle")
+ public Result addManageRecordIssueRecycle(@RequestBody ManageRecordIssueRecycle manageRecordIssueRecycle){
+ return Result.success(manageRecordIssueRecycleService.addManageRecordIssueRecycle(manageRecordIssueRecycle));
+ }
+
+
+ @Operation(summary = "缂栬緫鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+ @PostMapping("/doManageRecordIssueRecycle")
+ public Result doManageRecordIssueRecycle(@RequestBody ManageRecordIssueRecycle manageRecordIssueRecycle){
+ return Result.success(manageRecordIssueRecycleService.doManageRecordIssueRecycle(manageRecordIssueRecycle));
+ }
+
+ @Operation(summary = "瀵煎嚭鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+ @GetMapping("/exportOutManageRecordIssueRecycle")
+ public Result exportOutManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle, HttpServletResponse response) {
+ return Result.success(manageRecordIssueRecycleService.exportOutManageRecordIssueRecycle(manageRecordIssueRecycle,response));
+ }
+
+ @Operation(summary = "瀵煎叆鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�")
+ @PostMapping("/exportInManageRecordIssueRecycle")
+ public Result exportInManageRecordIssueRecycle(MultipartFile file){
+ return Result.success(manageRecordIssueRecycleService.exportInManageRecordIssueRecycle(file));
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordTotalController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordTotalController.java
new file mode 100644
index 0000000..65b9f2c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordTotalController.java
@@ -0,0 +1,55 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import com.ruoyi.manage.service.ManageRecordTotalService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:30:08
+ */
+@Tag(name = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordTotal")
+public class ManageRecordTotalController {
+
+ @Resource
+ private ManageRecordTotalService manageRecordTotalService;
+
+ @Operation(summary = "鏌ヨ澶栨潵鏂囦欢纭璁板綍鍘嗗彶鍒楄〃")
+ @GetMapping("/pageManageRecordTotal")
+ public Result pageManageRecordTotal(Page page, ManageRecordTotal manageRecordTotal) throws Exception {
+ return Result.success(manageRecordTotalService.pageManageRecordTotal(page, manageRecordTotal));
+ }
+
+ @Operation(summary = "鎻愪氦澶栨潵鏂囦欢纭璁板綍鍘嗗彶鍒楄〃")
+ @PostMapping("/submitManageRecordTotal")
+ public Result submitManageRecordTotal(@RequestBody Map<String, Integer> param) {
+ Integer id = param.get("id");
+ return Result.success(manageRecordTotalService.submitManageRecordTotal(id));
+ }
+
+ @Operation(summary = "鎵瑰噯澶栨潵鏂囦欢纭璁板綍鍘嗗彶鍒楄〃")
+ @PostMapping("/ratifyManageRecordTotal")
+ public Result ratifyManageRecordTotal(@RequestBody Map<String, Object> param) {
+ Integer id = (Integer) param.get("id");
+ String ratifyState = (String) param.get("ratifyState");
+ return Result.success(manageRecordTotalService.ratifyManageRecordTotal(id, ratifyState));
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordVerifyController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordVerifyController.java
new file mode 100644
index 0000000..ba56693
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordVerifyController.java
@@ -0,0 +1,68 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.deepoove.poi.data.style.*;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import com.ruoyi.manage.service.ManageRecordVerifyService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:29:44
+ */
+@Tag(name = "璁板綍鐨勬帶鍒�")
+@RestController
+@RequestMapping("/manageRecordVerify")
+public class ManageRecordVerifyController {
+
+ @Resource
+ private ManageRecordVerifyService manageRecordVerifyService;
+
+
+ @Operation(summary = "鏌ヨ澶栨潵鏂囦欢纭璁板綍璇︽儏")
+ @GetMapping("/pageManageRecordVerify")
+ public Result pageManageRecordVerify(Page page,ManageRecordVerify manageRecordVerify) throws Exception {
+ return Result.success(manageRecordVerifyService.pageManageRecordVerify(page, manageRecordVerify));
+ }
+
+ @Operation(summary = "鏂板澶栨潵鏂囦欢纭璁板綍")
+ @PostMapping("/addManageRecordVerify")
+ public Result addManageRecordVerify(@RequestBody ManageRecordVerify manageRecordVerify) {
+ return Result.success(manageRecordVerifyService.addManageRecordVerify(manageRecordVerify));
+ }
+
+ @Operation(summary = "鍒犻櫎澶栨潵鏂囦欢纭璁板綍")
+ @DeleteMapping("/delManageRecordVerify")
+ public Result delManageRecordVerify(Integer id) {
+ return Result.success(manageRecordVerifyService.delManageRecordVerify(id));
+ }
+
+
+ @Operation(summary = "淇敼澶栨潵鏂囦欢纭璁板綍")
+ @PostMapping("/doManageRecordVerify")
+ public Result doManageRecordVerify(@RequestBody ManageRecordVerify manageRecordVerify) {
+ return Result.success(manageRecordVerifyService.updateById(manageRecordVerify));
+ }
+
+ @Operation(summary = "瀵煎叆澶栨潵鏂囦欢纭璁板綍")
+ @PostMapping("/exportManageRecordVerify")
+ public Result exportManageRecordVerify(MultipartFile file) {
+ return Result.success(manageRecordVerifyService.exportManageRecordVerify(file));
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramController.java
new file mode 100644
index 0000000..e11baf3
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramController.java
@@ -0,0 +1,68 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import com.ruoyi.manage.service.ManageReviewProgramService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 03:05:42
+ */
+@Tag(name = "绠$悊璇勫璁″垝")
+@RestController
+@RequestMapping("/manageReviewProgram")
+public class ManageReviewProgramController {
+ @Resource
+ private ManageReviewProgramService manageReviewProgramService;
+
+
+ @Operation(summary = "鏌ヨ璇勫璁″垝")
+ @GetMapping("/getPageReviewProgram")
+ public Result<IPage<ManageReviewProgram>> getPageReviewProgram(Page page, String startTime,String endTime, String judgingLocation) {
+ IPage<ManageReviewProgram> ipage = manageReviewProgramService.page(page,startTime,endTime,judgingLocation);
+ return Result.success(ipage);
+ }
+
+
+ @Operation(summary = "鏂板璇勫璁″垝")
+ @PostMapping("/addReviewProgram")
+ public Result addReviewProgram(@RequestBody ManageReviewProgram manageReviewProgram){
+ return Result.success(manageReviewProgramService.addReviewProgram(manageReviewProgram));
+ }
+
+ @Operation(summary = "缂栬緫璇勫璁″垝")
+ @PostMapping("/modifyReviewProgram")
+ public Result modifyReviewProgram(@RequestBody ManageReviewProgram manageReviewProgram){
+ return Result.success(manageReviewProgramService.updateById(manageReviewProgram));
+ }
+
+ @Operation(summary = "鍒犻櫎璇勫璁″垝")
+ @DeleteMapping("/deleteReviewProgram")
+ public Result deleteReviewProgram( Integer id){
+ return Result.success(manageReviewProgramService.removeById(id));
+ }
+
+
+ @Operation(summary = "涓嬭浇璇勫璁″垝")
+ @GetMapping("/exportReviewProgram")
+ public void exportReviewProgram(Integer id, HttpServletResponse response){
+ manageReviewProgramService.exportReviewProgram(id,response);
+ }
+
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramFileController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramFileController.java
new file mode 100644
index 0000000..7366985
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewProgramFileController.java
@@ -0,0 +1,46 @@
+package com.ruoyi.manage.controller;
+
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.service.ManageReviewProgramFileService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 04:15:47
+ */
+@Tag(name = "绠$悊璇勫璁″垝鏂囦欢")
+@RestController
+@RequestMapping("/manageReviewProgramFile")
+public class ManageReviewProgramFileController {
+
+ @Resource
+ private ManageReviewProgramFileService manageReviewProgramFileService;
+
+ @Operation(summary = "鏌ヨ璇勫璁″垝鏂囦欢")
+ @GetMapping("/selectReviewProgramFile")
+ public Result selectReviewProgramFile(Integer id){
+ return Result.success(manageReviewProgramFileService.selectFile(id));
+ }
+
+
+ @Operation(summary = "鏂板璇勫璁″垝鏂囦欢")
+ @PostMapping("/addReviewProgramFile")
+ public Result addReviewProgramFile(MultipartFile file,Integer id){
+ manageReviewProgramFileService.addFile(file,id);
+ return Result.success();
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewReportController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewReportController.java
new file mode 100644
index 0000000..24449e9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageReviewReportController.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.manage.pojo.ManageReviewReport;
+import com.ruoyi.manage.service.ManageReviewReportService;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 04:44:39
+ */
+@Tag(name = "绠$悊璇勫鎶ュ憡")
+@RestController
+@RequestMapping("/manageReviewReport")
+public class ManageReviewReportController {
+
+ @Resource
+ private ManageReviewReportService manageReviewReportService;
+
+ @Operation(summary = "鏌ヨ绠$悊璇勫鎶ュ憡")
+ @GetMapping("/getPageReviewReport")
+ public Result<IPage<ManageReviewReport>> getPageReviewReport(Page page, String startTime, String endTime, String place) {
+ IPage<ManageReviewReport> ipage = manageReviewReportService.page(page,startTime,endTime,place);
+ return Result.success(ipage);
+ }
+
+ @Operation(summary = "鏂板绠$悊璇勫鎶ュ憡")
+ @PostMapping("/addReviewReport")
+ public Result addReviewReport(@RequestBody ManageReviewReport manageReviewReport){
+ return Result.success(manageReviewReportService.save(manageReviewReport));
+ }
+
+ @Operation(summary = "缂栬緫绠$悊璇勫鎶ュ憡")
+ @PostMapping("/modifyReviewReport")
+ public Result modifyReviewReport(@RequestBody ManageReviewReport manageReviewReport){
+ return Result.success(manageReviewReportService.updateById(manageReviewReport));
+ }
+
+ @Operation(summary = "鍒犻櫎绠$悊璇勫鎶ュ憡")
+ @DeleteMapping("/deleteReviewReport")
+ public Result deleteReviewReport(Integer id){
+ return Result.success(manageReviewReportService.removeById(id));
+ }
+
+ @Operation(summary = "涓嬭浇绠$悊璇勫鎶ュ憡")
+ @GetMapping("/exportReviewReport")
+ public void exportReviewReport(Integer id , HttpServletResponse response){
+ manageReviewReportService.exportReviewReport(id,response);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRiskAssessmentResultsController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRiskAssessmentResultsController.java
new file mode 100644
index 0000000..0bc7c34
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRiskAssessmentResultsController.java
@@ -0,0 +1,134 @@
+package com.ruoyi.manage.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.enums.CellExtraTypeEnum;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.data.style.*;
+
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import com.ruoyi.manage.service.ManageRiskAssessmentResultsService;
+import com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo;
+import com.deepoove.poi.data.style.*;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:51
+ */
+@Tag(name = "鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃")
+@RestController
+@RequestMapping("/manageRiskAssessmentResults")
+public class ManageRiskAssessmentResultsController {
+
+ @Resource
+ private ManageRiskAssessmentResultsService manageRiskAssessmentResultsService;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ")
+ @GetMapping("/getPageResults")
+ public Result<IPage<ManageRiskAssessmentResultsVo>> getPageResults(Page page) {
+ IPage<ManageRiskAssessmentResultsVo> ipage = manageRiskAssessmentResultsService.getPageResults(page);
+ return Result.success(ipage);
+ }
+
+ @Operation(summary = "鎵瑰噯")
+ @PostMapping("/hazardIdentificationAndRiskApproval")
+ public Result<?> hazardIdentificationAndRiskApproval(@RequestBody Map<String, Integer> param) {
+ Integer approve = param.get("approve");
+ Integer status = param.get("status");
+ manageRiskAssessmentResultsService.update(Wrappers.<ManageRiskAssessmentResults>lambdaUpdate()
+ .set(ManageRiskAssessmentResults::getApprove, approve)
+ .set(ManageRiskAssessmentResults::getApproveStatus, status)
+ .set(ManageRiskAssessmentResults::getApproveDate, LocalDateTime.now()));
+ return Result.success();
+ }
+
+ @Operation(summary = "瀹℃壒")
+ @PostMapping("/dangerousRiskApproval")
+ public Result<?> dangerousRiskApproval(@RequestBody Map<String, Integer> param) {
+ Integer approval = param.get("approval");
+ Integer status = param.get("status");
+ manageRiskAssessmentResultsService.update(Wrappers.<ManageRiskAssessmentResults>lambdaUpdate()
+ .set(ManageRiskAssessmentResults::getApproval, approval)
+ .set(ManageRiskAssessmentResults::getApprovalStatus, status)
+ .set(ManageRiskAssessmentResults::getApprovalDate, LocalDateTime.now()));
+ return Result.success();
+ }
+
+ @Operation(summary = "瀵煎叆")
+ @PostMapping("/riskAssessmentImport")
+ public void riskAssessmentImport(MultipartFile file) throws IOException {
+ boolean excelFile = isExcelFile(file);
+ if (!excelFile) {
+ throw new ErrorException("璇峰鍏xcel鏂囦欢锛�");
+ }
+ EasyExcel.read(file.getInputStream(), ManageRiskAssessmentResults.class, new PageReadListener<ManageRiskAssessmentResults>(dataList -> {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ dataList.forEach(i -> {
+ i.setEditor(userId);
+ i.setEditorDate(LocalDateTime.now());
+ i.setApproveStatus(0);
+ i.setApprovalStatus(0);
+ });
+ manageRiskAssessmentResultsService.saveOrUpdateBatch(dataList);
+ })).extraRead(CellExtraTypeEnum.MERGE).sheet().doRead();
+ }
+
+ @Operation(summary = "鏂板")
+ @PostMapping("/addNewRiskFactors")
+ public void addNewRiskFactors(@RequestBody ManageRiskAssessmentResults manageRiskAssessmentResults) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ manageRiskAssessmentResults.setEditor(userId);
+ manageRiskAssessmentResults.setEditorDate(LocalDateTime.now());
+ manageRiskAssessmentResultsService.saveOrUpdate(manageRiskAssessmentResults);
+ }
+
+ @Operation(summary = "鍒犻櫎")
+ @DeleteMapping("/removeRiskFactors")
+ public void removeRiskFactors(Integer id) {
+ manageRiskAssessmentResultsService.removeById(id);
+ }
+
+
+ @Operation(summary = "瀵煎嚭鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�")
+ @GetMapping("/exportHazardFactorIdentification")
+ public void exportPersonTraining(HttpServletResponse response){
+ manageRiskAssessmentResultsService.exportPersonTraining(response);
+ }
+
+ public static boolean isExcelFile(MultipartFile file) {
+ if (file.isEmpty()) {
+ return false;
+ }
+ String originalFilename = file.getOriginalFilename();
+ if (originalFilename == null) {
+ return false;
+ }
+ String[] parts = originalFilename.split("\\.");
+ if (parts.length == 0) {
+ return false;
+ }
+ String fileExtension = parts[parts.length - 1].toLowerCase();
+ return fileExtension.equals("xls") || fileExtension.equals("xlsx");
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/ClientSatisfactionDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ClientSatisfactionDto.java
new file mode 100644
index 0000000..ef1baf9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ClientSatisfactionDto.java
@@ -0,0 +1,50 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-16 鏄熸湡涓� 10:38:30
+ * Description: 瀹㈡埛婊℃剰搴﹁皟鏌ュ鍑篧ord
+ */
+@Data
+public class ClientSatisfactionDto extends ClientSatisfaction {
+
+ @Schema(description = "鏈嶅姟鎬佸害, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String serviceAttitude0;
+
+ @Schema(description = "鏈嶅姟鎬佸害, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String serviceAttitude1;
+
+ @Schema(description = "鏈嶅姟鎬佸害, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String serviceAttitude2;
+
+ @Schema(description = "鎶�鏈兘鍔�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String technicalCompetence0;
+
+ @Schema(description = "鎶�鏈兘鍔�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String technicalCompetence1;
+
+ @Schema(description = "鎶�鏈兘鍔�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String technicalCompetence2;
+
+ @Schema(description = "妫�娴嬪伐浣�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String inspectionWork0;
+
+ @Schema(description = "妫�娴嬪伐浣�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String inspectionWork1;
+
+ @Schema(description = "妫�娴嬪伐浣�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String inspectionWork2;
+
+ @Schema(description = "鏀惰垂鍚堢悊鎬�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String reasonableFees0;
+
+ @Schema(description = "鏀惰垂鍚堢悊鎬�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String reasonableFees1;
+
+ @Schema(description = "鏀惰垂鍚堢悊鎬�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private String reasonableFees2;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCheckDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCheckDto.java
new file mode 100644
index 0000000..8a23b4e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCheckDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalCheck;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/11
+ */
+@Data
+public class InternalCheckDto extends InternalCheck {
+
+ @Schema(description = "妫�鏌ヨ鎯�")
+ private List<InternalCheckDetail> checkDetailList;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCorrectDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCorrectDto.java
new file mode 100644
index 0000000..f7e9bf0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalCorrectDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalCorrect;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/19
+ */
+@Data
+public class InternalCorrectDto extends InternalCorrect {
+
+ @Schema(description = "鎻愬嚭鏃堕棿")
+ private String raiseTimeString;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽鏃堕棿")
+ private String causeTimeString;
+
+ @Schema(description = "绾犳鏃堕棿")
+ private String correctTimeString;
+
+ @Schema(description = "楠岃瘉鏃堕棿")
+ private String validationTimeString;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalImplementDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalImplementDto.java
new file mode 100644
index 0000000..edaaedd
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalImplementDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalImplement;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/11
+ */
+@Data
+public class InternalImplementDto extends InternalImplement {
+
+ @Schema(description = "璁″垝璇︽儏")
+ private List<InternalImplementDetail> implementDetailList;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingDto.java
new file mode 100644
index 0000000..3519069
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalMeeting;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/12
+ */
+@Data
+public class InternalMeetingDto extends InternalMeeting {
+
+ @Schema(description = "鍙傚姞浜�")
+ private List<InternalMeetingDetail> meetingDetailList;
+
+ @Schema(description = "鍙傚姞浜轰俊鎭�")
+ private String participantName;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingParticipantDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingParticipantDto.java
new file mode 100644
index 0000000..192fa7b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalMeetingParticipantDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.manage.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 鍙傚姞浜哄憳瀵硅薄
+ *
+ * @Author zhuo
+ * @Date 2024/11/19
+ */
+@Data
+public class InternalMeetingParticipantDto {
+
+ @Schema(description = "鍙傚姞浜哄憳1")
+ private String userName1;
+
+ @Schema(description = "閮ㄩ棬1")
+ private String department1;
+
+ @Schema(description = "鍙傚姞浜哄憳2")
+ private String userName2;
+
+ @Schema(description = "閮ㄩ棬2")
+ private String department2;
+
+ @Schema(description = "鍙傚姞浜哄憳3")
+ private String userName3;
+
+ @Schema(description = "閮ㄩ棬3")
+ private String department3;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalPlanDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalPlanDto.java
new file mode 100644
index 0000000..3715f8e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/InternalPlanDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.InternalPlan;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/13
+ */
+@Data
+public class InternalPlanDto extends InternalPlan {
+
+ @Schema(description = "璁″垝璇︽儏")
+ private List<InternalPlanDetail> planDetailList;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageDocumentIssueRecycleDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageDocumentIssueRecycleDto.java
new file mode 100644
index 0000000..ae0375d
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageDocumentIssueRecycleDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.manage.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@ExcelIgnoreUnannotated
+public class ManageDocumentIssueRecycleDto extends ManageDocumentIssueRecycle {
+
+ @Schema(description = "鍙戞斁浜�")
+ @ExcelProperty(value = "鍙戞斁浜�")
+ private String issueUserName;
+
+ @Schema(description = "鍥炴敹浜�")
+ @ExcelProperty(value = "鍥炴敹浜�")
+ private String recycleUserName;
+
+ @Schema(description = "鎺ユ敹浜�")
+ @ExcelProperty(value = "鎺ユ敹浜�")
+ private String receiveUserName;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingDto.java
new file mode 100644
index 0000000..a32ec7b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.dto;
+
+import com.ruoyi.manage.pojo.ManageMeeting;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ManageMeetingDto extends ManageMeeting {
+
+ private List<ManageMeetingParticipants> list;
+
+ private String participant;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingParticipantsDto.java b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingParticipantsDto.java
new file mode 100644
index 0000000..67f19ce
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/dto/ManageMeetingParticipantsDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class ManageMeetingParticipantsDto {
+
+ @Schema(description = "鍙傚姞浜哄憳1")
+ private String userName1;
+
+ @Schema(description = "閮ㄩ棬1")
+ private String department1;
+
+ @Schema(description = "鍙傚姞浜哄憳2")
+ private String userName2;
+
+ @Schema(description = "閮ㄩ棬2")
+ private String department2;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/excel/ManageDocumentListListener.java b/cnas-manage/src/main/java/com/ruoyi/manage/excel/ManageDocumentListListener.java
new file mode 100644
index 0000000..362fee6
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/excel/ManageDocumentListListener.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.service.ManageDocumentListService;
+import lombok.Data;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+
+@Data
+public class ManageDocumentListListener extends AnalysisEventListener<ManageDocumentList> {
+ private static final int BATCH_COUNT = 1000;
+ List<ManageDocumentList> list = new ArrayList<>();
+
+ private ManageDocumentListService manageDocumentListService;
+
+ public ManageDocumentListListener(ManageDocumentListService manageDocumentListService) {
+ this.manageDocumentListService = manageDocumentListService;
+ }
+
+ @Override
+ public void invoke(ManageDocumentList data, AnalysisContext analysisContext) {
+ list.add(data);
+ if (list.size() >= BATCH_COUNT) {
+ save();
+ list.clear();
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+ int size = list.size();
+ if(size == 0){
+ throw new BaseException("瀵煎叆鏁版嵁涓嶅緱涓虹┖");
+ }else {
+ save();
+ }
+ }
+
+ @Override
+ public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
+ // 鑾峰彇琛ㄥご淇℃伅
+ if(CollectionUtils.isEmpty(headMap) || headMap.size() != 8){
+ throw new RuntimeException("瀵煎叆妯℃澘鏈夎");
+ }
+ List<String> colums = Arrays.asList(
+ "搴忓彿", "鏂囦欢缂栧彿", "绫诲埆", "鍚嶇О",
+ "鏂囦欢鐗堟湰", "浣滆��", "鐢熸晥鏃ユ湡", "鏂囦欢鐘舵��"
+ );
+ for (int i = 0; i < colums.size(); i++) {
+ if(!headMap.get(i).equals(colums.get(i))){
+ throw new BaseException("瀵煎叆妯℃澘鏈夎");
+ }
+ }
+ }
+
+ private void save() {
+ manageDocumentListService.importExcel(list);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionAnalyseFileMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionAnalyseFileMapper.java
new file mode 100644
index 0000000..cb26a77
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionAnalyseFileMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 瀹㈡埛婊℃剰搴﹀垎鏋愰檮浠�
+ *
+ * @author makejava
+ * @since 2024-11-09
+ */
+@Mapper
+public interface ClientSatisfactionAnalyseFileMapper extends BaseMapper<ClientSatisfactionAnalyseFile> {
+
+ /**
+ * 瀹㈡埛鍒嗘瀽闄勪欢鍒楄〃
+ * @param page
+ * @return
+ */
+ IPage<ClientSatisfactionAnalyseFile> pageAnalyseFile(Page page, @Param("ew") QueryWrapper<ClientSatisfactionAnalyseFile> ew);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionMapper.java
new file mode 100644
index 0000000..182ce3c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ClientSatisfactionMapper.java
@@ -0,0 +1,36 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.ClientSatisfactionDto;
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Mapper
+public interface ClientSatisfactionMapper extends BaseMapper<ClientSatisfaction> {
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<ClientSatisfaction> pageClientSatisfaction(Page page, @Param("ew") QueryWrapper<ClientSatisfaction> ew);
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹀鍑�
+ * @param clientSatisfactionId
+ * @return
+ */
+ ClientSatisfactionDto exportWordClientSatisfaction(Integer clientSatisfactionId);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckDetailMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckDetailMapper.java
new file mode 100644
index 0000000..65c7b78
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckDetailMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鍐呭妫�鏌ヨ鎯呰〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalCheckDetailMapper extends BaseMapper<InternalCheckDetail> {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckMapper.java
new file mode 100644
index 0000000..97196d4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCheckMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.InternalCheckDto;
+import com.ruoyi.manage.pojo.InternalCheck;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalCheckMapper extends BaseMapper<InternalCheck> {
+
+ /**
+ * 鍐呭妫�鏌ュ垎椤垫煡璇�
+ * @param page
+ * @return
+ */
+ IPage<InternalCheckDto> pageInternalCheck(Page page, @Param("ew") QueryWrapper<InternalCheck> ew);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectFileMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectFileMapper.java
new file mode 100644
index 0000000..fe9645f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectFileMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳鎺柦闄勪欢琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:38
+ */
+@Mapper
+public interface InternalCorrectFileMapper extends BaseMapper<InternalCorrectFile> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectMapper.java
new file mode 100644
index 0000000..02f02f3
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalCorrectMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.InternalCorrect;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:15
+ */
+@Mapper
+public interface InternalCorrectMapper extends BaseMapper<InternalCorrect> {
+
+ IPage<InternalCorrect> pageInternalAccording(Page page, @Param("ew") QueryWrapper<InternalCorrect> ew);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementDetailMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementDetailMapper.java
new file mode 100644
index 0000000..2382df7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementDetailMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鍐呭瀹炴柦璁″垝璇︽儏
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalImplementDetailMapper extends BaseMapper<InternalImplementDetail> {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementMapper.java
new file mode 100644
index 0000000..b337b06
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalImplementMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.InternalImplementDto;
+import com.ruoyi.manage.pojo.InternalImplement;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalImplementMapper extends BaseMapper<InternalImplement> {
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+ * @param page
+ * @return
+ */
+ IPage<InternalImplementDto> pageInternalImplement(Page page, @Param("ew") QueryWrapper<InternalImplement> ew);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingDetailMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingDetailMapper.java
new file mode 100644
index 0000000..ed4ed42
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingDetailMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+
+/**
+ * <p>
+ * 鍐呭浼氳璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:56:13
+ */
+public interface InternalMeetingDetailMapper extends BaseMapper<InternalMeetingDetail> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingMapper.java
new file mode 100644
index 0000000..82f87ba
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalMeetingMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.InternalMeetingDto;
+import com.ruoyi.manage.pojo.InternalMeeting;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:50:44
+ */
+public interface InternalMeetingMapper extends BaseMapper<InternalMeeting> {
+
+ /**
+ * 鍐呭浼氳鍒嗛〉鏌ヨ
+ * @param page
+ * @return
+ */
+ IPage<InternalMeetingDto> pageInternalMeeting(Page page, @Param("ew") QueryWrapper<InternalMeeting> ew);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanDetailMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanDetailMapper.java
new file mode 100644
index 0000000..02a0734
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanDetailMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝璇︽儏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:28:48
+ */
+@Mapper
+public interface InternalPlanDetailMapper extends BaseMapper<InternalPlanDetail> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanMapper.java
new file mode 100644
index 0000000..60d3bab
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalPlanMapper.java
@@ -0,0 +1,30 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.InternalPlanDto;
+import com.ruoyi.manage.pojo.InternalPlan;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:27:47
+ */
+@Mapper
+public interface InternalPlanMapper extends BaseMapper<InternalPlan> {
+
+ /**
+ * 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<InternalPlanDto> pageInternalPlan(Page page, @Param("ew") QueryWrapper<InternalPlan> ew);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalReportMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalReportMapper.java
new file mode 100644
index 0000000..00cb8eb
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/InternalReportMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.InternalReport;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Mapper
+public interface InternalReportMapper extends BaseMapper<InternalReport> {
+
+ /**
+ * 鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalReportQueryWrapper
+ * @return
+ */
+ IPage<InternalReport> pageInternalReport(Page page, @Param("ew") QueryWrapper<InternalReport> internalReportQueryWrapper);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageControlPlanListMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageControlPlanListMapper.java
new file mode 100644
index 0000000..4ef7773
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageControlPlanListMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import com.ruoyi.manage.vo.ManageControlPlanListVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:30
+ */
+public interface ManageControlPlanListMapper extends BaseMapper<ManageControlPlanList> {
+
+ IPage<ManageControlPlanListVo> getPageList(Page page, @Param("itSExporting") Boolean itSExporting);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentAlterMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentAlterMapper.java
new file mode 100644
index 0000000..ffe8baa
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentAlterMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageDocumentAlter;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 11:04:01
+ */
+public interface ManageDocumentAlterMapper extends BaseMapper<ManageDocumentAlter> {
+
+ IPage<ManageDocumentAlter> pageManageDocumentAlter(Page page, @Param("ew") QueryWrapper<ManageDocumentAlter> queryWrappers);
+
+ ManageDocumentAlter getManageDocumentAlter(Integer id);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentCancelMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentCancelMapper.java
new file mode 100644
index 0000000..c97de36
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentCancelMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageDocumentCancel;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 02:37:35
+ */
+public interface ManageDocumentCancelMapper extends BaseMapper<ManageDocumentCancel> {
+
+ IPage<ManageDocumentCancel> pageManageDocumentCancel(Page page, @Param("ew") QueryWrapper<ManageDocumentCancel> queryWrappers);
+
+ ManageDocumentCancel getManageDocumentCancel(Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentControlledMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentControlledMapper.java
new file mode 100644
index 0000000..7ae6501
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentControlledMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageDocumentControlled;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 02:54:44
+ */
+public interface ManageDocumentControlledMapper extends BaseMapper<ManageDocumentControlled> {
+
+ IPage<ManageDocumentControlled> pageManageDocumentControlled(Page page, @Param("ew") QueryWrapper<ManageDocumentControlled> queryWrappers);
+
+ ManageDocumentControlled getManageDocumentControlled(Long id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentIssueRecycleMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentIssueRecycleMapper.java
new file mode 100644
index 0000000..1b9c6fa
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentIssueRecycleMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 09:18:24
+ */
+public interface ManageDocumentIssueRecycleMapper extends BaseMapper<ManageDocumentIssueRecycle> {
+
+ IPage<ManageDocumentIssueRecycleDto> pageManageDocumentIssueRecycle(Page page, @Param("ew") QueryWrapper<ManageDocumentIssueRecycleDto> queryWrappers);
+
+ ManageDocumentIssueRecycleDto getManageDocumentIssueRecycle(Long id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentListMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentListMapper.java
new file mode 100644
index 0000000..79de39a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageDocumentListMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+ Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 11:08:11
+ */
+public interface ManageDocumentListMapper extends BaseMapper<ManageDocumentList> {
+
+ IPage<ManageDocumentList> pageManageDocumentList(Page page, @Param("ew") QueryWrapper<ManageDocumentList> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingMapper.java
new file mode 100644
index 0000000..2f32c7e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.dto.ManageMeetingDto;
+import com.ruoyi.manage.pojo.ManageMeeting;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:33:47
+ */
+public interface ManageMeetingMapper extends BaseMapper<ManageMeeting> {
+
+
+ IPage<ManageMeetingDto> page(Page page, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("place") String place);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingParticipantsMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingParticipantsMapper.java
new file mode 100644
index 0000000..8aecf44
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageMeetingParticipantsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:34:27
+ */
+public interface ManageMeetingParticipantsMapper extends BaseMapper<ManageMeetingParticipants> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordAuditMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordAuditMapper.java
new file mode 100644
index 0000000..38ae1e9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordAuditMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 10:29:18
+ */
+public interface ManageRecordAuditMapper extends BaseMapper<ManageRecordAudit> {
+
+ IPage<ManageRecordAudit> pageManageRecordAudit(Page page, @Param("ew") QueryWrapper<ManageRecordAudit> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCancelMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCancelMapper.java
new file mode 100644
index 0000000..f0adcd9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCancelMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordCancel;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 01:27:22
+ */
+public interface ManageRecordCancelMapper extends BaseMapper<ManageRecordCancel> {
+
+ IPage<ManageRecordCancel> pageManageRecordCancel(Page page, @Param("ew") QueryWrapper<ManageRecordCancel> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCheckMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCheckMapper.java
new file mode 100644
index 0000000..72fa458
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordCheckMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍) Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:31:36
+ */
+public interface ManageRecordCheckMapper extends BaseMapper<ManageRecordCheck> {
+
+ IPage<ManageRecordCheck> pageManageRecordCheck(Page page, @Param("ew") QueryWrapper<ManageRecordCheck> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsMapper.java
new file mode 100644
index 0000000..743436f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 10:54:31
+ */
+public interface ManageRecordIntervalsMapper extends BaseMapper<ManageRecordIntervals> {
+
+ IPage<ManageRecordIntervals> pageManageRecordIntervals(Page page, @Param("ew") QueryWrapper<ManageRecordIntervals> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsTotalMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsTotalMapper.java
new file mode 100644
index 0000000..df92dca
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIntervalsTotalMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 01:12:11
+ */
+public interface ManageRecordIntervalsTotalMapper extends BaseMapper<ManageRecordIntervalsTotal> {
+
+ IPage<ManageRecordIntervalsTotal> pageManageRecordIntervalsTotal(Page page, @Param("ew") QueryWrapper<ManageRecordIntervalsTotal> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIssueRecycleMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIssueRecycleMapper.java
new file mode 100644
index 0000000..be532a9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordIssueRecycleMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 09:11:05
+ */
+public interface ManageRecordIssueRecycleMapper extends BaseMapper<ManageRecordIssueRecycle> {
+
+ IPage<ManageRecordIssueRecycle> pageManageRecordIssueRecycle(Page page, @Param("ew") QueryWrapper<ManageRecordIssueRecycle> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordTotalMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordTotalMapper.java
new file mode 100644
index 0000000..5950bd9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordTotalMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:30:08
+ */
+public interface ManageRecordTotalMapper extends BaseMapper<ManageRecordTotal> {
+
+ IPage<ManageRecordTotal> pageProcessTotaldeal(Page page, @Param("ew") QueryWrapper<ManageRecordTotal> queryWrappers);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordVerifyMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordVerifyMapper.java
new file mode 100644
index 0000000..7461cec
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRecordVerifyMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:29:44
+ */
+public interface ManageRecordVerifyMapper extends BaseMapper<ManageRecordVerify> {
+
+ IPage<ManageRecordVerify> pageManageRecordVerify(Page page, @Param("ew") QueryWrapper<ManageRecordVerify> queryWrappers);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramFileMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramFileMapper.java
new file mode 100644
index 0000000..cdacef5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramFileMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.manage.pojo.ManageReviewProgramFile;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 04:15:47
+ */
+public interface ManageReviewProgramFileMapper extends BaseMapper<ManageReviewProgramFile> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramMapper.java
new file mode 100644
index 0000000..4a77c8b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewProgramMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 03:05:42
+ */
+public interface ManageReviewProgramMapper extends BaseMapper<ManageReviewProgram> {
+
+
+ IPage<ManageReviewProgram> page(Page page, @Param("startTime") String startTime,@Param("endTime") String endTime,@Param("judgingLocation") String judgingLocation);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewReportMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewReportMapper.java
new file mode 100644
index 0000000..a88400b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageReviewReportMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageReviewReport;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 04:44:39
+ */
+public interface ManageReviewReportMapper extends BaseMapper<ManageReviewReport> {
+
+ IPage<ManageReviewReport> page(Page page, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("place") String place);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRiskAssessmentResultsMapper.java b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRiskAssessmentResultsMapper.java
new file mode 100644
index 0000000..7cd9776
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/mapper/ManageRiskAssessmentResultsMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:51
+ */
+public interface ManageRiskAssessmentResultsMapper extends BaseMapper<ManageRiskAssessmentResults> {
+
+ IPage<ManageRiskAssessmentResultsVo> getPageResults(Page page, @Param("itSExporting") Boolean itSExporting);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfaction.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfaction.java
new file mode 100644
index 0000000..f3c67e4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfaction.java
@@ -0,0 +1,95 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Data
+@TableName("cnas_client_satisfaction")
+public class ClientSatisfaction {
+
+ @TableId(type = IdType.AUTO)
+ private Integer clientSatisfactionId;
+
+ @Schema(description = "鍗曚綅鍚嶇О")
+ private String unitName;
+
+ @Schema(description = "濮撳悕")
+ private String userName;
+
+ @Schema(description = "濉啓鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate fillDate;
+
+ @Schema(description = "閮ㄩ棬")
+ private String department;
+
+ @Schema(description = "鑱旂郴鐢佃瘽")
+ private String contactNumber;
+
+ @Schema(description = "鏈嶅姟鎬佸害, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private Integer serviceAttitude;
+
+ @Schema(description = "鏈嶅姟鎬佸害寤鸿")
+ private String serviceAttitudeSuggestion;
+
+ @Schema(description = "鎶�鏈兘鍔�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private Integer technicalCompetence;
+
+ @Schema(description = "鎶�鏈兘鍔涘缓璁�")
+ private String technicalCompetenceSuggestion;
+
+ @Schema(description = "妫�娴嬪伐浣�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private Integer inspectionWork;
+
+ @Schema(description = "妫�娴嬪伐浣滃缓璁�")
+ private String inspectionWorkSuggestion;
+
+ @Schema(description = "鏀惰垂鍚堢悊鎬�, 0:婊℃剰, 1:涓�鑸�, 2:涓嶆弧鎰�")
+ private Integer reasonableFees;
+
+ @Schema(description = "鏀惰垂鍚堢悊鎬у缓璁�")
+ private String reasonableFeesSuggestion;
+
+ @Schema(description = "纭浜�")
+ private String confirmPerson;
+
+ @Schema(description = "纭浜篒d")
+ private Integer confirmPersonId;
+
+ @Schema(description = "纭鐘舵��, 0:鏈‘璁�, 1:纭")
+ private Integer confirmStatus;
+
+ @Schema(description = "澶囨敞(瀵规垜浠殑甯屾湜)")
+ private String remark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfactionAnalyseFile.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfactionAnalyseFile.java
new file mode 100644
index 0000000..3358a57
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ClientSatisfactionAnalyseFile.java
@@ -0,0 +1,54 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 瀹㈡埛婊℃剰搴﹀垎鏋愰檮浠�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Data
+@TableName("cnas_client_satisfaction_analyse_file")
+public class ClientSatisfactionAnalyseFile {
+
+ @TableId(type = IdType.AUTO)
+ private Integer analyseFileId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(select = false,exist = false)
+ private String userName;
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheck.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheck.java
new file mode 100644
index 0000000..742cb35
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheck.java
@@ -0,0 +1,80 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_check")
+public class InternalCheck {
+
+ @TableId(type = IdType.AUTO)
+ private Integer checkId;
+
+ @Schema(description = "閮ㄩ棬")
+ private String department;
+
+ @Schema(description = "閮ㄩ棬璐熻矗浜�")
+ private String departmentHead;
+
+ @Schema(description = "瀹℃牳鍛�")
+ private String auditor;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private String reviewDate;
+
+ @Schema(description = "缂栧埗浜篿d")
+ private Integer writeUserId;
+
+ @Schema(description = "缂栧埗浜�")
+ private String writeUserName;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime writeTime;
+
+ @Schema(description = "鎵瑰噯浜篿d")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private String ratifyUserName;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鎵瑰噯鐘舵��, 0 涓嶉�氳繃, 1閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "鎵瑰噯鍐呭")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheckDetail.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheckDetail.java
new file mode 100644
index 0000000..39650c8
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCheckDetail.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭妫�鏌ヨ鎯呰〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_check_detail")
+public class InternalCheckDetail {
+
+ @TableId(type = IdType.AUTO)
+ private Integer checkDetailId;
+
+ @Schema(description = "妫�鏌ヤ富琛╥d")
+ private Integer checkId;
+
+ @Schema(description = "瑕佺礌鏉℃")
+ private String element;
+
+ @Schema(description = "瀹℃牳鍐呭")
+ private String content;
+
+ @Schema(description = "瀹℃牳鏂瑰紡")
+ private String method;
+
+ @Schema(description = "瀹℃牳缁撴灉璁板綍")
+ private String resultRecords;
+
+ @Schema(description = "涓嶇鍚堟�ц川")
+ private String nonNature;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ // 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ private Integer index;
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrect.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrect.java
new file mode 100644
index 0000000..7cccc9b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrect.java
@@ -0,0 +1,114 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:15
+ */
+@Data
+@TableName("cnas_internal_correct")
+@Schema(description = "鍐呭绠$悊绾犳澶勭悊琛�")
+public class InternalCorrect {
+
+ @TableId(value = "correct_id", type = IdType.AUTO)
+ private Integer correctId;
+
+ @Schema(description = "涓嶅悎鏍兼弿杩�")
+ private String raiseResult;
+
+ @Schema(description = "vde涓撳鍙戠幇")
+ private String vdeRaiseResult;
+
+ @Schema(description = "鎻愬嚭閮ㄩ棬")
+ private String raiseDepartment;
+
+ @Schema(description = "鎻愬嚭浜篿d")
+ private Integer raiseUserId;
+
+ @Schema(description = "鎻愬嚭浜�")
+ private String raiseUserName;
+
+ @Schema(description = "鎻愬嚭鏃堕棿")
+ private LocalDate raiseTime;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽")
+ private String causeResult;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽璐d换閮ㄩ棬")
+ private String causeDepartment;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽浜篿d")
+ private Integer causeUserId;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽浜�")
+ private String causeUserName;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽鏃堕棿")
+ private LocalDate causeTime;
+
+ @Schema(description = "绾犳鎺柦")
+ private String correctResult;
+
+ @Schema(description = "鎻愬嚭閮ㄩ棬纭")
+ private String raiseDepartmentAffirm;
+
+ @Schema(description = "绾犳璐d换閮ㄩ棬")
+ private String correctDepartment;
+
+ @Schema(description = "绾犳浜篿d")
+ private Integer correctUserId;
+
+ @Schema(description = "绾犳")
+ private String correctUserName;
+
+ @Schema(description = "绾犳鏃堕棿")
+ private LocalDate correctTime;
+
+ @Schema(description = "楠岃瘉缁撴灉")
+ private String validationResult;
+
+ @Schema(description = "楠岃瘉閮ㄩ棬")
+ private String validationDepartment;
+
+ @Schema(description = "楠岃瘉浜篿d")
+ private Integer validationUserId;
+
+ @Schema(description = "楠岃瘉浜�")
+ private String validationUserName;
+
+ @Schema(description = "楠岃瘉鏃堕棿")
+ private LocalDate validationTime;
+
+ @Schema(description = "鏄惁缁撴潫, 0: 鏈粨鏉�, 1:宸茬粨鏉�")
+ private Integer isFinish;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @Schema(description = "娴佺▼, 0:涓嶇鍚堝伐浣滄儏鍐佃褰�, 1澶勭悊鎺柦, 2:绾犳鎺柦, 3:鏄惁閫氱煡瀹㈡埛鍙仮澶嶅伐浣�")
+ private Integer flowType;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrectFile.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrectFile.java
new file mode 100644
index 0000000..63c7722
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalCorrectFile.java
@@ -0,0 +1,52 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳鎺柦闄勪欢琛�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:38
+ */
+@Data
+@TableName("cnas_internal_correct_file")
+@Schema(description = "鍐呭绠$悊绾犳鎺柦闄勪欢琛�")
+public class InternalCorrectFile {
+
+ @TableId(type = IdType.AUTO)
+ private Integer correctFileId;
+
+ @Schema(description = "鍐呭绾犳鎺柦id")
+ private Integer correctId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplement.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplement.java
new file mode 100644
index 0000000..089fd6f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplement.java
@@ -0,0 +1,107 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_implement")
+public class InternalImplement {
+
+ @TableId(type = IdType.AUTO)
+ private Integer implementId;
+
+ @Schema(description = "瀹℃牳鐩殑")
+ private String purposes;
+
+ @Schema(description = "瀹℃牳鎬ц川")
+ private String nature;
+
+ @Schema(description = "瀹℃牳鑼冨洿")
+ private String scope;
+
+ @Schema(description = "瀹℃牳渚濇嵁")
+ private String basis;
+
+ @Schema(description = "瀹℃牳缁勯暱")
+ private String teamLeader;
+
+ @Schema(description = "鍐呭鍛�")
+ private String internalAuditor;
+
+ @Schema(description = "瀹℃牳鏃堕棿")
+ private String reviewDate;
+
+ @Schema(description = "瀹℃牳鏂规硶")
+ private String auditMethod;
+
+ @Schema(description = "浼氳寮�濮嬫椂闂�")
+ private String firstMeetingTime;
+
+ @Schema(description = "鏈浼氳鏃堕棿")
+ private String lastMeetingTime;
+
+ @Schema(description = "瀹℃牳鎶ュ憡鎻愪氦鏃ユ湡")
+ private String submitTime;
+
+ @Schema(description = "瀹℃牳鎶ュ憡鍙戞斁鑼冨洿")
+ private String submitScope;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "缂栧埗浜篿d")
+ private Integer writeUserId;
+
+ @Schema(description = "缂栧埗浜�")
+ private String writeUserName;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime writeTime;
+
+ @Schema(description = "鎵瑰噯浜篿d")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private String ratifyUserName;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鎵瑰噯鐘舵��, 0 涓嶉�氳繃, 1閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "鎵瑰噯鍐呭")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplementDetail.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplementDetail.java
new file mode 100644
index 0000000..459df88
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalImplementDetail.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭瀹炴柦璁″垝璇︽儏
+ *
+ * @author makejava
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_implement_detail")
+public class InternalImplementDetail {
+
+ @TableId(type = IdType.AUTO)
+ private Integer implementDetailId;
+
+ @Schema(description = "瀹炴柦璁″垝涓昏〃id")
+ private Integer implementId;
+
+ @Schema(description = "鏃堕棿")
+ private String implement;
+
+ @Schema(description = "閮ㄩ棬")
+ private String department;
+
+ @Schema(description = "璐d换浜�")
+ private String responsible;
+
+ @Schema(description = "瀹℃牳鍛�")
+ private String auditor;
+
+ @Schema(description = "瀹℃牳鍐呭")
+ private String reviewContent;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ // 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ private Integer index;
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeeting.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeeting.java
new file mode 100644
index 0000000..6108c1f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeeting.java
@@ -0,0 +1,55 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:50:44
+ */
+@Data
+@TableName("cnas_internal_meeting")
+@Schema(description = "鍐呭浼氳琛�")
+public class InternalMeeting {
+
+ @TableId(value = "meeting_id", type = IdType.AUTO)
+ private Integer meetingId;
+
+ @Schema(description = "鏃堕棿")
+ private String meetingDate;
+
+ @Schema(description = "涓绘寔浜�")
+ private String compere;
+
+ @Schema(description = "鍦扮偣")
+ private String place;
+
+ @Schema(description = "浼氳涓婚")
+ private String subject;
+
+ @Schema(description = "鍙傚姞浜哄憳")
+ private String participant;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeetingDetail.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeetingDetail.java
new file mode 100644
index 0000000..a20210d
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalMeetingDetail.java
@@ -0,0 +1,52 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭浼氳璇︽儏琛�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:56:13
+ */
+@Data
+@TableName("cnas_internal_meeting_detail")
+@Schema(description = "鍐呭浼氳璇︽儏琛�")
+public class InternalMeetingDetail {
+
+ @TableId(value = "meeting_detail_id", type = IdType.AUTO)
+ private Integer meetingDetailId;
+
+ @Schema(description = "浼氳涓昏〃id")
+ private Integer meetingId;
+
+ @Schema(description = "鍙傚姞浜哄憳id")
+ private Integer userId;
+
+ @Schema(description = "鍙傚姞浜哄憳")
+ private String userName;
+
+ @Schema(description = "閮ㄩ棬")
+ private String department;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlan.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlan.java
new file mode 100644
index 0000000..94b4fb3
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlan.java
@@ -0,0 +1,94 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:27:47
+ */
+@Data
+@TableName("cnas_internal_plan")
+@Schema(description = "鍐呭骞村害璁″垝")
+public class InternalPlan {
+
+ @TableId(value = "plan_id", type = IdType.AUTO)
+ private Integer planId;
+
+ @Schema(description = "鍐呭鐩殑")
+ private String purpose;
+
+ @Schema(description = "鍐呯敓鑼冨洿")
+ private String scope;
+
+ @Schema(description = "鍐呭渚濇嵁")
+ private String basis;
+
+ @Schema(description = "缁勯暱")
+ private String leader;
+
+ @Schema(description = "缁勫憳")
+ private String crew;
+
+ @Schema(description = "缂栧埗浜篿d")
+ private Integer writeUserId;
+
+ @Schema(description = "缂栧埗浜�")
+ private String writeUserName;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ private LocalDateTime writeTime;
+
+ @Schema(description = "瀹℃牳浜篿d")
+ private Integer examineUserId;
+
+ @Schema(description = "瀹℃牳浜�")
+ private String examineUserName;
+
+ @Schema(description = "瀹℃牳鏃堕棿")
+ private LocalDateTime examineTime;
+
+ @Schema(description = "瀹℃牳鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+ private Integer examineStatus;
+
+ @Schema(description = "瀹℃牳淇℃伅")
+ private String examineRemark;
+
+ @Schema(description = "鎵瑰噯浜篿d")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private String ratifyUserName;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鎵瑰噯鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "鎵瑰噯淇℃伅")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlanDetail.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlanDetail.java
new file mode 100644
index 0000000..7c9f3eb
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalPlanDetail.java
@@ -0,0 +1,82 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝璇︽儏琛�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:28:48
+ */
+@Data
+@TableName("cnas_internal_plan_detail")
+@Schema(description = "鍐呭骞村害璁″垝璇︽儏琛�")
+public class InternalPlanDetail {
+
+ @TableId(value = "plan_detail_id", type = IdType.AUTO)
+ private Integer planDetailId;
+
+ @Schema(description = "鍐呭骞村害璁″垝id")
+ private Integer planId;
+
+ @Schema(description = "閮ㄩ棬")
+ private String department;
+
+ @Schema(description = "涓�鏈�")
+ private String january;
+
+ @Schema(description = "浜屾湀")
+ private String february;
+
+ @Schema(description = "涓夋湀")
+ private String march;
+
+ @Schema(description = "鍥涙湀")
+ private String april;
+
+ @Schema(description = "浜旀湀")
+ private String may;
+
+ @Schema(description = "鍏湀")
+ private String june;
+
+ @Schema(description = "涓冩湀")
+ private String july;
+
+ @Schema(description = "鍏湀")
+ private String august;
+
+ @Schema(description = "涔濇湀")
+ private String september;
+
+ @Schema(description = "鍗佹湀")
+ private String october;
+
+ @Schema(description = "鍗佷竴鏈�")
+ private String november;
+
+ @Schema(description = "鍗佷簩鏈�")
+ private String december;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalReport.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalReport.java
new file mode 100644
index 0000000..05b4b67
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/InternalReport.java
@@ -0,0 +1,122 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Data
+@TableName("cnas_internal_report")
+public class InternalReport {
+
+ @TableId(type = IdType.AUTO)
+ private Integer reportId;
+
+ @Schema(description = "瀹℃牳渚濇嵁")
+ private String purposes;
+
+ @Schema(description = "瀹℃牳渚濇嵁")
+ private String basis;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private String reviewDate;
+
+ @Schema(description = "瀹℃牳鏂规硶")
+ private String method;
+
+ @Schema(description = "瀹℃牳鑼冨洿")
+ private String scope;
+
+ @Schema(description = "瀹℃牳璐d换鍒�")
+ private String responsible;
+
+ @Schema(description = "瀹℃牳缁勯暱")
+ private String leader;
+
+ @Schema(description = "瀹℃牳鍛�")
+ private String auditor;
+
+ @Schema(description = "瀹℃牳缁勫垎宸ユ儏鍐�")
+ private String division;
+
+ @Schema(description = "瀹℃牳姒傚喌")
+ private String overview;
+
+ @Schema(description = "缁撹鎬ц瘎浠�")
+ private String conclusion;
+
+ @Schema(description = "鏀硅繘寤鸿")
+ private String suggest;
+
+ @Schema(description = "瀹屾垚绾犳鎺柦鎵�闇�鏃堕棿")
+ private String actionDate;
+
+ @Schema(description = "鎬讳綋璺熻繘纭浜�")
+ private String followUser;
+
+ @Schema(description = "鎬讳綋璺熻繘纭璁板綍")
+ private String followRecord;
+
+ @Schema(description = "鏈姤鍛婂彂鏀捐寖鍥�")
+ private String reportScope;
+
+ @Schema(description = "瀹℃牳浜篿d")
+ private Integer examineUserId;
+
+ @Schema(description = "瀹℃牳浜�")
+ private String examineUserName;
+
+ @Schema(description = "瀹℃牳鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime examineTime;
+
+ @Schema(description = "瀹℃牳鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+ private Integer examineStatus;
+
+ @Schema(description = "瀹℃牳淇℃伅")
+ private String examineRemark;
+
+ @Schema(description = "璐ㄩ噺璐熻矗浜篿d")
+ private Integer qualityUserId;
+
+ @Schema(description = "璐ㄩ噺璐熻矗浜�")
+ private String qualityUserName;
+
+ @Schema(description = "璐ㄩ噺璐熻矗浜哄~鍐欐椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime qualityTime;
+
+ @Schema(description = "璐ㄩ噺璐熻矗浜虹姸鎬�, 0 涓嶉�氳繃, 1閫氳繃")
+ private Integer qualityStatus;
+
+ @Schema(description = "璐ㄩ噺璐熻矗浜烘剰瑙�")
+ private String qualityRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageControlPlanList.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageControlPlanList.java
new file mode 100644
index 0000000..2774265
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageControlPlanList.java
@@ -0,0 +1,80 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:30
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_control_plan_list")
+@Schema(description = "閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�")
+public class ManageControlPlanList implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "浣滀笟娲诲姩")
+ @ExcelProperty("浣滀笟娲诲姩")
+ private String jobActivity;
+
+ @Schema(description = "椋庨櫓鍥犵礌绫诲埆")
+ @ExcelProperty("椋庨櫓鍥犵礌绫诲埆")
+ private String category;
+
+ @Schema(description = "椋庨櫓鍥犵礌鎻忚堪")
+ @ExcelProperty("椋庨櫓鍥犵礌鎻忚堪")
+ private String description;
+
+ @Schema(description = "鍙鑷寸殑浜嬫晠")
+ @ExcelProperty("鍙鑷寸殑浜嬫晠")
+ private String result;
+
+ @Schema(description = "鏄惁涓嶅彲鎵垮彈椋庨櫓")
+ @ExcelProperty("鏄惁涓嶅彲鎵垮彈椋庨櫓")
+ private String intolerable;
+
+ @Schema(description = "鎺у埗璁″垝")
+ @ExcelProperty("鎺у埗璁″垝")
+ private String plan;
+
+ @Schema(description = "缂栧埗id")
+ private Integer editor;
+
+ @Schema(description = "鏃ユ湡")
+ private LocalDateTime editorDate;
+
+ @Schema(description = "瀹℃壒id")
+ private Integer approval;
+
+ @Schema(description = "鏃ユ湡")
+ private LocalDateTime approvalDate;
+
+ @Schema(description = "鎵瑰噯id")
+ private Integer approve;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ private LocalDateTime approveDate;
+
+ @Schema(description = "鎵瑰噯鐘舵��1锛氶�氳繃锛�2锛氫笉閫氳繃")
+ private Integer approveStatus;
+
+ @Schema(description = "瀹℃壒鐘舵��1锛氶�氳繃锛�2锛氫笉閫氳繃")
+ private Integer approvalStatus;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentAlter.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentAlter.java
new file mode 100644
index 0000000..7832e84
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentAlter.java
@@ -0,0 +1,114 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 11:04:01
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_alter")
+@Schema(description = "鏂囦欢鍙樻洿")
+@ExcelIgnoreUnannotated
+public class ManageDocumentAlter implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鐢宠缂栧彿")
+ @ExcelProperty("鐢宠缂栧彿")
+ private String code;
+
+ @Schema(description = "鐢宠浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @TableField(select = false, exist = false)
+ @ExcelProperty("鐢宠浜�")
+ private String createUserName;
+
+ @TableField(select = false, exist = false)
+ @Schema(description = "鐢宠閮ㄩ棬")
+ private String createUserDepartLims;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鏈熸湜鍙樻洿鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @ExcelProperty("鏈熸湜鍙樻洿鏃堕棿")
+ private LocalDate expectAlterDate;
+
+ @Schema(description = "瀹為檯鍙樻洿鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @ExcelProperty("瀹為檯鍙樻洿鏃堕棿")
+ private LocalDate actuallyAlterDate;
+
+ @Schema(description = "鐘舵��")
+ @ExcelProperty("鐘舵��")
+ private String state;
+
+ @Schema(description = "瀹℃壒浜�")
+ private Integer checkUser;
+
+ @TableField(select = false, exist = false)
+ @ExcelProperty("瀹℃壒浜�")
+ private String checkUserName;
+
+ @Schema(description = "鍙樻洿璇存槑")
+ @ExcelProperty("鍙樻洿璇存槑")
+ private String alterNote;
+
+ @Schema(description = "鍙樻洿鍓嶇紪鍙�")
+ private String alterBeforeCode;
+
+ @Schema(description = "鍙樻洿鍓嶅悕绉�")
+ private String alterBeforeName;
+
+ @Schema(description = "鍙樻洿鍓嶇増鏈�")
+ private String alterBeforeVersion;
+
+ @Schema(description = "鍙樻洿鍚庣紪鍙�")
+ private String alterAfterCode;
+
+ @Schema(description = "鍙樻洿鍚庡悕绉�")
+ private String alterAfterName;
+
+ @Schema(description = "鍙樻洿鍚庣増鏈�")
+ private String alterAfterVersion;
+
+ @Schema(description = "鍙樻洿鍚庨檮浠�")
+ private String alterAfterUrl;
+
+ @Schema(description = "鍙樻洿鍚庨檮浠�")
+ @TableField(select = false,exist = false)
+ private MultipartFile file;
+
+ @Schema(description = "鍓嶄竴鐗堟湰澶勭悊鏂瑰紡")
+ private String method;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentCancel.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentCancel.java
new file mode 100644
index 0000000..665557e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentCancel.java
@@ -0,0 +1,103 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 02:37:35
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_cancel")
+@Schema(description = "鏂囦欢浣滃簾")
+@ExcelIgnoreUnannotated
+public class ManageDocumentCancel implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鐢宠浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鐢宠浜�")
+ @TableField(select = false,exist = false)
+ @ExcelProperty("鐢宠浜�")
+ private String createUserName;
+
+ @Schema(description = "鐢宠浜�")
+ @TableField(select = false,exist = false)
+ private String createUserDepartLims;
+
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+
+ @ExcelProperty("鏂囦欢缂栧彿")
+ private String documentCode;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String name;
+
+ @Schema(description = "鏂囦欢鐗堟湰")
+ private String version;
+
+ @Schema(description = "鏂囦欢鐘舵��")
+ private String documentState;
+
+ @Schema(description = "浣滃簾鏂瑰紡")
+ private String method;
+
+ @Schema(description = "浣滃簾璇存槑")
+ @ExcelProperty("浣滃簾璇存槑")
+ private String cancelNote;
+
+ @Schema(description = "瀹℃壒浜�")
+ private Integer checkUser;
+
+ @ExcelProperty("瀹℃壒浜�")
+ @TableField(select = false, exist = false)
+ private String checkUserName;
+
+ @Schema(description = "鏈熸湜浣滃簾鏃堕棿")
+ @ExcelProperty("鏈熸湜浣滃簾鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate expectCancelDate;
+
+ @Schema(description = "瀹為檯浣滃簾鏃ユ湡")
+ @ExcelProperty("瀹為檯浣滃簾鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate actuallyCancelDate;
+
+ @Schema(description = "浣滃簾鐘舵��")
+ @ExcelProperty("浣滃簾鐘舵��")
+ private String state;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentControlled.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentControlled.java
new file mode 100644
index 0000000..5255437
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentControlled.java
@@ -0,0 +1,92 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 02:54:44
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_controlled")
+@Schema(description = "鏂囦欢鍙楁帶")
+public class ManageDocumentControlled implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鐢宠鏂囦欢缂栧彿")
+ private String documentCode;
+
+ @Schema(description = "鏂囦欢绫诲埆")
+ private String type;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String name;
+
+ @Schema(description = "鏂囦欢鐗堟湰")
+ private String version;
+
+ @Schema(description = "浣滆��")
+ private String writer;
+
+ @Schema(description = "鎻愪氦鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate submitDate;
+
+ @Schema(description = "璇存槑")
+ private String instructions;
+
+ @Schema(description = "鐢宠鐘舵��")
+ private String state;
+
+ @Schema(description = "闄勪欢鍦板潃")
+ private String url;
+
+ @Schema(description = "璐d换浜�")
+ private Integer dutyUser;
+
+ @TableField(select = false,exist = false)
+ private String dutyUserName;
+
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @TableField(select = false, exist = false)
+ private String createUserName;
+
+ @Schema(description = "鐢宠閮ㄩ棬")
+ @TableField(select = false, exist = false)
+ private String createUserDepartLims;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(select = false, exist = false)
+ private MultipartFile file;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentIssueRecycle.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentIssueRecycle.java
new file mode 100644
index 0000000..eecd441
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentIssueRecycle.java
@@ -0,0 +1,108 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 09:18:24
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_issue_recycle")
+@Schema(description = "鏂囦欢鍙戞斁鍥炴敹")
+public class ManageDocumentIssueRecycle implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+ @ExcelProperty(value = "鏂囦欢缂栧彿")
+ private String documentCode;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ @ExcelProperty(value = "鏂囦欢鍚嶇О")
+ private String name;
+
+ @Schema(description = "鏂囦欢鐗堟湰")
+ @ExcelProperty(value = "鏂囦欢鐗堟湰")
+ private String version;
+
+ @Schema(description = "鐘舵��")
+ @ExcelProperty(value = "鐘舵��")
+ private String state;
+
+ @Schema(description = "鏂囦欢鐘舵��")
+ @ExcelProperty(value = "鏂囦欢鐘舵��")
+ private String documentState;
+
+ @Schema(description = "鍙戞斁缂栧彿")
+ @ExcelProperty(value = "鍙戞斁缂栧彿")
+ private String issueCode;
+
+ @Schema(description = "鍙戞斁浜�")
+ private Integer issueUser;
+
+ @Schema(description = "鍙戞斁鏃ユ湡")
+ @ExcelProperty(value = "鍙戞斁鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate issueDate;
+
+ @Schema(description = "鍙戞斁璇存槑")
+ private String issueNote;
+
+ @Schema(description = "鎺ユ敹浜�")
+ private Integer receiveUser;
+
+ @Schema(description = "鎺ユ敹鏃堕棿")
+ private LocalDate receiveDate;
+
+ @Schema(description = "鍥炴敹缂栧彿")
+ private String recycleCode;
+
+ @Schema(description = "鍥炴敹浜�")
+ private Integer recycleUser;
+
+ @Schema(description = "鍥炴敹鏃ユ湡")
+ @ExcelProperty(value = "鍥炴敹鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate recycleDate;
+
+ @Schema(description = "鍥炴敹璇存槑")
+ private String recycleNote;
+
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "闄勪欢")
+ private String url;
+
+ @TableField(select = false,exist = false)
+ private MultipartFile file;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentList.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentList.java
new file mode 100644
index 0000000..26d3dde
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageDocumentList.java
@@ -0,0 +1,80 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 11:08:11
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_document_list")
+@Schema(description = "鏂囦欢娓呭崟")
+@ExcelIgnoreUnannotated
+public class ManageDocumentList implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+ @ExcelProperty(value = "鏂囦欢缂栧彿")
+ private String documentCode;
+
+ @Schema(description = "绫诲埆")
+ @ExcelProperty(value = "绫诲埆")
+ private String type;
+
+ @Schema(description = "鍚嶇О")
+ @ExcelProperty(value = "鍚嶇О")
+ private String name;
+
+ @Schema(description = "鏂囦欢鐗堟湰")
+ @ExcelProperty(value = "鏂囦欢鐗堟湰")
+ private String version;
+
+ @Schema(description = "浣滆��")
+ @ExcelProperty(value = "浣滆��")
+ private String writer;
+
+ @Schema(description = "鐢熸晥鏃ユ湡")
+ @ExcelProperty(value = "鐢熸晥鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate effectiveDate;
+
+ @Schema(description = "鏂囦欢鐘舵��")
+ @ExcelProperty(value = "鏂囦欢鐘舵��")
+ private String state;
+
+ @Schema(description = "闄勪欢鍦板潃")
+ private String url;
+
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeeting.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeeting.java
new file mode 100644
index 0000000..59ab91c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeeting.java
@@ -0,0 +1,53 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:33:47
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_meeting")
+@Schema(description = "")
+public class ManageMeeting implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "浼氳鏃堕棿")
+ private LocalDateTime meetingTime;
+
+ @Schema(description = "浼氳鍦扮偣")
+ private String place;
+
+ @Schema(description = "涓绘寔浜�")
+ private String compere;
+
+ @Schema(description = "浼氳鍐呭鎽樿")
+ private String content;
+
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeetingParticipants.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeetingParticipants.java
new file mode 100644
index 0000000..4e382ce
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageMeetingParticipants.java
@@ -0,0 +1,53 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:34:27
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_meeting_participants")
+@Schema(description = "")
+public class ManageMeetingParticipants implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鍙備細浜哄憳")
+ private Integer participants;
+
+ @TableField(select = false,exist = false)
+ private String userName;
+
+ @Schema(description = "閮ㄩ棬")
+ private String department;
+
+ @Schema(description = "浼氳id")
+ private Integer meetingId;
+
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordAudit.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordAudit.java
new file mode 100644
index 0000000..0db259b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordAudit.java
@@ -0,0 +1,133 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 10:29:18
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_audit")
+@Schema(description = "鏂囦欢淇鐢宠瀹℃壒璁板綍")
+public class ManageRecordAudit implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+ private String documentCode;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String documentName;
+
+ @Schema(description = "绔犺妭鍙�")
+ private String capter;
+
+ @Schema(description = "椤电爜")
+ private String pages;
+
+ @Schema(description = "淇娆℃暟")
+ private Integer number;
+
+ @Schema(description = "淇敼鍓嶇増鏈彿")
+ private String beforeVersion;
+
+ @Schema(description = "淇敼鍚庣増鏈彿")
+ private String afterVersion;
+
+ @Schema(description = "淇敼鍐呭")
+ private String alterThing;
+
+ @Schema(description = "淇浜�")
+ private Integer alterUser;
+
+ @TableField(select = false, exist = false)
+ private String alterUserName;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUser;
+
+ @TableField(select = false, exist = false)
+ private String ratifyUserName;
+
+ //鎵瑰噯浜虹鍚�
+ @TableField(select = false, exist = false)
+ private String ratifyUserUrl;
+
+ @Schema(description = "鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate date;
+
+ @Schema(description = "鐢宠浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ //鐢宠浜�
+ @TableField(select = false, exist = false)
+ private String createUserName;
+
+ //鐢宠閮ㄩ棬
+ @TableField(select = false, exist = false)
+ private String createUserDepart;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鐢宠鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍙樺寲鍘熷洜")
+ private String reason;
+
+ @Schema(description = "鍘熷垎鍙戦儴闂�")
+ private String beforeDepart;
+
+ @Schema(description = "淇鍚庡垎鍙戦儴闂�")
+ private String afterDepart;
+
+ @Schema(description = "鐢宠閮ㄩ棬涓荤鎰忚")
+ private String applicant;
+
+ @Schema(description = "鍘熷埗瀹氶儴闂ㄦ剰瑙�")
+ private String formulation;
+
+ @Schema(description = "鍘熷鏍搁儴闂ㄦ剰瑙�")
+ private String audit;
+
+ @Schema(description = "淇浣滃簾")
+ private String method;
+
+
+ @Schema(description = "鍘熼檮浠�")
+ private String beforeUrl;
+
+ @Schema(description = "淇鍚庨檮浠�")
+ private String afterUrl;
+
+ @TableField(select = false, exist = false)
+ private MultipartFile file;
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCancel.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCancel.java
new file mode 100644
index 0000000..802a0e2
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCancel.java
@@ -0,0 +1,80 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 01:27:22
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_cancel")
+@Schema(description = "浣滃簾鏂囦欢閿�榄傝褰�")
+public class ManageRecordCancel implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+
+ private String documentCode;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+
+ private String documentName;
+
+ @Schema(description = "鏁伴噺")
+ private Integer qty;
+
+ @Schema(description = "閿�姣佸師鍥�")
+ private String reason;
+
+ @Schema(description = "鐢宠浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @TableField(select = false,exist = false)
+ private String createUserName;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鐢宠鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUser;
+
+ @TableField(select = false,exist = false)
+ private String ratifyUserName;
+
+ private String ratifyState;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate ratifyTime;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCheck.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCheck.java
new file mode 100644
index 0000000..2f1de47
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordCheck.java
@@ -0,0 +1,77 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍)
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:31:36
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_check")
+@Schema(description = "鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍)")
+public class ManageRecordCheck implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+
+ private String documentName;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+
+ private String documentCode;
+
+ @Schema(description = "鐗�/娆�")
+ private String documentVersion;
+
+ @Schema(description = "缂栧埗浜�")
+ private Integer writeUser;
+
+ @TableField(select = false,exist = false)
+ private String writeUserName;
+
+ @Schema(description = "瀹℃牳浜�")
+ private Integer checkUser;
+
+ @TableField(select = false,exist = false)
+ private String checkUserName;
+
+ @Schema(description = "瀹℃牳鐘舵��")
+ private String checkState;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUser;
+
+ @TableField(select = false,exist = false)
+ private String ratifyUserName;
+
+ @Schema(description = "鎵瑰噯鐘舵��")
+ private String ratifyState;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate ratifyDate;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervals.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervals.java
new file mode 100644
index 0000000..cf4ebb8
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervals.java
@@ -0,0 +1,62 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 10:54:31
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_intervals")
+@Schema(description = "鏂囦欢瀹氭湡瀹℃煡璁板綍")
+public class ManageRecordIntervals implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String documentName;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+ private String documentCode;
+
+ @Schema(description = "鐗堟湰鍙�")
+ private String documentVersion;
+
+ @Schema(description = "淇鍙�")
+ private String revision;
+
+ @Schema(description = "閫傚疁鎬�")
+ private String suitability;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "澶栭敭鍏宠仈,澶栨潵鏂囦欢纭鍘嗗彶璁板綍id")
+ private Integer recordIntervalsTotalId;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervalsTotal.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervalsTotal.java
new file mode 100644
index 0000000..6f0f5cf
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIntervalsTotal.java
@@ -0,0 +1,75 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 01:12:11
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_intervals_total")
+@Schema(description = "鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃")
+public class ManageRecordIntervalsTotal implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUser;
+
+ @TableField(select = false,exist = false)
+ private String ratifyUserName;
+
+ @Schema(description = "鎵瑰噯缁撴灉")
+ private String ratifyState;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate ratifyDate;
+
+ @Schema(description = "鎵瑰噯浜虹鍚�")
+ private String ratifyUrl;
+
+ @Schema(description = "鎷熷埗浜�")
+ private Integer submitUser;
+
+ @TableField(select = false,exist = false)
+ private String submitUserName;
+
+ @Schema(description = "鎷熷埗浜虹鍚�")
+ private String submitUrl;
+
+ @Schema(description = "鎷熷埗鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate submitDate;
+
+ @Schema(description = "骞翠唤")
+ private String year;
+
+ @Schema(description = "鎬绘暟閲�")
+ private Integer totalNum;
+
+ @Schema(description = "鐢熸垚鐢宠琛ㄧ殑璺緞")
+ private String url;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIssueRecycle.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIssueRecycle.java
new file mode 100644
index 0000000..5426343
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordIssueRecycle.java
@@ -0,0 +1,77 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 09:11:05
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_issue_recycle")
+@Schema(description = "鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍")
+public class ManageRecordIssueRecycle implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+ private String documentCode;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String documentName;
+
+ @Schema(description = "鐗堝彿")
+ private String documentVersion;
+
+ @Schema(description = "浠芥暟")
+ private String pages;
+
+ @Schema(description = "鏂囦欢绫诲埆")
+ private String documentType;
+
+ @Schema(description = "鍒嗗彂鍙�")
+ private String number;
+
+ @Schema(description = "鎺ユ敹閮ㄩ棬")
+ private String departLims;
+
+ @Schema(description = "鎺ュ彈浜�")
+ private Integer receiveUser;
+
+ @TableField(select = false,exist = false)
+ private String receiveUserName;
+
+ @Schema(description = "鎺ュ彈鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate receiveDate;
+
+ @Schema(description = "绛炬敹浜�")
+ private Integer signedUser;
+
+ @TableField(select = false,exist = false)
+ private String signedUserName;
+
+ @Schema(description = "绛炬敹鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate signedDate;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordTotal.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordTotal.java
new file mode 100644
index 0000000..ab1134e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordTotal.java
@@ -0,0 +1,77 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:30:08
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_total")
+@Schema(description = "澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃")
+public class ManageRecordTotal implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUser;
+
+ @TableField(select = false,exist = false)
+ private String ratifyUserName;
+
+ @Schema(description = "鎵瑰噯缁撴灉")
+ private String ratifyState;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate ratifyDate;
+
+ @Schema(description = "鎵瑰噯浜虹鍚�")
+ private String ratifyUrl;
+
+ @Schema(description = "鎷熷埗浜�")
+ private Integer submitUser;
+
+ @TableField(select = false,exist = false)
+ private String submitUserName;
+
+ @Schema(description = "鎷熷埗浜虹鍚�")
+ private String submitUrl;
+
+ @Schema(description = "鎷熷埗鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate submitDate;
+
+ @Schema(description = "骞翠唤")
+
+ private String year;
+
+ @Schema(description = "鎬绘暟閲�")
+
+ private Integer totalNum;
+
+ @Schema(description = "鐢熸垚鐢宠琛ㄧ殑璺緞")
+ private String url;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordVerify.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordVerify.java
new file mode 100644
index 0000000..74899e7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRecordVerify.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:29:44
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_record_verify")
+@Schema(description = "澶栨潵鏂囦欢纭璁板綍")
+public class ManageRecordVerify implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "澶栨潵鏂囦欢鍚嶇О")
+
+ private String documentName;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+
+ private String documentCode;
+
+ @Schema(description = "鏍囧噯瑙勮寖鍚嶇О")
+ private String standardName;
+
+ @Schema(description = "鏍囧噯鍙�")
+ private String standardCode;
+
+ @Schema(description = "鐢熸晥鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate effectiveDate;
+
+ @Schema(description = "浣滃簾鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate cancelDate;
+
+ @Schema(description = "澶囨敞")
+ private String note;
+
+ @Schema(description = "澶栭敭鍏宠仈,澶栨潵鏂囦欢纭鍘嗗彶璁板綍id")
+ private Integer manageRecordTotalId;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgram.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgram.java
new file mode 100644
index 0000000..842ffd5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgram.java
@@ -0,0 +1,80 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 03:05:42
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_review_program")
+@Schema(description = "")
+public class ManageReviewProgram implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "璇勫鏃堕棿")
+ private LocalDateTime reviewTime;
+
+ @Schema(description = "璇勫鍦扮偣")
+ private String judgingLocation;
+
+ @Schema(description = "璇勫鐩殑")
+ private String judgingPurpose;
+
+ @Schema(description = "璇勫鏂瑰紡")
+ private String judgingMethod;
+
+ @Schema(description = "鍙傚姞浜哄憳")
+ private String participants;
+
+ @Schema(description = "璇勫鑼冨洿")
+ private String judgingScope;
+
+ @Schema(description = "璇勫渚濇嵁")
+ private String judgingBasis;
+
+ @Schema(description = "璇勫涓昏鍐呭")
+ private String mainContext;
+
+ @Schema(description = "鍑嗗宸ヤ綔瑕佹眰")
+ private String preparationRequirements;
+
+ @Schema(description = "缂栧埗")
+ private String editor;
+
+ @Schema(description = "缂栧埗鏃ユ湡")
+ private LocalDateTime editorDate;
+
+ @Schema(description = "鎵瑰噯")
+ private String approve;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ private LocalDateTime approveDate;
+
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgramFile.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgramFile.java
new file mode 100644
index 0000000..aad7a76
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewProgramFile.java
@@ -0,0 +1,49 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 04:15:47
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_review_program_file")
+@Schema(description = "")
+public class ManageReviewProgramFile implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "璁″垝琛↖D")
+ private Integer reviewId;
+
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ private String url;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewReport.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewReport.java
new file mode 100644
index 0000000..0e08579
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageReviewReport.java
@@ -0,0 +1,101 @@
+package com.ruoyi.manage.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 04:44:39
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_review_report")
+@Schema(description = "绠$悊璇勫鎶ュ憡")
+public class ManageReviewReport implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鐩殑")
+ private String objective;
+
+ @Schema(description = "鍦扮偣")
+ private String place;
+
+ @Schema(description = "涓绘寔浜�")
+ private String compere;
+
+ @Schema(description = "璁板綍浜�")
+ private String recordPeople;
+
+ @Schema(description = "鏃ユ湡")
+ private LocalDateTime date;
+
+ @Schema(description = "椤垫")
+ private Integer page;
+
+ @Schema(description = "璇勫鏂瑰紡")
+ private String judgingMethod;
+
+ @Schema(description = "璇勫渚濇嵁")
+ private String reviewBasis;
+
+ @Schema(description = "鍑哄腑浜哄憳")
+ private String attendess;
+
+ @Schema(description = "璇勫杈撳叆鎯呭喌")
+ private String reviewInputs;
+
+ @Schema(description = "璇勫杩囩▼姒傚喌")
+ private String reviewProcess;
+
+ @Schema(description = "涓昏璁姒傝堪")
+ private String mainTopic;
+
+ @Schema(description = "浜嬮」")
+ private String matters;
+
+ @Schema(description = "璐熻矗浜�")
+ private String head;
+
+ @Schema(description = "瀹屾垚鏃ユ湡")
+ private LocalDateTime completionDate;
+
+ @Schema(description = "璺熻釜纭浜�")
+ private String trackingConfirmed;
+
+ @Schema(description = "璺熻釜鎯呭喌纭璁板綍")
+ private String follerUp;
+
+ @Schema(description = "浣撶郴璇勪环")
+ private String overallEvaluation;
+
+ @Schema(description = "瀹℃牳")
+ private String audit;
+
+ @Schema(description = "鎵瑰噯")
+ private String approval;
+
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRiskAssessmentResults.java b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRiskAssessmentResults.java
new file mode 100644
index 0000000..b472ba1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/pojo/ManageRiskAssessmentResults.java
@@ -0,0 +1,102 @@
+package com.ruoyi.manage.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:51
+ */
+@Getter
+@Setter
+@TableName("cnas_manage_risk_assessment_results")
+@Schema(description = "鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃")
+public class ManageRiskAssessmentResults implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ @ExcelIgnore
+ private Integer id;
+
+ @Schema(description = "鍦扮偣/娲诲姩")
+ @ExcelProperty(value = "鍦扮偣/娲诲姩", index = 0)
+ private String venue;
+
+ @Schema(description = "鍗遍櫓鍥犵礌")
+ @ExcelProperty(value = "鍗遍櫓鍥犵礌", index = 1)
+ private String hazard;
+
+ @Schema(description = "鍙兘瀵艰嚧鐨勪簨鏁�")
+ @ExcelProperty(value = "鍙兘瀵艰嚧鐨勪簨鏁�", index = 2)
+ private String accidents;
+
+ @Schema(description = "瀵逛汉鍙兘閫犳垚鐨勫嵄瀹�")
+ @ExcelProperty(value = "瀵逛汉鍙兘閫犳垚鐨勫嵄瀹�", index = 3)
+ private String injury;
+
+ @Schema(description = "椋庨櫓璇勪环")
+ @ExcelProperty(value = {"椋庨櫓璇勪环", "L"})
+ private String riskL;
+
+ @Schema(description = "椋庨櫓璇勪环")
+ @ExcelProperty(value = {"椋庨櫓璇勪环", "E"})
+ private String riskE;
+
+ @Schema(description = "椋庨櫓璇勪环")
+ @ExcelProperty(value = {"椋庨櫓璇勪环", "C"})
+ private String riskC;
+
+ @Schema(description = "椋庨櫓璇勪环")
+ @ExcelProperty(value = {"椋庨櫓璇勪环", "D"})
+ private String riskD;
+
+ @Schema(description = "椋庨櫓绛夌骇")
+ @ExcelProperty(value = "椋庨櫓绛夌骇", index = 8)
+ private String level;
+
+ @Schema(description = "璇勪环缁撹")
+ @ExcelProperty(value = "璇勪环缁撹", index = 9)
+ private String conclusion;
+
+ @Schema(description = "鎺у埗鎺柦")
+ @ExcelProperty(value = "鎺у埗鎺柦", index = 10)
+ private String measures;
+
+ @Schema(description = "缂栧埗id")
+ private Integer editor;
+
+ @Schema(description = "缂栧埗鏃ユ湡")
+ private LocalDateTime editorDate;
+
+ @Schema(description = "瀹℃壒浜篿d")
+ private Integer approval;
+
+ @Schema(description = "瀹℃壒鏃ユ湡")
+ private LocalDateTime approvalDate;
+
+ @Schema(description = "鎵瑰噯浜篿d")
+ private Integer approve;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ private LocalDateTime approveDate;
+
+ @Schema(description = "鎵瑰噯鐘舵��1锛氶�氳繃锛�2锛氫笉閫氳繃")
+ private Integer approveStatus;
+
+ @Schema(description = "瀹℃壒鐘舵��1锛氶�氳繃锛�2锛氫笉閫氳繃")
+ private Integer approvalStatus;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/schedule/ManageRecordTotalSchedule.java b/cnas-manage/src/main/java/com/ruoyi/manage/schedule/ManageRecordTotalSchedule.java
new file mode 100644
index 0000000..34457f7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/schedule/ManageRecordTotalSchedule.java
@@ -0,0 +1,36 @@
+package com.ruoyi.manage.schedule;
+
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import com.ruoyi.manage.service.ManageRecordIntervalsTotalService;
+import com.ruoyi.manage.service.ManageRecordTotalService;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import jakarta.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+@Component
+public class ManageRecordTotalSchedule {
+
+ @Resource
+ private ManageRecordTotalService manageRecordTotalService;
+
+ @Resource
+ private ManageRecordIntervalsTotalService manageRecordIntervalsTotalService;
+
+ @Scheduled(cron = "0 0 2 1 1 ?") //姣忓勾1鏈�1鍙�2鐐�
+ public void manageRecordTotal() {
+ ManageRecordTotal manageRecordTotal = new ManageRecordTotal();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
+ Calendar calendar = Calendar.getInstance();
+ String formattedDate = sdf.format(calendar.getTime());
+ manageRecordTotal.setYear(formattedDate);
+ manageRecordTotalService.save(manageRecordTotal);
+
+ ManageRecordIntervalsTotal manageRecordIntervalsTotal = new ManageRecordIntervalsTotal();
+ manageRecordIntervalsTotal.setYear(formattedDate);
+ manageRecordIntervalsTotalService.save(manageRecordIntervalsTotal);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ClientSatisfactionService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ClientSatisfactionService.java
new file mode 100644
index 0000000..4f8c4e9
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ClientSatisfactionService.java
@@ -0,0 +1,59 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+public interface ClientSatisfactionService extends IService<ClientSatisfaction> {
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+ * @param page
+ * @param clientSatisfaction
+ * @return
+ */
+ IPage<ClientSatisfaction> pageClientSatisfaction(Page page, ClientSatisfaction clientSatisfaction);
+
+ /**
+ * 鏂板瀹㈡埛鍒嗘瀽闄勪欢
+ * @param file
+ * @return
+ */
+ boolean uploadAnalyseFile(MultipartFile file);
+
+ /**
+ * 鏌ヨ瀹㈡埛鍒嗘瀽闄勪欢
+ * @param page
+ * @param analyseFile
+ * @return
+ */
+ IPage<ClientSatisfactionAnalyseFile> pageAnalyseFile(Page page, ClientSatisfactionAnalyseFile analyseFile);
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹀鍑�
+ *
+ * @param clientSatisfactionId
+ * @param response
+ */
+ void exportWordClientSatisfaction(Integer clientSatisfactionId, HttpServletResponse response);
+
+ /**
+ * 纭瀹㈡埛婊℃剰搴�
+ *
+ * @param clientSatisfaction 瑕佷慨鏀瑰鎴锋弧鎰忓害鐨勭姸鎬佸璞�
+ * @param userId 淇敼浜篿d
+ */
+ void confirmClientSatisfaction(ClientSatisfaction clientSatisfaction, Integer userId);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckDetailService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckDetailService.java
new file mode 100644
index 0000000..acac9da
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckDetailService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+
+/**
+ * 鍐呭妫�鏌ヨ鎯呰〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+public interface InternalCheckDetailService extends IService<InternalCheckDetail> {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckService.java
new file mode 100644
index 0000000..4f68da1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCheckService.java
@@ -0,0 +1,69 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.InternalCheckDto;
+import com.ruoyi.manage.pojo.InternalCheck;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+public interface InternalCheckService extends IService<InternalCheck> {
+
+ /**
+ * 鍐呭妫�鏌ュ垎椤垫煡璇�
+ * @param page
+ * @param internalCheck
+ * @return
+ */
+ IPage<InternalCheckDto> pageInternalCheck(Page page, InternalCheck internalCheck);
+
+ /**
+ * 鍐呭妫�鏌ユ柊澧�
+ * @param internalCheck
+ * @return
+ */
+ boolean addInternalCheck(InternalCheckDto internalCheck);
+
+ /**
+ * 鍐呭妫�鏌ヤ慨鏀�
+ * @param internalCheck
+ * @return
+ */
+ boolean updateInternalCheck(InternalCheckDto internalCheck);
+
+ /**
+ * 鍐呭妫�鏌ュ垹闄�
+ * @param checkId
+ * @return
+ */
+ boolean delInternalCheck(Integer checkId);
+
+ /**
+ * 鍐呭妫�鏌ユ煡鐪嬭鎯�
+ * @param checkId
+ * @return
+ */
+ InternalCheckDto getInternalCheckOne(Integer checkId);
+
+ /**
+ * 鍐呭妫�鏌ユ壒鍑�
+ * @param internalCheck
+ * @return
+ */
+ boolean ratifyInternalCheck(InternalCheckDto internalCheck);
+
+ /**
+ * 瀵煎嚭鍐呭妫�鏌�
+ * @param checkId
+ * @param response
+ */
+ void exportInternalCheck(Integer checkId, HttpServletResponse response);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectFileService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectFileService.java
new file mode 100644
index 0000000..4d7b983
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectFileService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳鎺柦闄勪欢琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:38
+ */
+public interface InternalCorrectFileService extends IService<InternalCorrectFile> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectService.java
new file mode 100644
index 0000000..0995a22
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalCorrectService.java
@@ -0,0 +1,66 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalCorrect;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:15
+ */
+public interface InternalCorrectService extends IService<InternalCorrect> {
+
+ /**
+ * 鏂板鍐呭绠$悊绾犳澶勭悊淇℃伅
+ * @param InternalAccording
+ * @return
+ */
+ boolean addInternalCorrect(InternalCorrect InternalAccording);
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳澶勭悊
+ * @param correctId
+ * @return
+ */
+ InternalCorrect getInternalCorrect(Integer correctId);
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃
+ * @param page
+ * @param detailsCorrect
+ * @return
+ */
+ IPage<InternalCorrect> pageInternalCorrect(Page page, InternalCorrect detailsCorrect);
+
+ /**
+ * 鏂板鍐呭绠$悊绾犳鎺柦闄勪欢
+ * @param correctId
+ * @param file
+ * @return
+ */
+ boolean uploadInternalCorrectFile(Integer correctId, MultipartFile file);
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢
+ * @param correctId
+ * @return
+ */
+ List<InternalCorrectFile> getInternalCorrectFileList(Integer correctId);
+
+ /**
+ * 瀵煎嚭绾犳鎺柦
+ * @param correctId
+ * @param response
+ */
+ void exportInternalCorrect(Integer correctId, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementDetailService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementDetailService.java
new file mode 100644
index 0000000..fe6b57f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementDetailService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+
+/**
+ * 鍐呭瀹炴柦璁″垝璇︽儏
+ *
+ * @author makejava
+ * @since 2024-11-11
+ */
+public interface InternalImplementDetailService extends IService<InternalImplementDetail> {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementService.java
new file mode 100644
index 0000000..7431d80
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalImplementService.java
@@ -0,0 +1,69 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.InternalImplementDto;
+import com.ruoyi.manage.pojo.InternalImplement;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+public interface InternalImplementService extends IService<InternalImplement> {
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalImplement
+ * @return
+ */
+ IPage<InternalImplementDto> pageInternalImplement(Page page, InternalImplement internalImplement);
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鏂板
+ * @param internalImplement
+ * @return
+ */
+ boolean addInternalImplement(InternalImplementDto internalImplement);
+
+ /**
+ * 鍐呭瀹炴柦璁″垝淇敼
+ * @param internalImplement
+ * @return
+ */
+ boolean updateInternalImplement(InternalImplementDto internalImplement);
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鍒犻櫎
+ * @param implementId
+ * @return
+ */
+ boolean delInternalImplement(Integer implementId);
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鏌ョ湅璇︽儏
+ * @param implementId
+ * @return
+ */
+ InternalImplementDto getInternalImplementOne(Integer implementId);
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鎵瑰噯
+ * @param internalImplement
+ * @return
+ */
+ boolean ratifyInternalImplement(InternalImplementDto internalImplement);
+
+ /**
+ * 瀵煎嚭鍐呭瀹炴柦璁″垝
+ * @param implementId
+ * @param response
+ */
+ void exportInternalImplement(Integer implementId, HttpServletResponse response);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingDetailService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingDetailService.java
new file mode 100644
index 0000000..85b49a5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+
+/**
+ * <p>
+ * 鍐呭浼氳璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:56:13
+ */
+public interface InternalMeetingDetailService extends IService<InternalMeetingDetail> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingService.java
new file mode 100644
index 0000000..9abd02f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalMeetingService.java
@@ -0,0 +1,63 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.InternalMeetingDto;
+import com.ruoyi.manage.pojo.InternalMeeting;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:50:44
+ */
+public interface InternalMeetingService extends IService<InternalMeeting> {
+
+ /**
+ * 鍐呭浼氳鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalMeeting
+ * @return
+ */
+ IPage<InternalMeetingDto> pageInternalMeeting(Page page, InternalMeeting internalMeeting);
+
+ /**
+ * 鍐呭浼氳鏂板
+ * @param internalMeeting
+ * @return
+ */
+ boolean addInternalMeeting(InternalMeetingDto internalMeeting);
+
+ /**
+ * 鍐呭浼氳淇敼
+ * @param internalMeeting
+ * @return
+ */
+ boolean updateInternalMeeting(InternalMeetingDto internalMeeting);
+
+ /**
+ * 鍐呭浼氳鍒犻櫎
+ * @param meetingId
+ * @return
+ */
+ boolean delInternalMeeting(Integer meetingId);
+
+ /**
+ * 鍐呭浼氳鏌ョ湅璇︽儏
+ * @param meetingId
+ * @return
+ */
+ InternalMeetingDto getInternalMeetingOne(Integer meetingId);
+
+ /**
+ * 瀵煎嚭鍐呭浼氳
+ * @param meetingId
+ * @param response
+ */
+ void exportInternalMeeting(Integer meetingId, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanDetailService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanDetailService.java
new file mode 100644
index 0000000..a433943
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝璇︽儏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:28:48
+ */
+public interface InternalPlanDetailService extends IService<InternalPlanDetail> {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanService.java
new file mode 100644
index 0000000..a0deaf7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalPlanService.java
@@ -0,0 +1,77 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.InternalPlanDto;
+import com.ruoyi.manage.pojo.InternalPlan;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:27:47
+ */
+public interface InternalPlanService extends IService<InternalPlan> {
+
+ /**
+ * 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalPlan
+ * @return
+ */
+ IPage<InternalPlanDto> pageInternalPlan(Page page, InternalPlan internalPlan);
+
+ /**
+ * 鍐呭骞村害璁″垝鏂板
+ * @param internalPlan
+ * @return
+ */
+ boolean addInternalPlan(InternalPlanDto internalPlan);
+
+ /**
+ * 鍐呭骞村害璁″垝淇敼
+ * @param internalPlan
+ * @return
+ */
+ boolean updateInternalPlan(InternalPlanDto internalPlan);
+
+ /**
+ * 鍐呭骞村害璁″垝鍒犻櫎
+ * @param planId
+ * @return
+ */
+ boolean delInternalPlan(Integer planId);
+
+ /**
+ * 鍐呭骞村害璁″垝鏌ョ湅璇︽儏
+ * @param planId
+ * @return
+ */
+ InternalPlanDto getInternalPlanOne(Integer planId);
+
+ /**
+ * 鍐呭骞村害璁″垝瀹℃牳
+ * @param internalPlanDto
+ * @return
+ */
+ boolean examineInternalPlan(InternalPlanDto internalPlanDto);
+
+ /**
+ * 鍐呭骞村害璁″垝鎵瑰噯
+ * @param internalPlanDto
+ * @return
+ */
+ boolean ratifyInternalPlan(InternalPlanDto internalPlanDto);
+
+ /**
+ * 瀵煎嚭鍐呭骞村害璁″垝
+ * @param planId
+ * @param response
+ */
+ void exportInternalImplement(Integer planId, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalReportService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalReportService.java
new file mode 100644
index 0000000..91d4924
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/InternalReportService.java
@@ -0,0 +1,47 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.InternalReport;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+public interface InternalReportService extends IService<InternalReport> {
+
+ /**
+ * 鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalReport
+ * @return
+ */
+ IPage<InternalReport> pageInternalReport(Page page, InternalReport internalReport);
+
+ /**
+ * 鍐呭鎶ュ憡瀹℃牳
+ * @param internalReport
+ * @return
+ */
+ boolean ratifyInternalCheck(InternalReport internalReport);
+
+ /**
+ * 璐ㄩ噺閮ㄧ粡鐞嗗~鍐�
+ * @param internalReport
+ * @return
+ */
+ boolean qualityInternalReport(InternalReport internalReport);
+
+ /**
+ * 瀵煎嚭鍐呭鎶ュ憡
+ * @param reportId
+ * @param response
+ */
+ void exportInternalReport(Integer reportId, HttpServletResponse response);
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageControlPlanListService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageControlPlanListService.java
new file mode 100644
index 0000000..4343084
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageControlPlanListService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import com.ruoyi.manage.vo.ManageControlPlanListVo;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:30
+ */
+public interface ManageControlPlanListService extends IService<ManageControlPlanList> {
+
+ IPage<ManageControlPlanListVo> getPageList(Page page);
+
+ void exportPersonTraining(HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentAlterService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentAlterService.java
new file mode 100644
index 0000000..0f81585
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentAlterService.java
@@ -0,0 +1,36 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageDocumentAlter;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 11:04:01
+ */
+public interface ManageDocumentAlterService extends IService<ManageDocumentAlter> {
+
+ IPage<ManageDocumentAlter> pageManageDocumentAlter(Page page, ManageDocumentAlter manageDocumentAlter);
+
+ ManageDocumentAlter getManageDocumentAlter(Integer id);
+
+ int addManageDocumentAlter(ManageDocumentAlter manageDocumentAlter);
+
+ int doManageDocumentAlter(ManageDocumentAlter manageDocumentAlter);
+
+ int checkManageDocumentAlter(ManageDocumentAlter manageDocumentAlter);
+
+ void checkManageDocumentAlterPdf(Long id, HttpServletResponse response) throws Exception;
+
+ void exportManageDocumentAlter(ManageDocumentAlter manageDocumentAlter, HttpServletResponse response) throws Exception;
+
+ int delManageDocumentAlter(Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentCancelService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentCancelService.java
new file mode 100644
index 0000000..2119e54
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentCancelService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageDocumentCancel;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 02:37:35
+ */
+public interface ManageDocumentCancelService extends IService<ManageDocumentCancel> {
+
+ IPage<ManageDocumentCancel> pageManageDocumentCancel(Page page, ManageDocumentCancel manageDocumentCancel);
+
+ int addManageDocumentCancel(ManageDocumentCancel manageDocumentCancel);
+
+ int checkManageDocumentCancel(Integer id, String state);
+
+ ManageDocumentCancel getManageDocumentCancel(Integer id);
+
+ void exportManageDocumentCancel(ManageDocumentCancel manageDocumentCancel, HttpServletResponse response) throws Exception;
+
+ int delManageDocumentCancel(Integer id);
+
+ int doManageDocumentCancel(ManageDocumentCancel manageDocumentCancel);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentControlledService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentControlledService.java
new file mode 100644
index 0000000..086bbe4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentControlledService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageDocumentControlled;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 02:54:44
+ */
+public interface ManageDocumentControlledService extends IService<ManageDocumentControlled> {
+
+ IPage<ManageDocumentControlled> pageManageDocumentControlled(Page page, ManageDocumentControlled manageDocumentControlled);
+
+ int addManageDocumentControlled(ManageDocumentControlled manageDocumentControlled);
+
+ int delManageDocumentControlled(Long id);
+
+ ManageDocumentControlled getManageDocumentControlled(Long id);
+
+ int doManageDocumentControlled(ManageDocumentControlled manageDocumentControlled);
+
+ int checkManageDocumentControlled(ManageDocumentControlled manageDocumentControlled);
+
+ void checkManageDocumentControlledPdf(Long id, HttpServletResponse response) throws Exception ;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentIssueRecycleService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentIssueRecycleService.java
new file mode 100644
index 0000000..1785c79
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentIssueRecycleService.java
@@ -0,0 +1,35 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 09:18:24
+ */
+public interface ManageDocumentIssueRecycleService extends IService<ManageDocumentIssueRecycle> {
+
+ IPage<ManageDocumentIssueRecycleDto> pageManageDocumentIssueRecycle(Page page, ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto);
+
+ ManageDocumentIssueRecycleDto getManageDocumentIssueRecycle(Long id);
+
+ void exportManageDocumentIssueRecycle(ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto, HttpServletResponse response) throws Exception;
+
+ int checkManageDocumentIssueRecycle(Integer id, String documentState);
+
+ int addManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle);
+
+ int doManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle);
+
+ int delManageDocumentIssueRecycle(Long id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentListService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentListService.java
new file mode 100644
index 0000000..545f8d1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageDocumentListService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+ 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 11:08:11
+ */
+public interface ManageDocumentListService extends IService<ManageDocumentList> {
+
+ IPage<ManageDocumentList> pageManageDocumentList(Page page, ManageDocumentList manageDocumentList);
+
+ int uploadFile(Integer id, MultipartFile file);
+
+ void importExcel(List<ManageDocumentList> list);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingParticipantsService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingParticipantsService.java
new file mode 100644
index 0000000..9bb6679
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingParticipantsService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import com.ruoyi.manage.vo.MeetingParticipantsDetailsVo;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:34:27
+ */
+public interface ManageMeetingParticipantsService extends IService<ManageMeetingParticipants> {
+
+
+
+ MeetingParticipantsDetailsVo getParticipants(Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingService.java
new file mode 100644
index 0000000..43a959e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageMeetingService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.dto.ManageMeetingDto;
+import com.ruoyi.manage.pojo.ManageMeeting;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:33:47
+ */
+public interface ManageMeetingService extends IService<ManageMeeting> {
+
+ IPage<ManageMeetingDto> page(Page page, String startTime, String endTime, String place);
+
+ void addMeeting(ManageMeetingDto dto);
+
+ int modifyMeeting(ManageMeetingDto manageMeetingDto);
+
+ void exportMeeting(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordAuditService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordAuditService.java
new file mode 100644
index 0000000..2f57781
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordAuditService.java
@@ -0,0 +1,30 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 10:29:18
+ */
+public interface ManageRecordAuditService extends IService<ManageRecordAudit> {
+
+ IPage<ManageRecordAudit> pageManageRecordAudit(Page page, ManageRecordAudit manageRecordAudit);
+
+ int addManageRecordAudit(ManageRecordAudit manageRecordAudit);
+
+ int doManageRecordAudit(ManageRecordAudit manageRecordAudit);
+
+ int ratifyManageRecordAudit(Integer id);
+
+ String exportOutManageRecordAudit(ManageRecordAudit manageRecordAudit, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCancelService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCancelService.java
new file mode 100644
index 0000000..6e23947
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCancelService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordCancel;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 01:27:22
+ */
+public interface ManageRecordCancelService extends IService<ManageRecordCancel> {
+
+ IPage<ManageRecordCancel> pageManageRecordCancel(Page page, ManageRecordCancel manageRecordCancel);
+
+ int ratifyManageRecordCancel(Integer id, String ratifyState);
+
+ String exportOutManageRecordCancel(ManageRecordCancel manageRecordCancel, HttpServletResponse response);
+
+ int exportInManageRecordCancel(MultipartFile file);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCheckService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCheckService.java
new file mode 100644
index 0000000..35b526d
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordCheckService.java
@@ -0,0 +1,32 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍) 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:31:36
+ */
+public interface ManageRecordCheckService extends IService<ManageRecordCheck> {
+
+ IPage<ManageRecordCheck> pageManageRecordCheck(Page page, ManageRecordCheck manageRecordCheck);
+
+ int checkManageRecordCheck(Integer id, String checkState);
+
+ int ratifyManageRecordCheck(Integer id, String ratifyState);
+
+ String exportOutManageRecordCheck(ManageRecordCheck manageRecordCheck, HttpServletResponse response);
+
+ int exportInManageRecordCheck(MultipartFile file);
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsService.java
new file mode 100644
index 0000000..7e7f847
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 10:54:31
+ */
+public interface ManageRecordIntervalsService extends IService<ManageRecordIntervals> {
+
+ IPage<ManageRecordIntervals> pageManageRecordIntervals(Page page, ManageRecordIntervals manageRecordIntervals);
+
+ String exportOutManageRecordIntervals(ManageRecordIntervals manageRecordIntervals, HttpServletResponse response);
+
+ int exportInManageRecordIntervals(MultipartFile file);
+
+ int addManageRecordIntervals(ManageRecordIntervals manageRecordIntervals);
+
+ int delManageRecordIntervals(Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsTotalService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsTotalService.java
new file mode 100644
index 0000000..c40a76f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIntervalsTotalService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 01:12:11
+ */
+public interface ManageRecordIntervalsTotalService extends IService<ManageRecordIntervalsTotal> {
+
+ IPage<ManageRecordIntervalsTotal> pageManageRecordIntervalsTotal(Page page, ManageRecordIntervalsTotal manageRecordIntervalsTotal);
+
+ int submitManageRecordIntervalsTotal(Integer id);
+
+ int ratifyManageRecordIntervalsTotal(Integer id, String ratifyState);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIssueRecycleService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIssueRecycleService.java
new file mode 100644
index 0000000..b597c2f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordIssueRecycleService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 09:11:05
+ */
+public interface ManageRecordIssueRecycleService extends IService<ManageRecordIssueRecycle> {
+
+ IPage<ManageRecordIssueRecycle> pageManageRecordIssueRecycle(Page page, ManageRecordIssueRecycle manageRecordIssueRecycle);
+
+ String exportOutManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle, HttpServletResponse response);
+
+ int exportInManageRecordIssueRecycle(MultipartFile file);
+
+ int addManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle);
+
+ int doManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordTotalService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordTotalService.java
new file mode 100644
index 0000000..26b994b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordTotalService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:30:08
+ */
+public interface ManageRecordTotalService extends IService<ManageRecordTotal> {
+
+ IPage<ManageRecordTotal> pageManageRecordTotal(Page page, ManageRecordTotal manageRecordTotal);
+
+ int submitManageRecordTotal(Integer id);
+
+ int ratifyManageRecordTotal(Integer id, String ratifyState);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordVerifyService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordVerifyService.java
new file mode 100644
index 0000000..effbc17
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRecordVerifyService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:29:44
+ */
+public interface ManageRecordVerifyService extends IService<ManageRecordVerify> {
+
+ IPage<ManageRecordVerify> pageManageRecordVerify(Page page, ManageRecordVerify manageRecordVerify);
+
+ int addManageRecordVerify(ManageRecordVerify manageRecordVerify);
+
+ int delManageRecordVerify(Integer id);
+
+ int exportManageRecordVerify(MultipartFile file);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramFileService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramFileService.java
new file mode 100644
index 0000000..f3b88d1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramFileService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageReviewProgramFile;
+import com.ruoyi.manage.vo.ReviewProgramDetailsVo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 04:15:47
+ */
+public interface ManageReviewProgramFileService extends IService<ManageReviewProgramFile> {
+
+ ReviewProgramDetailsVo selectFile(Integer id);
+
+
+ void addFile(MultipartFile file,Integer id);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramService.java
new file mode 100644
index 0000000..cba708f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewProgramService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 03:05:42
+ */
+public interface ManageReviewProgramService extends IService<ManageReviewProgram> {
+
+ IPage<ManageReviewProgram> page(Page page,String startTime,String endTime, String judgingLocation);
+
+ void exportReviewProgram(Integer id, HttpServletResponse response);
+
+ int addReviewProgram(ManageReviewProgram manageReviewProgram);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewReportService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewReportService.java
new file mode 100644
index 0000000..b9570b6
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageReviewReportService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageReviewReport;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 04:44:39
+ */
+public interface ManageReviewReportService extends IService<ManageReviewReport> {
+
+
+ IPage<ManageReviewReport> page(Page page, String startTime, String endTime, String place);
+
+ void exportReviewReport(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRiskAssessmentResultsService.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRiskAssessmentResultsService.java
new file mode 100644
index 0000000..5de9e3b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/ManageRiskAssessmentResultsService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:51
+ */
+public interface ManageRiskAssessmentResultsService extends IService<ManageRiskAssessmentResults> {
+
+ IPage<ManageRiskAssessmentResultsVo> getPageResults(Page page);
+
+ void exportPersonTraining(HttpServletResponse response);
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java
new file mode 100644
index 0000000..e38e930
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ClientSatisfactionServiceImpl.java
@@ -0,0 +1,188 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.dto.ClientSatisfactionDto;
+import com.ruoyi.manage.mapper.ClientSatisfactionAnalyseFileMapper;
+import com.ruoyi.manage.mapper.ClientSatisfactionMapper;
+import com.ruoyi.manage.pojo.ClientSatisfaction;
+import com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile;
+import com.ruoyi.manage.service.ClientSatisfactionService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+
+
+/**
+ * 瀹㈡埛婊℃剰搴�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Service
+public class ClientSatisfactionServiceImpl extends ServiceImpl<ClientSatisfactionMapper, ClientSatisfaction> implements ClientSatisfactionService {
+
+ @Resource
+ private ClientSatisfactionAnalyseFileMapper clientSatisfactionAnalyseFileMapper;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+ *
+ * @param page
+ * @param clientSatisfaction
+ * @return
+ */
+ @Override
+ public IPage<ClientSatisfaction> pageClientSatisfaction(Page page, ClientSatisfaction clientSatisfaction) {
+ return baseMapper.pageClientSatisfaction(page, QueryWrappers.queryWrappers(clientSatisfaction));
+ }
+
+ /**
+ * 鏂板瀹㈡埛鍒嗘瀽闄勪欢
+ *
+ * @param file
+ * @return
+ */
+ @Override
+ public boolean uploadAnalyseFile(MultipartFile file) {
+
+ String urlString;
+ String pathName;
+ String path;
+ String filename = file.getOriginalFilename();
+ String contentType = file.getContentType();
+ ClientSatisfactionAnalyseFile analyseFile = new ClientSatisfactionAnalyseFile();
+ analyseFile.setFileName(filename);
+ if (contentType != null && contentType.startsWith("image/")) {
+ // 鏄浘鐗�
+ path = imgUrl;
+ analyseFile.setType(1);
+ } else {
+ // 鏄枃浠�
+ path = wordUrl;
+ analyseFile.setType(2);
+ }
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ analyseFile.setFileUrl(pathName);
+ clientSatisfactionAnalyseFileMapper.insert(analyseFile);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new ErrorException(e.getMessage());
+ }
+ }
+
+ /**
+ * 鏌ヨ瀹㈡埛鍒嗘瀽闄勪欢
+ *
+ * @param page
+ * @param analyseFile
+ * @return
+ */
+ @Override
+ public IPage<ClientSatisfactionAnalyseFile> pageAnalyseFile(Page page, ClientSatisfactionAnalyseFile analyseFile) {
+ return clientSatisfactionAnalyseFileMapper.pageAnalyseFile(page, QueryWrappers.queryWrappers(analyseFile));
+ }
+
+ /**
+ * 瀹㈡埛婊℃剰搴﹀鍑�
+ *
+ * @param clientSatisfactionId
+ * @param response
+ */
+ @Override
+ public void exportWordClientSatisfaction(Integer clientSatisfactionId, HttpServletResponse response) {
+ // 鏌ヨ瀹㈡埛婊℃剰搴﹁皟鏌�
+ ClientSatisfactionDto clientSatisfaction = baseMapper.exportWordClientSatisfaction(clientSatisfactionId);
+ if (clientSatisfaction == null) {
+ throw new RuntimeException("瀹㈡埛婊℃剰搴﹁皟鏌ヤ笉瀛樺湪");
+ }
+ // 鏌ヨ纭浜虹殑绛惧悕
+ String confirmPersonUrl = null;
+ // 鐘舵�佷负纭涓旂‘璁や汉涓嶄负绌�
+ if (clientSatisfaction.getConfirmStatus() != null && clientSatisfaction.getConfirmStatus() != 0 && clientSatisfaction.getConfirmPersonId() != null) {
+ confirmPersonUrl = userMapper.selectById(clientSatisfaction.getConfirmPersonId()).getSignatureUrl();
+ if (StringUtils.isBlank(confirmPersonUrl)) {
+ throw new ErrorException("鎵句笉鍒伴獙璇佷汉鐨勭鍚�");
+ }
+ }
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/customer-satisfaction-questionnaire.docx");
+ ConfigureBuilder builder = Configure.builder();
+ String finalConfirmPersonUrl = confirmPersonUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("clientSatisfaction", clientSatisfaction);
+ put("finalConfirmPersonUrl", StringUtils.isNotBlank(finalConfirmPersonUrl) ? Pictures.ofLocal(imgUrl + "/" + finalConfirmPersonUrl).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "瀹㈡埛婊℃剰搴�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ /**
+ * 纭瀹㈡埛婊℃剰搴�
+ *
+ * @param clientSatisfaction 瑕佷慨鏀瑰鎴锋弧鎰忓害鐨勭姸鎬佸璞�
+ * @param userId 淇敼浜篿d
+ */
+ @Override
+ public void confirmClientSatisfaction(ClientSatisfaction clientSatisfaction, Integer userId) {
+ User user = userMapper.selectById(userId);
+ if (user != null) {
+ clientSatisfaction.setConfirmPerson(user.getName());
+ clientSatisfaction.setConfirmPersonId(user.getId());
+ }
+ clientSatisfaction.setConfirmStatus(1);
+ baseMapper.updateById(clientSatisfaction);
+ }
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckDetailServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckDetailServiceImpl.java
new file mode 100644
index 0000000..0ede72f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckDetailServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalCheckDetailMapper;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+import com.ruoyi.manage.service.InternalCheckDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍐呭妫�鏌ヨ鎯呰〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+public class InternalCheckDetailServiceImpl extends ServiceImpl<InternalCheckDetailMapper, InternalCheckDetail> implements InternalCheckDetailService {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckServiceImpl.java
new file mode 100644
index 0000000..4339965
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCheckServiceImpl.java
@@ -0,0 +1,233 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.InternalCheckDto;
+import com.ruoyi.manage.mapper.InternalCheckMapper;
+import com.ruoyi.manage.pojo.InternalCheck;
+import com.ruoyi.manage.pojo.InternalCheckDetail;
+import com.ruoyi.manage.service.InternalCheckDetailService;
+import com.ruoyi.manage.service.InternalCheckService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 鍐呭妫�鏌ヨ〃
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalCheckServiceImpl extends ServiceImpl<InternalCheckMapper, InternalCheck> implements InternalCheckService {
+
+ @Resource
+ private InternalCheckDetailService internalCheckDetailService;
+ @Resource
+ private UserMapper userMapper;
+ @Value("${file.path}")
+ private String imgUrl;
+
+ /**
+ * 鍐呭妫�鏌ュ垎椤垫煡璇�
+ * @param page
+ * @param internalCheck
+ * @return
+ */
+ @Override
+ public IPage<InternalCheckDto> pageInternalCheck(Page page, InternalCheck internalCheck) {
+ return baseMapper.pageInternalCheck(page, QueryWrappers.queryWrappers(internalCheck));
+ }
+
+ /**
+ * 鍐呭妫�鏌ユ柊澧�
+ * @param internalCheck
+ * @return
+ */
+ @Override
+ public boolean addInternalCheck(InternalCheckDto internalCheck) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 娣诲姞缂栧埗浜�
+ User user = userMapper.selectById(userId);
+ internalCheck.setWriteTime(LocalDateTime.now());
+ internalCheck.setWriteUserId(user.getId());
+ internalCheck.setWriteUserName(user.getName());
+
+ baseMapper.insert(internalCheck);
+ // 鏂板璇︽儏
+ for (InternalCheckDetail internalCheckDetail : internalCheck.getCheckDetailList()) {
+ internalCheckDetail.setCheckId(internalCheck.getCheckId());
+ }
+ internalCheckDetailService.saveBatch(internalCheck.getCheckDetailList());
+ return true;
+ }
+
+ /**
+ * 鍐呭妫�鏌ヤ慨鏀�
+ * @param internalCheck
+ * @return
+ */
+ @Override
+ public boolean updateInternalCheck(InternalCheckDto internalCheck) {
+ baseMapper.updateById(internalCheck);
+
+ // 鍒犻櫎涔嬪墠鐨勮鎯�
+ internalCheckDetailService.remove(Wrappers.<InternalCheckDetail>lambdaQuery()
+ .eq(InternalCheckDetail::getCheckId, internalCheck.getCheckId()));
+
+ // 鏂板璇︽儏
+ for (InternalCheckDetail internalCheckDetail : internalCheck.getCheckDetailList()) {
+ internalCheckDetail.setCheckId(internalCheck.getCheckId());
+ }
+ internalCheckDetailService.saveBatch(internalCheck.getCheckDetailList());
+
+ return true;
+ }
+
+ /**
+ * 鍐呭妫�鏌ュ垹闄�
+ * @param CheckId
+ * @return
+ */
+ @Override
+ public boolean delInternalCheck(Integer CheckId) {
+ internalCheckDetailService.remove(Wrappers.<InternalCheckDetail>lambdaQuery()
+ .eq(InternalCheckDetail::getCheckId, CheckId));
+ baseMapper.deleteById(CheckId);
+ return true;
+ }
+
+ /**
+ * 鍐呭妫�鏌ユ煡鐪嬭鎯�
+ * @param CheckId
+ * @return
+ */
+ @Override
+ public InternalCheckDto getInternalCheckOne(Integer CheckId) {
+ InternalCheck internalCheck = baseMapper.selectById(CheckId);
+ InternalCheckDto internalCheckDto = new InternalCheckDto();
+ BeanUtils.copyProperties(internalCheck, internalCheckDto);
+
+ // 鏌ヨ璇︾粏淇℃伅
+ internalCheckDto.setCheckDetailList(internalCheckDetailService.list(Wrappers.<InternalCheckDetail>lambdaQuery()
+ .eq(InternalCheckDetail::getCheckId, CheckId)));
+ return internalCheckDto;
+ }
+
+ /**
+ * 鍐呭妫�鏌ユ壒鍑�
+ * @param internalCheck
+ * @return
+ */
+ @Override
+ public boolean ratifyInternalCheck(InternalCheckDto internalCheck) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ baseMapper.update(null, Wrappers.<InternalCheck>lambdaUpdate()
+ .eq(InternalCheck::getCheckId, internalCheck.getCheckId())
+ .set(InternalCheck::getRatifyUserId, userId)
+ .set(InternalCheck::getRatifyUserName, user.getName())
+ .set(InternalCheck::getRatifyRemark, internalCheck.getRatifyRemark())
+ .set(InternalCheck::getRatifyStatus, internalCheck.getRatifyStatus())
+ .set(InternalCheck::getRatifyTime, LocalDateTime.now())
+ );
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭鍐呭妫�鏌�
+ * @param checkId
+ * @param response
+ */
+ @Override
+ public void exportInternalCheck(Integer checkId, HttpServletResponse response) {
+ InternalCheck internalCheck = baseMapper.selectById(checkId);
+
+ //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+ String writeUrl = userMapper.selectById(internalCheck.getWriteUserId()).getSignatureUrl();
+ if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ String ratifyUrl = null;
+ if (internalCheck.getRatifyUserId() != null) {
+ ratifyUrl = userMapper.selectById(internalCheck.getRatifyUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(ratifyUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ // 鏌ヨ璇︽儏
+ List<InternalCheckDetail> internalCheckDetails = internalCheckDetailService.list(Wrappers.<InternalCheckDetail>lambdaQuery()
+ .eq(InternalCheckDetail::getCheckId, checkId));
+
+ int index = 1;
+ for (InternalCheckDetail detail : internalCheckDetails) {
+ detail.setIndex(index);
+ index++;
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-check.docx");
+ String finalRatifyUrl = ratifyUrl;
+ Configure configure = Configure.builder()
+ .bind("checkDetailList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("check", internalCheck);
+ put("checkDetailList", internalCheckDetails);
+ put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+ put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+ put("writeDateUrl", internalCheck.getWriteTime() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(internalCheck.getWriteTime())).create() : null);
+ put("ratifyDateUrl", internalCheck.getRatifyTime() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(internalCheck.getRatifyTime())).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "鍐呭妫�鏌�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+
+ }
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectFileServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectFileServiceImpl.java
new file mode 100644
index 0000000..55ff0b7
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectFileServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalCorrectFileMapper;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import com.ruoyi.manage.service.InternalCorrectFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳鎺柦闄勪欢琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:38
+ */
+@Service
+public class InternalCorrectFileServiceImpl extends ServiceImpl<InternalCorrectFileMapper, InternalCorrectFile> implements InternalCorrectFileService {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectServiceImpl.java
new file mode 100644
index 0000000..3971f31
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalCorrectServiceImpl.java
@@ -0,0 +1,320 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.dto.InternalCorrectDto;
+import com.ruoyi.manage.mapper.InternalCorrectFileMapper;
+import com.ruoyi.manage.mapper.InternalCorrectMapper;
+import com.ruoyi.manage.pojo.InternalCorrect;
+import com.ruoyi.manage.pojo.InternalCorrectFile;
+import com.ruoyi.manage.service.InternalCorrectService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍐呭绠$悊绾犳澶勭悊琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 04:00:15
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalCorrectServiceImpl extends ServiceImpl<InternalCorrectMapper, InternalCorrect> implements InternalCorrectService {
+
+ @Resource
+ private InternalCorrectFileMapper internalCorrectFileMapper;
+ @Resource
+ private UserMapper userMapper;
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+
+ @Override
+ public boolean addInternalCorrect(InternalCorrect detailsCorrect) {
+ InternalCorrect correct = new InternalCorrect();
+ // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+ User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+ String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+
+ switch (detailsCorrect.getFlowType()) {
+ // 涓嶅悎鏍兼彁鍑�
+ case 0:
+ correct.setRaiseResult(detailsCorrect.getRaiseResult());//涓嶅悎鏍艰〃杩�
+ correct.setVdeRaiseResult(detailsCorrect.getVdeRaiseResult());//vde涓撳鍙戠幇
+ correct.setRaiseDepartment(departmentLimsName);//鎻愬嚭閮ㄩ棬
+ correct.setRaiseUserId(user.getId());//鎻愬嚭浜篿d
+ correct.setRaiseUserName(user.getName());// 鎻愬嚭浜�
+ correct.setRaiseTime(LocalDate.now());// 鎻愬嚭鏃堕棿
+
+ // 鍘熷洜鍒嗘瀽浜轰俊鎭�
+ User causeUser = userMapper.selectById(detailsCorrect.getCauseUserId());
+ String causeDepartmentLims = userMapper.selectUserDepartmentLimsName(causeUser.getId());
+
+ correct.setCauseDepartment(causeDepartmentLims);//鍘熷洜鍒嗘瀽璐d换閮ㄩ棬
+ correct.setCauseUserId(causeUser.getId());//1鍘熷洜鍒嗘瀽浜篿d
+ correct.setCauseUserName(causeUser.getName());// 1鍘熷洜鍒嗘瀽浜�
+ baseMapper.insert(correct);
+ break;
+
+ // 鍘熷洜鍒嗘瀽
+ case 1:
+ correct.setCorrectId(detailsCorrect.getCorrectId());
+ correct.setCauseResult(detailsCorrect.getCauseResult());//鍘熷洜鍒嗘瀽
+ correct.setCauseTime(LocalDate.now());// 1鍘熷洜鍒嗘瀽鏃堕棿
+
+ // 绾犳浜轰俊鎭�
+ User correctUser = userMapper.selectById(detailsCorrect.getCorrectUserId());
+ String correctUserDepartmentLims = userMapper.selectUserDepartmentLimsName(correctUser.getId());
+
+ correct.setCorrectDepartment(correctUserDepartmentLims);//2绾犳璐d换閮ㄩ棬
+ correct.setCorrectUserId(correctUser.getId());//2绾犳浜篿d
+ correct.setCorrectUserName(correctUser.getName());// 2绾犳浜�
+ baseMapper.updateById(correct);
+ break;
+
+ // 绾犳鎺柦
+ case 2:
+ correct.setCorrectId(detailsCorrect.getCorrectId());
+ correct.setCorrectResult(detailsCorrect.getCorrectResult());//2绾犳鎺柦
+ correct.setRaiseDepartmentAffirm(detailsCorrect.getRaiseDepartmentAffirm());//2鎻愬嚭閮ㄩ棬纭
+ correct.setCorrectTime(LocalDate.now());// 2绾犳鏃堕棿
+
+ // 楠岃瘉浜轰俊鎭�
+ User validationUser = userMapper.selectById(detailsCorrect.getValidationUserId());
+ String validationUserDepartmentLims = userMapper.selectUserDepartmentLimsName(validationUser.getId());
+
+ correct.setValidationDepartment(validationUserDepartmentLims);//3楠岃瘉閮ㄩ棬
+ correct.setValidationUserId(validationUser.getId());//3楠岃瘉浜篿d
+ correct.setValidationUserName(validationUser.getName());// 3楠岃瘉浜�
+ baseMapper.updateById(correct);
+ break;
+
+ // 楠岃瘉缁撴灉
+ case 3:
+ correct.setCorrectId(detailsCorrect.getCorrectId());
+ correct.setValidationResult(detailsCorrect.getValidationResult());//3楠岃瘉缁撴灉
+ correct.setValidationTime(LocalDate.now());// 3楠岃瘉鏃堕棿
+ correct.setIsFinish(1);
+ baseMapper.updateById(correct);
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳澶勭悊
+ * @param correctId
+ * @return
+ */
+ @Override
+ public InternalCorrect getInternalCorrect(Integer correctId) {
+ InternalCorrect detailsCorrect;
+
+ detailsCorrect = baseMapper.selectOne(Wrappers.<InternalCorrect>lambdaQuery()
+ .eq(InternalCorrect::getCorrectId, correctId));
+
+ if (detailsCorrect == null) {
+ detailsCorrect = new InternalCorrect();
+ }
+ return detailsCorrect;
+ }
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃
+ * @param page
+ * @param detailsCorrect
+ * @return
+ */
+ @Override
+ public IPage<InternalCorrect> pageInternalCorrect(Page page, InternalCorrect detailsCorrect) {
+ return baseMapper.pageInternalAccording(page, QueryWrappers.queryWrappers(detailsCorrect));
+ }
+
+ /**
+ * 鏂板鍐呭绠$悊绾犳鎺柦闄勪欢
+ * @param InternalCorrectId
+ * @param file
+ * @return
+ */
+ @Override
+ public boolean uploadInternalCorrectFile(Integer InternalCorrectId, MultipartFile file) {
+ if (InternalCorrectId == null) {
+ throw new ErrorException("缂哄皯绾犳鎺柦id");
+ }
+
+ String urlString;
+ String pathName;
+ String path;
+ String filename = file.getOriginalFilename();
+ String contentType = file.getContentType();
+ InternalCorrectFile InternalCorrectFile = new InternalCorrectFile();
+ InternalCorrectFile.setCorrectId(InternalCorrectId);
+ InternalCorrectFile.setFileName(filename);
+ if (contentType != null && contentType.startsWith("image/")) {
+ // 鏄浘鐗�
+ path = imgUrl;
+ InternalCorrectFile.setType(1);
+ } else {
+ // 鏄枃浠�
+ path = wordUrl;
+ InternalCorrectFile.setType(2);
+ }
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ InternalCorrectFile.setFileUrl(pathName);
+ internalCorrectFileMapper.insert(InternalCorrectFile);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new ErrorException(e.getMessage());
+ }
+ }
+
+ /**
+ * 鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢
+ * @param correctId
+ * @return
+ */
+ @Override
+ public List<InternalCorrectFile> getInternalCorrectFileList(Integer correctId) {
+ return internalCorrectFileMapper.selectList(Wrappers.<InternalCorrectFile>lambdaQuery()
+ .eq(InternalCorrectFile::getCorrectId, correctId));
+ }
+
+ /**
+ * 瀵煎嚭绾犳鎺柦
+ * @param correctId
+ * @param response
+ */
+ @Override
+ public void exportInternalCorrect(Integer correctId, HttpServletResponse response) {
+ InternalCorrect internalCorrect = baseMapper.selectById(correctId);
+ InternalCorrectDto internalCorrectDto = new InternalCorrectDto();
+ BeanUtils.copyProperties(internalCorrect, internalCorrectDto);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ // 鎻愬嚭鏃堕棿
+ internalCorrectDto.setRaiseTimeString(internalCorrect.getRaiseTime() != null
+ ? internalCorrect.getRaiseTime().format(formatter) : null);
+ // 鍘熷洜鍒嗘瀽鏃堕棿
+ internalCorrectDto.setCauseTimeString(internalCorrect.getCauseTime() != null
+ ? internalCorrect.getCauseTime().format(formatter) : null);
+
+ // 绾犳鏃堕棿
+ internalCorrectDto.setCorrectTimeString(internalCorrect.getCorrectTime() != null
+ ? internalCorrect.getCorrectTime().format(formatter) : null);
+
+ // 楠岃瘉鏃堕棿
+ internalCorrectDto.setValidationTimeString(internalCorrect.getValidationTime() != null
+ ? internalCorrect.getValidationTime().format(formatter) : null);
+
+
+ // 鎻愬嚭浜虹鍚�
+ String raiseUrl = null;
+ if (internalCorrect.getRaiseUserId() != null) {
+ raiseUrl = userMapper.selectById(internalCorrect.getRaiseUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(raiseUrl)) {
+ throw new ErrorException("鎵句笉鍒版彁鍑轰汉鐨勭鍚�");
+ }
+ }
+
+ // 鍘熷洜鍒嗘瀽浜�
+ String causeUrl = null;
+ if (internalCorrect.getCauseUserId() != null) {
+ causeUrl = userMapper.selectById(internalCorrect.getCauseUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(causeUrl)) {
+ throw new ErrorException("鎵句笉鍒板師鍥犲垎鏋愪汉鐨勭鍚�");
+ }
+ }
+
+ // 绾犳浜�
+ String correctUrl = null;
+ if (internalCorrect.getCorrectUserId() != null) {
+ correctUrl = userMapper.selectById(internalCorrect.getCorrectUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(correctUrl)) {
+ throw new ErrorException("鎵句笉鍒扮籂姝d汉鐨勭鍚�");
+ }
+ }
+
+ // 楠岃瘉浜�
+ String validationUrl = null;
+ if (internalCorrect.getValidationUserId() != null) {
+ validationUrl = userMapper.selectById(internalCorrect.getValidationUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(validationUrl)) {
+ throw new ErrorException("鎵句笉鍒伴獙璇佷汉鐨勭鍚�");
+ }
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-correct.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String finalRaiseUrl = raiseUrl;
+ String finalCauseUrl = causeUrl;
+ String finalCorrectUrl = correctUrl;
+ String finalValidationUrl = validationUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("correct", internalCorrectDto);
+ put("raiseUrl", StringUtils.isNotBlank(finalRaiseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRaiseUrl).create() : null);
+ put("causeUrl", StringUtils.isNotBlank(finalCauseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCauseUrl).create() : null);
+ put("correctUrl", StringUtils.isNotBlank(finalCorrectUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectUrl).create() : null);
+ put("validationUrl", StringUtils.isNotBlank(finalValidationUrl) ? Pictures.ofLocal(imgUrl + "/" + finalValidationUrl).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "鍐呭绾犳鎺柦", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementDetailServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementDetailServiceImpl.java
new file mode 100644
index 0000000..c1b6cb5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementDetailServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalImplementDetailMapper;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+import com.ruoyi.manage.service.InternalImplementDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍐呭瀹炴柦璁″垝璇︽儏
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+public class InternalImplementDetailServiceImpl extends ServiceImpl<InternalImplementDetailMapper, InternalImplementDetail> implements InternalImplementDetailService {
+
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementServiceImpl.java
new file mode 100644
index 0000000..78e3f25
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalImplementServiceImpl.java
@@ -0,0 +1,239 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.InternalImplementDto;
+
+import com.ruoyi.manage.mapper.InternalImplementMapper;
+
+import com.ruoyi.manage.pojo.InternalImplement;
+import com.ruoyi.manage.pojo.InternalImplementDetail;
+
+import com.ruoyi.manage.service.InternalImplementDetailService;
+import com.ruoyi.manage.service.InternalImplementService;
+
+
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 鍐呭瀹炴柦璁″垝
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalImplementServiceImpl extends ServiceImpl<InternalImplementMapper, InternalImplement> implements InternalImplementService {
+
+ @Resource
+ private InternalImplementDetailService internalImplementDetailService;
+
+ @Resource
+ private UserMapper userMapper;
+ @Value("${file.path}")
+ private String imgUrl;
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalImplement
+ * @return
+ */
+ @Override
+ public IPage<InternalImplementDto> pageInternalImplement(Page page, InternalImplement internalImplement) {
+ return baseMapper.pageInternalImplement(page, QueryWrappers.queryWrappers(internalImplement));
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鏂板
+ * @param internalImplement
+ * @return
+ */
+ @Override
+ public boolean addInternalImplement(InternalImplementDto internalImplement) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 娣诲姞缂栧埗浜�
+ User user = userMapper.selectById(userId);
+ internalImplement.setWriteTime(LocalDateTime.now());
+ internalImplement.setWriteUserId(user.getId());
+ internalImplement.setWriteUserName(user.getName());
+
+ baseMapper.insert(internalImplement);
+ // 鏂板璇︽儏
+ for (InternalImplementDetail internalImplementDetail : internalImplement.getImplementDetailList()) {
+ internalImplementDetail.setImplementId(internalImplement.getImplementId());
+ }
+ internalImplementDetailService.saveBatch(internalImplement.getImplementDetailList());
+ return true;
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝淇敼
+ * @param internalImplement
+ * @return
+ */
+ @Override
+ public boolean updateInternalImplement(InternalImplementDto internalImplement) {
+ baseMapper.updateById(internalImplement);
+
+ // 鍒犻櫎涔嬪墠鐨勮鎯�
+ internalImplementDetailService.remove(Wrappers.<InternalImplementDetail>lambdaQuery()
+ .eq(InternalImplementDetail::getImplementId, internalImplement.getImplementId()));
+
+ // 鏂板璇︽儏
+ for (InternalImplementDetail internalImplementDetail : internalImplement.getImplementDetailList()) {
+ internalImplementDetail.setImplementId(internalImplement.getImplementId());
+ }
+ internalImplementDetailService.saveBatch(internalImplement.getImplementDetailList());
+
+ return true;
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鍒犻櫎
+ * @param implementId
+ * @return
+ */
+ @Override
+ public boolean delInternalImplement(Integer implementId) {
+ internalImplementDetailService.remove(Wrappers.<InternalImplementDetail>lambdaQuery()
+ .eq(InternalImplementDetail::getImplementId, implementId));
+ baseMapper.deleteById(implementId);
+ return true;
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鏌ョ湅璇︽儏
+ * @param implementId
+ * @return
+ */
+ @Override
+ public InternalImplementDto getInternalImplementOne(Integer implementId) {
+ InternalImplement internalImplement = baseMapper.selectById(implementId);
+ InternalImplementDto internalImplementDto = new InternalImplementDto();
+ BeanUtils.copyProperties(internalImplement, internalImplementDto);
+
+ // 鏌ヨ璇︾粏淇℃伅
+ internalImplementDto.setImplementDetailList(internalImplementDetailService.list(Wrappers.<InternalImplementDetail>lambdaQuery()
+ .eq(InternalImplementDetail::getImplementId, implementId)));
+ return internalImplementDto;
+ }
+
+ /**
+ * 鍐呭瀹炴柦璁″垝鎵瑰噯
+ * @param internalImplement
+ * @return
+ */
+ @Override
+ public boolean ratifyInternalImplement(InternalImplementDto internalImplement) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ baseMapper.update(null, Wrappers.<InternalImplement>lambdaUpdate()
+ .eq(InternalImplement::getImplementId, internalImplement.getImplementId())
+ .set(InternalImplement::getRatifyUserId, userId)
+ .set(InternalImplement::getRatifyUserName, user.getName())
+ .set(InternalImplement::getRatifyRemark, internalImplement.getRatifyRemark())
+ .set(InternalImplement::getRatifyStatus, internalImplement.getRatifyStatus())
+ .set(InternalImplement::getRatifyTime, LocalDateTime.now())
+ );
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭鍐呭瀹炴柦璁″垝
+ * @param implementId
+ * @param response
+ */
+ @Override
+ public void exportInternalImplement(Integer implementId, HttpServletResponse response) {
+ InternalImplement internalImplement = baseMapper.selectById(implementId);
+
+ //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+ String writeUrl = userMapper.selectById(internalImplement.getWriteUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(writeUrl)) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ String ratifyUrl = null;
+ if (internalImplement.getRatifyUserId() != null) {
+ ratifyUrl = userMapper.selectById(internalImplement.getRatifyUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(ratifyUrl)) {
+ throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
+ }
+ }
+
+ // 鏌ヨ璇︽儏
+ List<InternalImplementDetail> detailList = internalImplementDetailService.list(Wrappers.<InternalImplementDetail>lambdaQuery()
+ .eq(InternalImplementDetail::getImplementId, implementId));
+
+ int index = 1;
+ for (InternalImplementDetail detail : detailList) {
+ detail.setIndex(index);
+ index++;
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-implement.docx");
+ String finalRatifyUrl = ratifyUrl;
+ Configure configure = Configure.builder()
+ .bind("implementDetailList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("implement", internalImplement);
+ put("implementDetailList", detailList);
+ put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+ put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+ put("writeDateUrl", internalImplement.getWriteTime() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(internalImplement.getWriteTime())).create() : null);
+ put("ratifyDateUrl", internalImplement.getRatifyTime() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(internalImplement.getRatifyTime())).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ internalImplement.getPurposes(), "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+
+ }
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingDetailServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingDetailServiceImpl.java
new file mode 100644
index 0000000..bc60750
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalMeetingDetailMapper;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+import com.ruoyi.manage.service.InternalMeetingDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鍐呭浼氳璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:56:13
+ */
+@Service
+public class InternalMeetingDetailServiceImpl extends ServiceImpl<InternalMeetingDetailMapper, InternalMeetingDetail> implements InternalMeetingDetailService {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingServiceImpl.java
new file mode 100644
index 0000000..b117add
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalMeetingServiceImpl.java
@@ -0,0 +1,203 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.InternalMeetingDto;
+import com.ruoyi.manage.dto.InternalMeetingParticipantDto;
+import com.ruoyi.manage.mapper.InternalMeetingMapper;
+
+import com.ruoyi.manage.pojo.InternalMeeting;
+import com.ruoyi.manage.pojo.InternalMeetingDetail;
+import com.ruoyi.manage.service.InternalMeetingDetailService;
+import com.ruoyi.manage.service.InternalMeetingService;
+
+
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍐呭浼氳琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:50:44
+ */
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class InternalMeetingServiceImpl extends ServiceImpl<InternalMeetingMapper, InternalMeeting> implements InternalMeetingService {
+
+ private InternalMeetingDetailService internalMeetingDetailService;
+
+ private UserMapper userMapper;
+
+ /**
+ * 鍐呭浼氳鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalMeeting
+ * @return
+ */
+ @Override
+ public IPage<InternalMeetingDto> pageInternalMeeting(Page page, InternalMeeting internalMeeting) {
+ return baseMapper.pageInternalMeeting(page, QueryWrappers.queryWrappers(internalMeeting));
+ }
+
+ /**
+ * 鍐呭浼氳鏂板
+ * @param internalMeeting
+ * @return
+ */
+ @Override
+ public boolean addInternalMeeting(InternalMeetingDto internalMeeting) {
+
+ baseMapper.insert(internalMeeting);
+// // 鏂板璇︽儏
+// for (InternalMeetingDetail internalMeetingDetail : internalMeeting.getMeetingDetailList()) {
+// internalMeetingDetail.setMeetingId(internalMeeting.getMeetingId());
+// }
+// internalMeetingDetailService.saveBatch(internalMeeting.getMeetingDetailList());
+ return true;
+ }
+
+ /**
+ * 鍐呭浼氳淇敼
+ * @param internalMeeting
+ * @return
+ */
+ @Override
+ public boolean updateInternalMeeting(InternalMeetingDto internalMeeting) {
+ baseMapper.updateById(internalMeeting);
+
+ // 鍒犻櫎涔嬪墠鐨勮鎯�
+// internalMeetingDetailService.remove(Wrappers.<InternalMeetingDetail>lambdaQuery()
+// .eq(InternalMeetingDetail::getMeetingId, internalMeeting.getMeetingId()));
+//
+// // 鏂板璇︽儏
+// for (InternalMeetingDetail internalMeetingDetail : internalMeeting.getMeetingDetailList()) {
+// internalMeetingDetail.setMeetingId(internalMeeting.getMeetingId());
+// }
+ internalMeetingDetailService.saveBatch(internalMeeting.getMeetingDetailList());
+
+ return true;
+ }
+
+ /**
+ * 鍐呭浼氳鍒犻櫎
+ * @param MeetingId
+ * @return
+ */
+ @Override
+ public boolean delInternalMeeting(Integer MeetingId) {
+ internalMeetingDetailService.remove(Wrappers.<InternalMeetingDetail>lambdaQuery()
+ .eq(InternalMeetingDetail::getMeetingId, MeetingId));
+ baseMapper.deleteById(MeetingId);
+ return true;
+ }
+
+ /**
+ * 鍐呭浼氳鏌ョ湅璇︽儏
+ * @param MeetingId
+ * @return
+ */
+ @Override
+ public InternalMeetingDto getInternalMeetingOne(Integer MeetingId) {
+ InternalMeeting internalMeeting = baseMapper.selectById(MeetingId);
+ InternalMeetingDto internalMeetingDto = new InternalMeetingDto();
+ BeanUtils.copyProperties(internalMeeting, internalMeetingDto);
+
+ // 鏌ヨ璇︾粏淇℃伅
+ internalMeetingDto.setMeetingDetailList(internalMeetingDetailService.list(Wrappers.<InternalMeetingDetail>lambdaQuery()
+ .eq(InternalMeetingDetail::getMeetingId, MeetingId)));
+ return internalMeetingDto;
+ }
+
+ /**
+ * 瀵煎嚭鍐呭浼氳
+ * @param meetingId
+ * @param response
+ */
+ @Override
+ public void exportInternalMeeting(Integer meetingId, HttpServletResponse response) {
+ InternalMeeting internalMeeting = baseMapper.selectById(meetingId);
+
+ // 鏈�澶ц鏁�
+ int max = 11;
+
+ // 鏌ヨ鍙傚姞浜哄憳
+ List<Map<String, String>> mapList = userMapper.selectNameAnddepartment(internalMeeting.getParticipant());
+
+ // 鍒涘缓绌哄璞�
+ List<InternalMeetingParticipantDto> participants = new ArrayList<>();
+ for (int i = 0; i < max; i++) {
+ InternalMeetingParticipantDto participant = new InternalMeetingParticipantDto();
+ participants.add(participant);
+ }
+
+ int count = 0;
+ // 娣诲姞鍙傚姞浜哄憳
+ for (Map<String, String> stringMap : mapList) {
+ // 鍒ゆ柇鏈夋病鏈夊埌11琛�
+ if (count >= max * 2) {
+ participants.get(count - max * 2).setUserName3(stringMap.get("userName"));
+ participants.get(count - max * 2).setDepartment3(stringMap.get("department"));
+ } else if (count >= max){
+ participants.get(count - max).setUserName2(stringMap.get("userName"));
+ participants.get(count - max).setDepartment2(stringMap.get("department"));
+ } else {
+ participants.get(count).setUserName1(stringMap.get("userName"));
+ participants.get(count).setDepartment1(stringMap.get("department"));
+ }
+ count ++;
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-meeting.docx");
+ Configure configure = Configure.builder()
+ .bind("meetingDetails", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("meeting", internalMeeting);
+ put("meetingDetails", participants);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ internalMeeting.getMeetingDate() + "鍐呭浼氳绛惧埌", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+
+ }
+
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanDetailServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanDetailServiceImpl.java
new file mode 100644
index 0000000..c0b310a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.InternalPlanDetailMapper;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+import com.ruoyi.manage.service.InternalPlanDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝璇︽儏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:28:48
+ */
+@Service
+public class InternalPlanDetailServiceImpl extends ServiceImpl<InternalPlanDetailMapper, InternalPlanDetail> implements InternalPlanDetailService {
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanServiceImpl.java
new file mode 100644
index 0000000..35f0e58
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalPlanServiceImpl.java
@@ -0,0 +1,259 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.InternalPlanDto;
+
+import com.ruoyi.manage.mapper.InternalPlanMapper;
+
+import com.ruoyi.manage.pojo.InternalPlan;
+import com.ruoyi.manage.pojo.InternalPlanDetail;
+import com.ruoyi.manage.service.InternalPlanDetailService;
+import com.ruoyi.manage.service.InternalPlanService;
+
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍐呭骞村害璁″垝 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:27:47
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalPlanServiceImpl extends ServiceImpl<InternalPlanMapper, InternalPlan> implements InternalPlanService {
+
+ @Resource
+ private InternalPlanDetailService internalPlanDetailService;
+
+ @Resource
+ private UserMapper userMapper;
+ @Value("${file.path}")
+ private String imgUrl;
+
+
+ /**
+ * 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalPlan
+ * @return
+ */
+ @Override
+ public IPage<InternalPlanDto> pageInternalPlan(Page page, InternalPlan internalPlan) {
+ return baseMapper.pageInternalPlan(page, QueryWrappers.queryWrappers(internalPlan));
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝鏂板
+ * @param internalPlan
+ * @return
+ */
+ @Override
+ public boolean addInternalPlan(InternalPlanDto internalPlan) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ // 娣诲姞缂栧埗浜�
+ User user = userMapper.selectById(userId);
+ internalPlan.setWriteTime(LocalDateTime.now());
+ internalPlan.setWriteUserId(user.getId());
+ internalPlan.setWriteUserName(user.getName());
+
+ baseMapper.insert(internalPlan);
+ // 鏂板璇︽儏
+ for (InternalPlanDetail internalPlanDetail : internalPlan.getPlanDetailList()) {
+ internalPlanDetail.setPlanId(internalPlan.getPlanId());
+ }
+ internalPlanDetailService.saveBatch(internalPlan.getPlanDetailList());
+ return true;
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝淇敼
+ * @param internalPlan
+ * @return
+ */
+ @Override
+ public boolean updateInternalPlan(InternalPlanDto internalPlan) {
+ baseMapper.updateById(internalPlan);
+
+ // 鍒犻櫎涔嬪墠鐨勮鎯�
+ internalPlanDetailService.remove(Wrappers.<InternalPlanDetail>lambdaQuery()
+ .eq(InternalPlanDetail::getPlanId, internalPlan.getPlanId()));
+
+ // 鏂板璇︽儏
+ for (InternalPlanDetail internalPlanDetail : internalPlan.getPlanDetailList()) {
+ internalPlanDetail.setPlanId(internalPlan.getPlanId());
+ }
+ internalPlanDetailService.saveBatch(internalPlan.getPlanDetailList());
+
+ return true;
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝鍒犻櫎
+ * @param planId
+ * @return
+ */
+ @Override
+ public boolean delInternalPlan(Integer planId) {
+ internalPlanDetailService.remove(Wrappers.<InternalPlanDetail>lambdaQuery()
+ .eq(InternalPlanDetail::getPlanId, planId));
+ baseMapper.deleteById(planId);
+ return true;
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝鏌ョ湅璇︽儏
+ * @param planId
+ * @return
+ */
+ @Override
+ public InternalPlanDto getInternalPlanOne(Integer planId) {
+ InternalPlan internalPlan = baseMapper.selectById(planId);
+ InternalPlanDto internalPlanDto = new InternalPlanDto();
+ BeanUtils.copyProperties(internalPlan, internalPlanDto);
+
+ // 鏌ヨ璇︾粏淇℃伅
+ internalPlanDto.setPlanDetailList(internalPlanDetailService.list(Wrappers.<InternalPlanDetail>lambdaQuery()
+ .eq(InternalPlanDetail::getPlanId, planId)));
+ return internalPlanDto;
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝瀹℃牳
+ * @param internalPlanDto
+ * @return
+ */
+ @Override
+ public boolean examineInternalPlan(InternalPlanDto internalPlanDto) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ baseMapper.update(null, Wrappers.<InternalPlan>lambdaUpdate()
+ .eq(InternalPlan::getPlanId, internalPlanDto.getPlanId())
+ .set(InternalPlan::getExamineUserId, userId)
+ .set(InternalPlan::getExamineUserName, user.getName())
+ .set(InternalPlan::getExamineRemark, internalPlanDto.getExamineRemark())
+ .set(InternalPlan::getExamineStatus, internalPlanDto.getExamineStatus())
+ .set(InternalPlan::getExamineTime, LocalDateTime.now())
+ );
+ return true;
+ }
+
+ /**
+ * 鍐呭骞村害璁″垝鎵瑰噯
+ * @param internalPlanDto
+ * @return
+ */
+ @Override
+ public boolean ratifyInternalPlan(InternalPlanDto internalPlanDto) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ baseMapper.update(null, Wrappers.<InternalPlan>lambdaUpdate()
+ .eq(InternalPlan::getPlanId, internalPlanDto.getPlanId())
+ .set(InternalPlan::getRatifyUserId, userId)
+ .set(InternalPlan::getRatifyUserName, user.getName())
+ .set(InternalPlan::getRatifyRemark, internalPlanDto.getRatifyRemark())
+ .set(InternalPlan::getRatifyStatus, internalPlanDto.getRatifyStatus())
+ .set(InternalPlan::getRatifyTime, LocalDateTime.now())
+ );
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭鍐呭骞村害璁″垝
+ * @param planId
+ * @param response
+ */
+ @Override
+ public void exportInternalImplement(Integer planId, HttpServletResponse response) {
+ InternalPlan internalPlan = baseMapper.selectById(planId);
+ //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+ String writeUrl = userMapper.selectById(internalPlan.getWriteUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(writeUrl)) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+
+ //鑾峰彇瀹℃牳浜虹殑绛惧悕鍦板潃
+ String examineUrl = null;
+ if (internalPlan.getExamineUserId() != null) {
+ examineUrl = userMapper.selectById(internalPlan.getExamineUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(examineUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ String ratifyUrl = null;
+ if (internalPlan.getRatifyUserId() != null) {
+ ratifyUrl = userMapper.selectById(internalPlan.getRatifyUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(ratifyUrl)) {
+ throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
+ }
+ }
+
+ // 鏌ヨ璇︽儏
+ List<InternalPlanDetail> planDetails = internalPlanDetailService.list(Wrappers.<InternalPlanDetail>lambdaQuery()
+ .eq(InternalPlanDetail::getPlanId, planId));
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-plan.docx");
+ String finalExamineUrl = examineUrl;
+ String finalRatifyUrl = ratifyUrl;
+ Configure configure = Configure.builder()
+ .bind("planDetailList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("plan", internalPlan);
+ put("planDetailList", planDetails);
+ put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+ put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
+ put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "鍐呭骞村害璁″垝", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalReportServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalReportServiceImpl.java
new file mode 100644
index 0000000..1ee3071
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/InternalReportServiceImpl.java
@@ -0,0 +1,165 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+
+
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.InternalReportMapper;
+
+import com.ruoyi.manage.pojo.InternalReport;
+
+import com.ruoyi.manage.service.InternalReportService;
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+
+/**
+ * 鍐呭鎶ュ憡琛�
+ *
+ * @author zhuo
+ * @since 2024-11-11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class InternalReportServiceImpl extends ServiceImpl<InternalReportMapper, InternalReport> implements InternalReportService {
+
+
+ @Resource
+ private UserMapper userMapper;
+ @Value("${file.path}")
+ private String imgUrl;
+
+ /**
+ * 鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalReport
+ * @return
+ */
+ @Override
+ public IPage<InternalReport> pageInternalReport(Page page, InternalReport internalReport) {
+ return baseMapper.pageInternalReport(page, QueryWrappers.queryWrappers(internalReport));
+ }
+
+ /**
+ * 鍐呭鎶ュ憡瀹℃牳
+ * @param internalReport
+ * @return
+ */
+ @Override
+ public boolean ratifyInternalCheck(InternalReport internalReport) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ baseMapper.update(null, Wrappers.<InternalReport>lambdaUpdate()
+ .eq(InternalReport::getReportId, internalReport.getReportId())
+ .set(InternalReport::getExamineUserId, userId)
+ .set(InternalReport::getExamineUserName, user.getName())
+ .set(InternalReport::getExamineRemark, internalReport.getExamineRemark())
+ .set(InternalReport::getExamineStatus, internalReport.getExamineStatus())
+ .set(InternalReport::getExamineTime, LocalDateTime.now())
+ );
+ return true;
+ }
+
+ /**
+ * 鍐呭鎶ュ憡璐ㄩ噺璐熻矗浜哄~鍐�
+ * @param internalReport
+ * @return
+ */
+ @Override
+ public boolean qualityInternalReport(InternalReport internalReport) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ baseMapper.update(null, Wrappers.<InternalReport>lambdaUpdate()
+ .eq(InternalReport::getReportId, internalReport.getReportId())
+ .set(InternalReport::getQualityUserId, userId)
+ .set(InternalReport::getQualityUserName, user.getName())
+ .set(InternalReport::getQualityRemark, internalReport.getQualityRemark())
+ .set(InternalReport::getQualityStatus, internalReport.getQualityStatus())
+ .set(InternalReport::getQualityTime, LocalDateTime.now())
+ );
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭鍐呭鎶ュ憡
+ * @param reportId
+ * @param response
+ */
+ @Override
+ public void exportInternalReport(Integer reportId, HttpServletResponse response) {
+ InternalReport internalReport = baseMapper.selectById(reportId);
+
+ //鑾峰彇瀹℃牳浜虹殑绛惧悕鍦板潃
+ String examineUrl = null;
+ if (internalReport.getExamineUserId() != null) {
+ examineUrl = userMapper.selectById(internalReport.getExamineUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(examineUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ //鑾峰彇璐ㄩ噺璐熻矗浜虹殑绛惧悕鍦板潃
+ String qualityUrl = null;
+ if (internalReport.getQualityUserId() != null) {
+ qualityUrl = userMapper.selectById(internalReport.getQualityUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(qualityUrl)) {
+ throw new ErrorException("鎵句笉鍒拌川閲忚礋璐d汉鐨勭鍚�");
+ }
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-report.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String finalExamineUrl = examineUrl;
+ String finalQualityUrl = qualityUrl;
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("report", internalReport);
+ put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).create() : null);
+ put("qualityUrl", StringUtils.isNotBlank(finalQualityUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).create() : null);
+ put("examineTime", internalReport.getExamineTime() != null ? internalReport.getExamineTime().format(formatter) : null);
+ put("qualityTime", internalReport.getQualityTime() != null ? internalReport.getQualityTime().format(formatter) : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "鍐呭鎶ュ憡", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
+
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageControlPlanListServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageControlPlanListServiceImpl.java
new file mode 100644
index 0000000..d5249f1
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageControlPlanListServiceImpl.java
@@ -0,0 +1,129 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.mapper.ManageControlPlanListMapper;
+
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import com.ruoyi.manage.service.ManageControlPlanListService;
+
+
+import com.ruoyi.manage.vo.ManageControlPlanListVo;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:30
+ */
+@Service
+public class ManageControlPlanListServiceImpl extends ServiceImpl<ManageControlPlanListMapper, ManageControlPlanList> implements ManageControlPlanListService {
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public IPage<ManageControlPlanListVo> getPageList(Page page) {
+ return baseMapper.getPageList(page, false);
+ }
+
+ @Override
+ public void exportPersonTraining(HttpServletResponse response) {
+ // 鏌ヨ璇︽儏
+ IPage<ManageControlPlanListVo> detailedDtos = baseMapper.getPageList(new Page(1, -1), true);
+ if (detailedDtos.getRecords().isEmpty()) {
+ throw new ErrorException("瀹℃牳閫氳繃鐨勬暟鎹负绌猴紒璇峰鏍搁�氳繃鍚庡湪瀵煎嚭");
+ }
+ ManageControlPlanListVo manageRiskAssessmentResultsVo = detailedDtos.getRecords().get(0);
+
+ //鑾峰彇缂栧埗浜虹殑绛惧悕鍦板潃
+ String writeUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getEditor()).getSignatureUrl();
+ if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+
+ //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃
+ String examineUrl = null;
+ if (manageRiskAssessmentResultsVo.getApproval() != null) {
+ examineUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getApproval()).getSignatureUrl();
+ if (StringUtils.isBlank(examineUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ String ratifyUrl = null;
+ if (manageRiskAssessmentResultsVo.getApproval() != null) {
+ ratifyUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getApproval()).getSignatureUrl();
+ if (StringUtils.isBlank(ratifyUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ int index = 1;
+ for (ManageControlPlanListVo detailedDto : detailedDtos.getRecords()) {
+ detailedDto.setIndex(index);
+ index++;
+ }
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/analysis-risk-factors.docx");
+ String finalExamineUrl = examineUrl;
+ String finalRatifyUrl = ratifyUrl;
+ Configure configure = Configure.builder()
+ .bind("trainingDetailedList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("trainingDetailedList", detailedDtos.getRecords());
+ put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+ put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
+ put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+ put("writeDateUrl", manageRiskAssessmentResultsVo.getEditorDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getEditorDate())).create() : null);
+ put("examineDateUrl", manageRiskAssessmentResultsVo.getApproveDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getApproveDate())).create() : null);
+ put("ratifyDateUrl", manageRiskAssessmentResultsVo.getApproveDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getApproveDate())).create() : null);
+ }});
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentAlterServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentAlterServiceImpl.java
new file mode 100644
index 0000000..6576d4b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentAlterServiceImpl.java
@@ -0,0 +1,292 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.mapper.UserMapper;
+
+
+import com.ruoyi.manage.mapper.*;
+import com.ruoyi.manage.pojo.*;
+import com.ruoyi.manage.service.ManageDocumentAlterService;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙樻洿 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 11:04:01
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageDocumentAlterServiceImpl extends ServiceImpl<ManageDocumentAlterMapper, ManageDocumentAlter> implements ManageDocumentAlterService {
+
+ @Resource
+ private ManageDocumentAlterMapper manageDocumentAlterMapper;
+
+ @Resource
+ private ManageRecordCheckMapper manageRecordCheckMapper;
+
+
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Resource
+ private ManageDocumentListMapper manageDocumentListMapper;
+
+ @Resource
+ private ManageDocumentCancelMapper manageDocumentCancelMapper;
+
+ @Resource
+ private ManageRecordAuditMapper manageRecordAuditMapper;
+
+
+ @Override
+ public IPage<ManageDocumentAlter> pageManageDocumentAlter(Page page, ManageDocumentAlter manageDocumentAlter) {
+ return manageDocumentAlterMapper.pageManageDocumentAlter(page, QueryWrappers.queryWrappers(manageDocumentAlter));
+ }
+
+ @Override
+ public ManageDocumentAlter getManageDocumentAlter(Integer id) {
+ ManageDocumentAlter manageDocumentAlter = manageDocumentAlterMapper.getManageDocumentAlter(id);
+ String limsName = userMapper.selectUserDepartmentLimsName(manageDocumentAlter.getCreateUser());
+ manageDocumentAlter.setCreateUserDepartLims(limsName);
+ return manageDocumentAlter;
+ }
+
+ @Override
+ public int addManageDocumentAlter(ManageDocumentAlter manageDocumentAlter) {
+ /*鏂板8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+ ManageRecordAudit manageRecordAudit = new ManageRecordAudit();
+ manageRecordAudit.setDocumentCode(manageDocumentAlter.getAlterBeforeCode());
+ manageRecordAudit.setDocumentName(manageDocumentAlter.getAlterBeforeName());
+ manageRecordAudit.setBeforeVersion(manageDocumentAlter.getAlterBeforeVersion());
+ manageRecordAudit.setAfterVersion(manageDocumentAlter.getAlterAfterVersion());
+ manageRecordAudit.setReason(manageDocumentAlter.getAlterNote());
+ manageRecordAudit.setAlterUser(SecurityUtils.getUserId().intValue());
+ manageRecordAudit.setMethod("淇");
+ if (ObjectUtils.isNotEmpty(manageDocumentAlter.getFile())) {
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageDocumentAlter.getFile();
+ //涓婁紶鏂版枃浠�
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ manageDocumentAlter.setAlterAfterUrl(pathName);
+ manageRecordAudit.setAfterUrl(pathName);
+ }
+ manageRecordAuditMapper.insert(manageRecordAudit);
+ return manageDocumentAlterMapper.insert(manageDocumentAlter);
+ }
+
+ @Override
+ public int doManageDocumentAlter(ManageDocumentAlter manageDocumentAlter) {
+ ManageDocumentAlter manageDocumentAlter1= manageDocumentAlterMapper.selectById(manageDocumentAlter.getId());
+ if (ObjectUtils.isNotEmpty(manageDocumentAlter.getFile())) {
+ if (ObjectUtils.isNotEmpty(manageDocumentAlter1.getAlterAfterUrl())) {
+ // 鍒犻櫎鏃ф枃浠�
+ File oldFile = new File(wordUrl + "/" + manageDocumentAlter1.getAlterAfterUrl());
+ oldFile.delete();
+ }
+ //涓婁紶鏂版枃浠�
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageDocumentAlter.getFile();
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ manageDocumentAlter.setAlterAfterUrl(pathName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ }
+ return manageDocumentAlterMapper.updateById(manageDocumentAlter);
+ }
+
+ @Override
+ public int checkManageDocumentAlter(ManageDocumentAlter manageDocumentAlter) {
+ ManageDocumentAlter oldManageDocumentAlter = manageDocumentAlterMapper.selectById(manageDocumentAlter.getId());
+ if (manageDocumentAlter.getState().equals("閫氳繃")) {
+ /*灏嗘枃浠剁洊绔�*/
+ // 鍒犻櫎鏃ф枃浠�
+ File oldFile = new File(wordUrl + "/" + oldManageDocumentAlter.getAlterAfterUrl());
+ oldFile.delete();
+ //涓婁紶鏂版枃浠�
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageDocumentAlter.getFile();
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ manageDocumentAlter.setAlterAfterUrl(pathName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ if(StringUtils.isNotEmpty(oldManageDocumentAlter.getMethod())){
+
+ }
+ /*鍏朵綑鐩稿叧澶勭悊*/
+ if ("浣滃簾".equals(oldManageDocumentAlter.getMethod())){
+ //鏂板鍒颁綔搴熺敵璇烽噷闈�
+ ManageDocumentCancel manageDocumentCancel = new ManageDocumentCancel();
+ manageDocumentCancel.setDocumentCode(oldManageDocumentAlter.getAlterBeforeCode());
+ manageDocumentCancel.setName(oldManageDocumentAlter.getAlterBeforeName());
+ manageDocumentCancel.setVersion(oldManageDocumentAlter.getAlterBeforeVersion());
+ manageDocumentCancel.setCancelNote("鏂囦欢鍙樻洿,鍙樻洿鐨勬枃浠剁紪鍙锋槸"+oldManageDocumentAlter.getAlterAfterCode());
+ manageDocumentCancelMapper.insert(manageDocumentCancel);
+ //鍒犻櫎鏂囦欢娓呭崟
+ manageDocumentListMapper.delete(Wrappers.<ManageDocumentList>lambdaQuery()
+ .eq(ManageDocumentList::getDocumentCode,oldManageDocumentAlter.getAlterBeforeCode()));
+ //鏂板鏂囦欢娓呭崟
+ ManageDocumentList manageDocumentList = new ManageDocumentList();
+ manageDocumentList.setDocumentCode(oldManageDocumentAlter.getAlterAfterCode());
+ manageDocumentList.setName(oldManageDocumentAlter.getAlterAfterName());
+ manageDocumentList.setVersion(oldManageDocumentAlter.getAlterAfterVersion());
+ manageDocumentList.setState("鏈夋晥");
+ manageDocumentList.setEffectiveDate(LocalDate.now());
+ manageDocumentList.setUrl(pathName);
+ manageDocumentListMapper.insert(manageDocumentList);
+ /*鏂板8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+ ManageRecordAudit manageRecordAudit = new ManageRecordAudit();
+ manageRecordAudit.setDocumentCode(manageDocumentCancel.getDocumentCode());
+ manageRecordAudit.setDocumentName(manageDocumentCancel.getName());
+ manageRecordAudit.setAlterThing("浣滃簾");
+ manageRecordAudit.setMethod("浣滃簾");
+ manageRecordAuditMapper.insert(manageRecordAudit);
+ }else {
+ //濡傛灉鏄瓨妗d笉鍙敤,閭e氨灏嗘枃浠舵竻鍗曠殑鐘舵�佹敼涓烘棤鏁�
+ manageDocumentListMapper.update(null,Wrappers.<ManageDocumentList>lambdaUpdate()
+ .eq(ManageDocumentList::getDocumentCode,oldManageDocumentAlter.getAlterBeforeCode())
+ .set(ManageDocumentList::getState,"鏃犳晥"));
+ }
+ }
+ /*鏂板8.4鐨勬枃浠跺鎵硅褰�*/
+ ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+ manageRecordCheck.setDocumentCode(oldManageDocumentAlter.getAlterAfterCode());
+ manageRecordCheck.setDocumentName(oldManageDocumentAlter.getAlterAfterName());
+ manageRecordCheck.setDocumentVersion(oldManageDocumentAlter.getAlterAfterVersion());
+ manageRecordCheck.setWriteUser(oldManageDocumentAlter.getCreateUser());
+ manageRecordCheck.setCheckUser(oldManageDocumentAlter.getCheckUser());
+ manageRecordCheck.setCheckState(manageDocumentAlter.getState());
+ manageRecordCheck.setRemark(manageDocumentAlter.getAlterNote());
+ manageRecordCheckMapper.insert(manageRecordCheck);
+ return manageDocumentAlterMapper.updateById(manageDocumentAlter);
+ }
+
+ @Override
+ public void checkManageDocumentAlterPdf(Long id, HttpServletResponse response) throws Exception {
+ ManageDocumentAlter manageDocumentAlter = manageDocumentAlterMapper.selectById(id);
+ File file = new File(wordUrl + "/" + manageDocumentAlter.getAlterAfterUrl());
+ FileInputStream fileInputStream = new FileInputStream(file);
+ response.setContentType("application/pdf");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Content-disposition", "inline;filename=" + file.getName());
+ response.setContentLength((int)file.length());
+ OutputStream os = response.getOutputStream();
+ // 灏嗘枃浠跺唴瀹瑰啓鍏ヨ緭鍑烘祦
+ byte[] buffer = new byte[4096];
+ int bytesRead;
+ while ((bytesRead = fileInputStream.read(buffer)) != -1) {
+ os.write(buffer, 0, bytesRead);
+ }
+ os.flush();
+ os.close();
+ }
+
+ @Override
+ public void exportManageDocumentAlter(ManageDocumentAlter manageDocumentAlter, HttpServletResponse response) throws Exception {
+ List<ManageDocumentAlter> data = manageDocumentAlterMapper.pageManageDocumentAlter(new Page(-1, -1), QueryWrappers.queryWrappers(manageDocumentAlter)).getRecords();
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ String fileName = URLEncoder.encode("鏂囦欢鍙樻洿鍒楄〃瀵煎嚭", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ try {
+ // 鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ WriteSheet mainSheet = EasyExcel.writerSheet(0, "鏂囦欢鍙樻洿鍒楄〃瀵煎嚭").head(ManageDocumentAlter.class).build();
+ excelWriter.write(data, mainSheet);
+ // 鍏抽棴娴�
+ excelWriter.finish();
+ } catch (IOException e) {
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public int delManageDocumentAlter(Integer id) {
+ ManageDocumentAlter manageDocumentAlter = manageDocumentAlterMapper.selectById(id);
+ /*鍒犻櫎8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+ manageRecordAuditMapper.delete(Wrappers.<ManageRecordAudit>lambdaQuery()
+ .eq(ManageRecordAudit::getDocumentCode,manageDocumentAlter.getAlterBeforeCode())
+ .eq(ManageRecordAudit::getDocumentName,manageDocumentAlter.getAlterBeforeName())
+ .eq(ManageRecordAudit::getBeforeVersion,manageDocumentAlter.getAlterBeforeVersion())
+ .eq(ManageRecordAudit::getAfterVersion,manageDocumentAlter.getAlterAfterVersion())
+ .eq(ManageRecordAudit::getReason,manageDocumentAlter.getAlterNote())
+ .eq(ManageRecordAudit::getAlterUser,manageDocumentAlter.getCreateUser())
+ .eq(ManageRecordAudit::getMethod,"淇"));
+ return manageDocumentAlterMapper.deleteById(id);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentCancelServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentCancelServiceImpl.java
new file mode 100644
index 0000000..a97290a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentCancelServiceImpl.java
@@ -0,0 +1,146 @@
+package com.ruoyi.manage.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.system.mapper.UserMapper;
+
+
+import com.ruoyi.manage.mapper.ManageDocumentCancelMapper;
+import com.ruoyi.manage.mapper.ManageDocumentListMapper;
+import com.ruoyi.manage.mapper.ManageRecordAuditMapper;
+import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
+import com.ruoyi.manage.pojo.ManageDocumentCancel;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.service.ManageDocumentCancelService;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢浣滃簾 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 02:37:35
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageDocumentCancelServiceImpl extends ServiceImpl<ManageDocumentCancelMapper, ManageDocumentCancel> implements ManageDocumentCancelService {
+
+ @Resource
+ private ManageDocumentCancelMapper manageDocumentCancelMapper;
+
+ @Resource
+ private ManageRecordCheckMapper manageRecordCheckMapper;
+
+ @Resource
+ private ManageRecordAuditMapper manageRecordAuditMapper;
+
+
+
+ @Resource
+ private ManageDocumentListMapper manageDocumentListMapper;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Override
+ public IPage<ManageDocumentCancel> pageManageDocumentCancel(Page page, ManageDocumentCancel manageDocumentCancel) {
+ return manageDocumentCancelMapper.pageManageDocumentCancel(page, QueryWrappers.queryWrappers(manageDocumentCancel));
+ }
+
+ @Override
+ public int addManageDocumentCancel(ManageDocumentCancel manageDocumentCancel) {
+ manageDocumentCancel.setState("寰呭鏍�");
+ /*鏂板8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+ ManageRecordAudit manageRecordAudit = new ManageRecordAudit();
+ manageRecordAudit.setDocumentCode(manageDocumentCancel.getDocumentCode());
+ manageRecordAudit.setDocumentName(manageDocumentCancel.getName());
+ manageRecordAudit.setAlterThing("浣滃簾");
+ manageRecordAudit.setMethod("浣滃簾");
+ manageRecordAuditMapper.insert(manageRecordAudit);
+ return manageDocumentCancelMapper.insert(manageDocumentCancel);
+ }
+
+ @Override
+ public int checkManageDocumentCancel(Integer id, String state) {
+ ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.selectById(id);
+ if (state.equals("閫氳繃")){
+ //鍒犻櫎鏂囦欢娓呭崟瀵瑰簲鏁版嵁
+ manageDocumentListMapper.delete(Wrappers.<ManageDocumentList>lambdaQuery().eq(ManageDocumentList::getDocumentCode,manageDocumentCancel.getDocumentCode()));
+ }
+ manageDocumentCancel.setState(state);
+ /*鏂板8.4鐨勬枃浠跺鎵硅褰�*/
+ ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+ manageRecordCheck.setDocumentCode(manageDocumentCancel.getDocumentCode());
+ manageRecordCheck.setDocumentName(manageDocumentCancel.getName());
+ manageRecordCheck.setDocumentVersion(manageDocumentCancel.getVersion());
+ manageRecordCheck.setWriteUser(manageDocumentCancel.getCreateUser());
+ manageRecordCheck.setCheckUser(manageDocumentCancel.getCheckUser());
+ manageRecordCheck.setCheckState(manageDocumentCancel.getState());
+ manageRecordCheck.setRemark(manageDocumentCancel.getCancelNote());
+ manageRecordCheckMapper.insert(manageRecordCheck);
+ return manageDocumentCancelMapper.updateById(manageDocumentCancel);
+ }
+
+ @Override
+ public ManageDocumentCancel getManageDocumentCancel(Integer id) {
+ ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.getManageDocumentCancel(id);
+ String limsName = userMapper.selectUserDepartmentLimsName(manageDocumentCancel.getCreateUser());
+ manageDocumentCancel.setCreateUserDepartLims(limsName);
+ return manageDocumentCancel;
+ }
+
+ @Override
+ public void exportManageDocumentCancel(ManageDocumentCancel manageDocumentCancel, HttpServletResponse response) throws Exception{
+ List<ManageDocumentCancel> data = manageDocumentCancelMapper.pageManageDocumentCancel(new Page(-1, -1), QueryWrappers.queryWrappers(manageDocumentCancel)).getRecords();
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ String fileName = URLEncoder.encode("鏂囦欢浣滃簾鍒楄〃瀵煎嚭", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ try {
+ // 鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ WriteSheet mainSheet = EasyExcel.writerSheet(0, "鏂囦欢浣滃簾鍒楄〃瀵煎嚭").head(ManageDocumentCancel.class).build();
+ excelWriter.write(data, mainSheet);
+ // 鍏抽棴娴�
+ excelWriter.finish();
+ } catch (IOException e) {
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public int delManageDocumentCancel(Integer id) {
+ ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.selectById(id);
+ /*鍒犻櫎8.4鐨勬枃浠朵慨璁㈢敵璇峰鎵硅褰�*/
+ manageRecordAuditMapper.delete(Wrappers.<ManageRecordAudit>lambdaQuery()
+ .eq(ManageRecordAudit::getDocumentCode,manageDocumentCancel.getDocumentCode())
+ .eq(ManageRecordAudit::getDocumentName,manageDocumentCancel.getName())
+ .eq(ManageRecordAudit::getMethod,"浣滃簾"));
+ return manageDocumentCancelMapper.deleteById(id);
+ }
+
+ @Override
+ public int doManageDocumentCancel(ManageDocumentCancel manageDocumentCancel) {
+ return manageDocumentCancelMapper.updateById(manageDocumentCancel);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentControlledServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentControlledServiceImpl.java
new file mode 100644
index 0000000..06edf3c
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentControlledServiceImpl.java
@@ -0,0 +1,219 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.manage.mapper.ManageDocumentControlledMapper;
+import com.ruoyi.manage.mapper.ManageDocumentListMapper;
+import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
+import com.ruoyi.manage.pojo.ManageDocumentControlled;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.service.ManageDocumentControlledService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.OutputStream;
+import java.time.LocalDate;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙楁帶 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 02:54:44
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageDocumentControlledServiceImpl extends ServiceImpl<ManageDocumentControlledMapper, ManageDocumentControlled> implements ManageDocumentControlledService {
+
+ @Resource
+ private ManageDocumentControlledMapper manageDocumentControlledMapper;
+
+ @Resource
+ private ManageDocumentListMapper manageDocumentListMapper;
+
+ @Resource
+ private ManageRecordCheckMapper manageRecordCheckMapper;
+
+
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Override
+ public IPage<ManageDocumentControlled> pageManageDocumentControlled(Page page, ManageDocumentControlled manageDocumentControlled) {
+ return manageDocumentControlledMapper.pageManageDocumentControlled(page, QueryWrappers.queryWrappers(manageDocumentControlled));
+ }
+
+ @Override
+ public int addManageDocumentControlled(ManageDocumentControlled manageDocumentControlled) {
+ manageDocumentControlled.setState("寰呭鏍�");
+ String urlString;
+ String pathName;
+ String path;
+ if (ObjectUtils.isNotEmpty(manageDocumentControlled.getFile())) {
+ MultipartFile file = manageDocumentControlled.getFile();
+ //涓婁紶鏂版枃浠�
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ manageDocumentControlled.setUrl(pathName);
+ }
+ return manageDocumentControlledMapper.insert(manageDocumentControlled);
+ }
+
+ @Override
+ public int delManageDocumentControlled(Long id) {
+ ManageDocumentControlled manageDocumentControlled = manageDocumentControlledMapper.selectById(id);
+ if (ObjectUtils.isNotEmpty(manageDocumentControlled.getUrl())) {
+ // 鍒犻櫎鏃ф枃浠�
+ File oldFile = new File(wordUrl + "/" + manageDocumentControlled.getUrl());
+ oldFile.delete();
+ }
+ return manageDocumentControlledMapper.deleteById(id);
+ }
+
+ @Override
+ public ManageDocumentControlled getManageDocumentControlled(Long id) {
+ ManageDocumentControlled manageDocumentControlled = manageDocumentControlledMapper.getManageDocumentControlled(id);
+ //鑾峰彇閮ㄩ棬淇℃伅
+ String departmentLimsName = userMapper.selectUserDepartmentLimsName(manageDocumentControlled.getCreateUser());
+ manageDocumentControlled.setCreateUserDepartLims(departmentLimsName);
+ return manageDocumentControlled;
+ }
+
+ @Override
+ public int doManageDocumentControlled(ManageDocumentControlled manageDocumentControlled) {
+ ManageDocumentControlled manageDocumentControlled1 = manageDocumentControlledMapper.selectById(manageDocumentControlled.getId());
+ if (ObjectUtils.isNotEmpty(manageDocumentControlled.getFile())) {
+ if (ObjectUtils.isNotEmpty(manageDocumentControlled1.getUrl())) {
+ // 鍒犻櫎鏃ф枃浠�
+ File oldFile = new File(wordUrl + "/" + manageDocumentControlled1.getUrl());
+ oldFile.delete();
+ }
+ //涓婁紶鏂版枃浠�
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageDocumentControlled.getFile();
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ manageDocumentControlled.setUrl(pathName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ }
+ return manageDocumentControlledMapper.updateById(manageDocumentControlled);
+ }
+
+ @Override
+ public int checkManageDocumentControlled(ManageDocumentControlled manageDocumentControlled) {
+ ManageDocumentControlled documentControlled = manageDocumentControlledMapper.selectById(manageDocumentControlled.getId());
+ if (manageDocumentControlled.getState().equals("閫氳繃")) {
+ // 鍒犻櫎鏃ф枃浠�
+ File oldFile = new File(wordUrl + "/" + documentControlled.getUrl());
+ oldFile.delete();
+ //涓婁紶鏂版枃浠�
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageDocumentControlled.getFile();
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ manageDocumentControlled.setUrl(pathName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ //灏嗘枃浠跺彈鎺у凡鐭ユ枃浠舵竻鍗�
+ ManageDocumentList manageDocumentList = new ManageDocumentList();
+ manageDocumentList.setDocumentCode(documentControlled.getDocumentCode());
+ manageDocumentList.setType(documentControlled.getType());
+ manageDocumentList.setName(documentControlled.getName());
+ manageDocumentList.setVersion(documentControlled.getVersion());
+ manageDocumentList.setWriter(documentControlled.getWriter());
+ manageDocumentList.setEffectiveDate(LocalDate.now());
+ manageDocumentList.setState("鏈夋晥");
+ manageDocumentList.setUrl(manageDocumentControlled.getUrl());
+ manageDocumentListMapper.insert(manageDocumentList);
+ }
+ /*鏂板8.4鐨勬枃浠跺鎵硅褰�*/
+ ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+ manageRecordCheck.setDocumentCode(documentControlled.getDocumentCode());
+ manageRecordCheck.setDocumentName(documentControlled.getName());
+ manageRecordCheck.setDocumentVersion(documentControlled.getVersion());
+ manageRecordCheck.setWriteUser(userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName,documentControlled.getWriter())).getId());
+ manageRecordCheck.setCheckUser(documentControlled.getDutyUser());
+ manageRecordCheck.setCheckState(manageDocumentControlled.getState());
+ manageRecordCheck.setRemark(documentControlled.getInstructions());
+ manageRecordCheckMapper.insert(manageRecordCheck);
+ return manageDocumentControlledMapper.updateById(manageDocumentControlled);
+ }
+
+ @Override
+ public void checkManageDocumentControlledPdf(Long id, HttpServletResponse response) throws Exception {
+ ManageDocumentControlled manageDocumentControlled = manageDocumentControlledMapper.selectById(id);
+ File file = new File(wordUrl + "/" + manageDocumentControlled.getUrl());
+ FileInputStream fileInputStream = new FileInputStream(file);
+ response.setContentType("application/pdf");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Content-disposition", "inline;filename=" + file.getName());
+ response.setContentLength((int)file.length());
+ OutputStream os = response.getOutputStream();
+ // 灏嗘枃浠跺唴瀹瑰啓鍏ヨ緭鍑烘祦
+ byte[] buffer = new byte[4096];
+ int bytesRead;
+ while ((bytesRead = fileInputStream.read(buffer)) != -1) {
+ os.write(buffer, 0, bytesRead);
+ }
+ os.flush();
+ os.close();
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentIssueRecycleServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentIssueRecycleServiceImpl.java
new file mode 100644
index 0000000..74a57c4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentIssueRecycleServiceImpl.java
@@ -0,0 +1,202 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto;
+import com.ruoyi.manage.mapper.ManageDocumentIssueRecycleMapper;
+import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
+import com.ruoyi.manage.mapper.ManageRecordIssueRecycleMapper;
+import com.ruoyi.manage.pojo.ManageDocumentIssueRecycle;
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+import com.ruoyi.manage.service.ManageDocumentIssueRecycleService;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢鍙戞斁鍥炴敹 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 09:18:24
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageDocumentIssueRecycleServiceImpl extends ServiceImpl<ManageDocumentIssueRecycleMapper, ManageDocumentIssueRecycle> implements ManageDocumentIssueRecycleService {
+
+ @Resource
+ private ManageDocumentIssueRecycleMapper manageDocumentIssueRecycleMapper;
+
+
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Resource
+ private ManageRecordCheckMapper manageRecordCheckMapper;
+
+ @Resource
+ private ManageRecordIssueRecycleMapper manageRecordIssueRecycleMapper;
+
+ @Override
+ public IPage<ManageDocumentIssueRecycleDto> pageManageDocumentIssueRecycle(Page page, ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto) {
+ return manageDocumentIssueRecycleMapper.pageManageDocumentIssueRecycle(page, QueryWrappers.queryWrappers(manageDocumentIssueRecycleDto));
+ }
+
+ @Override
+ public ManageDocumentIssueRecycleDto getManageDocumentIssueRecycle(Long id) {
+ return manageDocumentIssueRecycleMapper.getManageDocumentIssueRecycle(id);
+ }
+
+ @Override
+ public void exportManageDocumentIssueRecycle(ManageDocumentIssueRecycleDto manageDocumentIssueRecycleDto, HttpServletResponse response)throws Exception {
+ List<ManageDocumentIssueRecycleDto> data = manageDocumentIssueRecycleMapper.pageManageDocumentIssueRecycle(new Page(-1, -1), QueryWrappers.queryWrappers(manageDocumentIssueRecycleDto)).getRecords();
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ String fileName = URLEncoder.encode("鏂囦欢鍙戞斁鍥炴敹瀵煎嚭", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ try {
+ // 鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ WriteSheet mainSheet = EasyExcel.writerSheet(0, "鏂囦欢鍙戞斁鍥炴敹瀵煎嚭").head(ManageDocumentIssueRecycleDto.class).build();
+ excelWriter.write(data, mainSheet);
+ // 鍏抽棴娴�
+ excelWriter.finish();
+ } catch (IOException e) {
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public int checkManageDocumentIssueRecycle(Integer id, String documentState) {
+ ManageDocumentIssueRecycle manageDocumentIssueRecycle = manageDocumentIssueRecycleMapper.selectById(id);
+ manageDocumentIssueRecycle.setDocumentState(documentState);
+ /*鏂板8.4鐨勬枃浠跺鎵硅褰�*/
+ ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+ manageRecordCheck.setDocumentCode(manageDocumentIssueRecycle.getDocumentCode());
+ manageRecordCheck.setDocumentName(manageDocumentIssueRecycle.getName());
+ manageRecordCheck.setDocumentVersion(manageDocumentIssueRecycle.getVersion());
+ manageRecordCheck.setCheckUser(manageDocumentIssueRecycle.getReceiveUser());
+ manageRecordCheck.setCheckState(documentState);
+ manageRecordCheckMapper.insert(manageRecordCheck);
+ return manageDocumentIssueRecycleMapper.updateById(manageDocumentIssueRecycle);
+ }
+
+ @Override
+ public int addManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle) {
+ manageDocumentIssueRecycle.setDocumentState("寰呭鏍�");
+ if (ObjectUtils.isNotEmpty(manageDocumentIssueRecycle.getFile())){
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageDocumentIssueRecycle.getFile();
+ //涓婁紶鏂版枃浠�
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ manageDocumentIssueRecycle.setUrl(pathName);
+ }
+ /*鏂板8.3鐨勫彂鏀句笌鍥炴敹璁板綍*/
+ ManageRecordIssueRecycle manageRecordIssueRecycle = new ManageRecordIssueRecycle();
+ manageRecordIssueRecycle.setDocumentCode(manageDocumentIssueRecycle.getDocumentCode());
+ manageRecordIssueRecycle.setDocumentName(manageDocumentIssueRecycle.getName());
+ manageRecordIssueRecycle.setDocumentVersion(manageDocumentIssueRecycle.getVersion());
+ manageRecordIssueRecycle.setReceiveUser(manageDocumentIssueRecycle.getIssueUser());
+ manageRecordIssueRecycle.setReceiveDate(manageDocumentIssueRecycle.getIssueDate());
+ manageRecordIssueRecycleMapper.insert(manageRecordIssueRecycle);
+ return manageDocumentIssueRecycleMapper.insert(manageDocumentIssueRecycle);
+ }
+
+ @Override
+ public int doManageDocumentIssueRecycle(ManageDocumentIssueRecycle manageDocumentIssueRecycle) {
+ ManageDocumentIssueRecycle documentIssueRecycle = manageDocumentIssueRecycleMapper.selectById(manageDocumentIssueRecycle.getId());
+ //鍒よ鏄惁鏄洖鏀�
+ if (ObjectUtils.isNotEmpty(manageDocumentIssueRecycle.getRecycleUser())){
+ /*鏂板8.3鐨勫彂鏀句笌鍥炴敹璁板綍*/
+ ManageRecordIssueRecycle manageRecordIssueRecycle = manageRecordIssueRecycleMapper.selectOne(Wrappers.<ManageRecordIssueRecycle>lambdaQuery()
+ .eq(ManageRecordIssueRecycle::getDocumentCode, documentIssueRecycle.getDocumentCode())
+ .eq(ManageRecordIssueRecycle::getDocumentName, documentIssueRecycle.getName())
+ .eq(ManageRecordIssueRecycle::getDocumentVersion, documentIssueRecycle.getVersion())
+ .eq(ManageRecordIssueRecycle::getReceiveUser, documentIssueRecycle.getIssueUser())
+ .eq(ManageRecordIssueRecycle::getReceiveDate, documentIssueRecycle.getIssueDate()));
+ manageRecordIssueRecycle.setSignedUser(manageDocumentIssueRecycle.getRecycleUser());
+ manageRecordIssueRecycle.setSignedDate(manageDocumentIssueRecycle.getRecycleDate());
+ manageRecordIssueRecycleMapper.updateById(manageRecordIssueRecycle);
+ }
+ if (ObjectUtils.isNotEmpty(manageDocumentIssueRecycle.getFile())) {
+ if (ObjectUtils.isNotEmpty(documentIssueRecycle.getUrl())) {
+ // 鍒犻櫎鏃ф枃浠�
+ File oldFile = new File(wordUrl + "/" + documentIssueRecycle.getUrl());
+ oldFile.delete();
+ }
+ //涓婁紶鏂版枃浠�
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageDocumentIssueRecycle.getFile();
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ manageDocumentIssueRecycle.setUrl(pathName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ }
+ return manageDocumentIssueRecycleMapper.updateById(manageDocumentIssueRecycle);
+ }
+
+ @Override
+ public int delManageDocumentIssueRecycle(Long id) {
+ ManageDocumentIssueRecycle documentIssueRecycle = manageDocumentIssueRecycleMapper.selectById(id);
+ manageRecordIssueRecycleMapper.delete(Wrappers.<ManageRecordIssueRecycle>lambdaQuery()
+ .eq(ManageRecordIssueRecycle::getDocumentCode, documentIssueRecycle.getDocumentCode())
+ .eq(ManageRecordIssueRecycle::getDocumentName, documentIssueRecycle.getName())
+ .eq(ManageRecordIssueRecycle::getDocumentVersion, documentIssueRecycle.getVersion())
+ .eq(ManageRecordIssueRecycle::getReceiveUser, documentIssueRecycle.getIssueUser())
+ .eq(ManageRecordIssueRecycle::getReceiveDate, documentIssueRecycle.getIssueDate()));
+ return manageDocumentIssueRecycleMapper.deleteById(id);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java
new file mode 100644
index 0000000..ef35755
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java
@@ -0,0 +1,98 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.lang.UUID;
+import com.aspose.words.License;
+import com.aspose.words.SaveFormat;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.manage.mapper.ManageDocumentListMapper;
+import com.ruoyi.manage.pojo.ManageDocumentList;
+import com.ruoyi.manage.service.ManageDocumentListService;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏂囦欢娓呭崟
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-08 11:08:11
+ */
+@Service
+public class ManageDocumentListServiceImpl extends ServiceImpl<ManageDocumentListMapper, ManageDocumentList> implements ManageDocumentListService {
+
+ @Resource
+ private ManageDocumentListMapper manageDocumentListMapper;
+
+
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Override
+ public IPage<ManageDocumentList> pageManageDocumentList(Page page, ManageDocumentList manageDocumentList) {
+ return manageDocumentListMapper.pageManageDocumentList(page, QueryWrappers.queryWrappers(manageDocumentList));
+ }
+
+
+ @Override
+ public int uploadFile(Integer id, MultipartFile file) {
+ String urlString;
+ String pathName;
+ String path;
+ ManageDocumentList manageDocumentList = manageDocumentListMapper.selectById(id);
+ if (ObjectUtils.isNotEmpty(manageDocumentList.getUrl())){
+ // 鍒犻櫎鏃ф枃浠�
+ File oldFile = new File(wordUrl + "/" + manageDocumentList.getUrl());
+ oldFile.delete();
+ }
+ //涓婁紶鏂版枃浠�
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ manageDocumentList.setUrl(pathName);
+ return manageDocumentListMapper.updateById(manageDocumentList);
+ }
+
+ @Override
+ public void importExcel(List<ManageDocumentList> list) {
+ if (CollectionUtil.isEmpty(list)) {
+ return;
+ }
+ list = list.stream().filter(manageDocumentList -> ObjectUtils.isNotEmpty(manageDocumentList.getName())).collect(Collectors.toList());
+ saveBatch(list);
+ }
+
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingParticipantsServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingParticipantsServiceImpl.java
new file mode 100644
index 0000000..4a1fbe6
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingParticipantsServiceImpl.java
@@ -0,0 +1,42 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.ManageMeetingMapper;
+import com.ruoyi.manage.mapper.ManageMeetingParticipantsMapper;
+import com.ruoyi.manage.pojo.ManageMeeting;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import com.ruoyi.manage.service.ManageMeetingParticipantsService;
+import com.ruoyi.manage.vo.MeetingParticipantsDetailsVo;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:34:27
+ */
+@Service
+public class ManageMeetingParticipantsServiceImpl extends ServiceImpl<ManageMeetingParticipantsMapper, ManageMeetingParticipants> implements ManageMeetingParticipantsService {
+
+
+ @Resource
+ private ManageMeetingMapper manageMeetingMapper;
+
+ @Override
+ public MeetingParticipantsDetailsVo getParticipants(Integer id) {
+ ManageMeeting manageMeeting = manageMeetingMapper.selectById(id);
+ QueryWrapper<ManageMeetingParticipants> queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("meeting_id",id);
+ List<ManageMeetingParticipants> participantsList = this.baseMapper.selectList(queryWrapper);
+ MeetingParticipantsDetailsVo vo = new MeetingParticipantsDetailsVo();
+ vo.setManageMeeting(manageMeeting);
+ vo.setParticipantsList(participantsList);
+ return vo;
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingServiceImpl.java
new file mode 100644
index 0000000..8e7e270
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageMeetingServiceImpl.java
@@ -0,0 +1,161 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.dto.ManageMeetingDto;
+import com.ruoyi.manage.dto.ManageMeetingParticipantsDto;
+import com.ruoyi.manage.mapper.ManageMeetingMapper;
+import com.ruoyi.manage.mapper.ManageMeetingParticipantsMapper;
+
+import com.ruoyi.manage.pojo.ManageMeeting;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+
+import com.ruoyi.manage.service.ManageMeetingService;
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-11 09:33:47
+ */
+@Service
+public class ManageMeetingServiceImpl extends ServiceImpl<ManageMeetingMapper, ManageMeeting> implements ManageMeetingService {
+
+
+ @Resource
+ private ManageMeetingParticipantsMapper manageMeetingParticipantsMapper;
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @Override
+ public IPage<ManageMeetingDto> page(Page page, String startTime, String endTime, String place) {
+ IPage<ManageMeetingDto> iPage = this.baseMapper.page(page, startTime, endTime, place);
+ for (ManageMeetingDto record : iPage.getRecords()) {
+ List<ManageMeetingParticipants> manageMeetingParticipants = manageMeetingParticipantsMapper.selectList(Wrappers.<ManageMeetingParticipants>lambdaQuery().eq(ManageMeetingParticipants::getMeetingId, record.getId()));
+ String collect = manageMeetingParticipants.stream().map(manageMeetingParticipants1 -> {
+ return manageMeetingParticipants1.getParticipants() + "";
+ }).collect(Collectors.joining(","));
+ record.setParticipant(collect);
+ }
+ return iPage;
+ }
+
+ @Override
+ public void addMeeting(ManageMeetingDto dto) {
+ this.baseMapper.insert(dto);
+
+ String[] ids = dto.getParticipant().split(",");
+ List<ManageMeetingParticipants> list = new ArrayList<>();
+ for (String id : ids) {
+ User user = userMapper.selectById(id);
+ ManageMeetingParticipants participants = new ManageMeetingParticipants();
+ participants.setMeetingId(dto.getId());
+ participants.setParticipants(Integer.parseInt(id));
+ participants.setDepartment(userMapper.selectUserDepartmentLimsName(user.getId()));
+ list.add(participants);
+ }
+ list.forEach(v -> manageMeetingParticipantsMapper.insert(v));
+ }
+
+ @Override
+ public int modifyMeeting(ManageMeetingDto manageMeetingDto) {
+ this.baseMapper.updateById(manageMeetingDto);
+ manageMeetingParticipantsMapper.delete(Wrappers.<ManageMeetingParticipants>lambdaQuery().eq(ManageMeetingParticipants::getMeetingId, manageMeetingDto.getId()));
+ String[] ids = manageMeetingDto.getParticipant().split(",");
+ List<ManageMeetingParticipants> list = new ArrayList<>();
+ for (String id : ids) {
+ User user = userMapper.selectById(id);
+ ManageMeetingParticipants participants = new ManageMeetingParticipants();
+ participants.setMeetingId(manageMeetingDto.getId());
+ participants.setParticipants(Integer.parseInt(id));
+ participants.setDepartment(userMapper.selectUserDepartmentLimsName(user.getId()));
+ list.add(participants);
+ }
+ list.forEach(v -> manageMeetingParticipantsMapper.insert(v));
+ return 0;
+ }
+
+ @Override
+ public void exportMeeting(Integer id, HttpServletResponse response) {
+ ManageMeeting meeting = baseMapper.selectById(id);
+ // 鏌ヨ鍙傚姞浜哄憳
+ List<ManageMeetingParticipants> manageMeetingParticipants = manageMeetingParticipantsMapper.selectList(Wrappers.<ManageMeetingParticipants>lambdaQuery().eq(ManageMeetingParticipants::getMeetingId, id));
+
+ List<ManageMeetingParticipants> list = manageMeetingParticipants.stream().map(manageMeetingParticipants1 -> {
+ manageMeetingParticipants1.setUserName(userMapper.selectById(manageMeetingParticipants1.getParticipants()).getName());
+ manageMeetingParticipants1.setDepartment(userMapper.selectUserDepartmentLimsName(manageMeetingParticipants1.getParticipants()));
+ return manageMeetingParticipants1;
+ }).collect(Collectors.toList());
+
+
+ // 鍒涘缓绌哄璞�
+ List<ManageMeetingParticipantsDto> participants = new ArrayList<>();
+
+ // 娣诲姞鍙傚姞浜哄憳
+ for (int i = 0; i < list.size(); i++) {
+ // 鍒ゆ柇鏈夋病鏈夊埌11琛�
+ if (i % 2 == 0) {
+ ManageMeetingParticipantsDto manageMeetingParticipantsDto = new ManageMeetingParticipantsDto();
+ manageMeetingParticipantsDto.setUserName1(list.get(i).getUserName());
+ manageMeetingParticipantsDto.setDepartment1(list.get(i).getDepartment());
+ participants.add(manageMeetingParticipantsDto);
+ } else {
+ participants.get((i-1)/2).setUserName2(list.get(i).getUserName());
+ participants.get((i-1)/2).setDepartment2(list.get(i).getDepartment());
+ }
+ }
+
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/review-meet.docx");
+
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+ Configure configure = Configure.builder()
+ .bind("meetingDetails", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("meeting", meeting);
+ put("meetingTime", meeting.getMeetingTime().format(formatter));
+ put("meetingDetails", participants);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "绠$悊璇勫浼氳璁板綍", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordAuditServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordAuditServiceImpl.java
new file mode 100644
index 0000000..6d4ef2b
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordAuditServiceImpl.java
@@ -0,0 +1,679 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+
+
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordAuditMapper;
+
+import com.ruoyi.manage.pojo.ManageRecordAudit;
+import com.ruoyi.manage.service.ManageRecordAuditService;
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.util.*;
+
+/**
+ * <p>
+ * 鏂囦欢淇鐢宠瀹℃壒璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 10:29:18
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordAuditServiceImpl extends ServiceImpl<ManageRecordAuditMapper, ManageRecordAudit> implements ManageRecordAuditService {
+
+ @Resource
+ private ManageRecordAuditMapper manageRecordAuditMapper;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+
+
+ @Override
+ public IPage<ManageRecordAudit> pageManageRecordAudit(Page page, ManageRecordAudit manageRecordAudit) {
+
+ IPage<ManageRecordAudit> manageRecordAuditIPage = manageRecordAuditMapper.pageManageRecordAudit(page, QueryWrappers.queryWrappers(manageRecordAudit));
+ for (ManageRecordAudit record : manageRecordAuditIPage.getRecords()) {
+ String limsName = userMapper.selectUserDepartmentLimsName(record.getCreateUser());
+ record.setCreateUserDepart(limsName);
+ }
+ return manageRecordAuditIPage;
+ }
+
+ @Override
+ public int addManageRecordAudit(ManageRecordAudit manageRecordAudit) {
+ if (ObjectUtils.isNotEmpty(manageRecordAudit.getFile())) {
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageRecordAudit.getFile();
+ //涓婁紶鏂版枃浠�
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ manageRecordAudit.setAfterUrl(pathName);
+ }
+ manageRecordAudit.setCreateTime(LocalDate.now());
+ return manageRecordAuditMapper.insert(manageRecordAudit);
+ }
+
+ @Override
+ public int doManageRecordAudit(ManageRecordAudit manageRecordAudit) {
+ ManageRecordAudit recordAudit= manageRecordAuditMapper.selectById(manageRecordAudit.getId());
+ if (ObjectUtils.isNotEmpty(manageRecordAudit.getFile())) {
+ if (ObjectUtils.isNotEmpty(recordAudit.getAfterUrl())) {
+ // 鍒犻櫎鏃ф枃浠�
+ File oldFile = new File(wordUrl + "/" + recordAudit.getAfterUrl());
+ oldFile.delete();
+ }
+ //涓婁紶鏂版枃浠�
+ String urlString;
+ String pathName;
+ String path;
+ MultipartFile file = manageRecordAudit.getFile();
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ manageRecordAudit.setAfterUrl(pathName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ return 0;
+ }
+ }
+ return manageRecordAuditMapper.updateById(manageRecordAudit);
+ }
+
+ @Override
+ public int ratifyManageRecordAudit(Integer id) {
+ ManageRecordAudit recordAudit = manageRecordAuditMapper.selectById(id);
+ recordAudit.setRatifyUser(SecurityUtils.getUserId().intValue());
+ return manageRecordAuditMapper.updateById(recordAudit);
+ }
+
+ @Override
+ public String exportOutManageRecordAudit(ManageRecordAudit manageRecordAudit, HttpServletResponse response) {
+ List<ManageRecordAudit> manageRecordAuditList = manageRecordAuditMapper.pageManageRecordAudit(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordAudit)).getRecords();
+ for (ManageRecordAudit record : manageRecordAuditList) {
+ String limsName = userMapper.selectUserDepartmentLimsName(record.getCreateUser());
+ record.setCreateUserDepart(limsName);
+ }
+ //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+ String url;
+ try {
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/audit-deal.docx");
+ File file = File.createTempFile("temp", ".tmp");
+ OutputStream outputStream = new FileOutputStream(file);
+ IOUtils.copy(inputStream, outputStream);
+ url = file.getAbsolutePath();
+ inputStream.close();
+ outputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+
+ List<Map<String, Object>> auditList = new ArrayList<>();
+ Integer index = 1;
+ Integer index1 = 1;
+ for (int c = 0; c < manageRecordAuditList.size(); c++) {
+ //瓒呰繃15琛屾崲椤�
+ if (c % 15 == 0) {
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛ㄦ牸鐨勮鏁�
+ for (int i = 0; i < 17; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //琛ㄦ牸鐨勫垪鏁�
+ for (int j = 0; j < 11; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i == 0) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.鈭�1");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒�
+ textRenderData.setText("鏂囦欢缂栧彿@File number鈭�2");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒�
+ textRenderData.setText("绔犺妭鍙稝Chapter number鈭�3");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒�
+ textRenderData.setText("椤电爜@Page number鈭�4");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒�
+ textRenderData.setText("淇娆℃暟@Number of revisions鈭�5");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5 || j == 6) {
+ //绗叚鍒�
+ textRenderData.setText("鐗堟湰鍙� Version number鈭�6");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ //绗竷鍒�
+ textRenderData.setText("淇鍐呭@Revision of contents鈭�7");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 8) {
+ //绗叓鍒�
+ textRenderData.setText("淇浜篅Revised鈭�8");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 9 ) {
+ //绗節鍒�
+ textRenderData.setText("鎵瑰噯浜篅Approver鈭�9");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ //绗崄鍒�
+ textRenderData.setText("鏃ユ湡@Date鈭�10");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i == 1) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.鈭�1");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒�
+ textRenderData.setText("鏂囦欢缂栧彿@File number鈭�2");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒�
+ textRenderData.setText("绔犺妭鍙稝Chapter number鈭�3");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒�
+ textRenderData.setText("椤电爜@Page number鈭�4");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒�
+ textRenderData.setText("淇娆℃暟@Number of revisions鈭�5");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5 ) {
+ //绗叚鍒�
+ textRenderData.setText("淇敼鍓岪Before modification");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ //绗竷鍒�
+ textRenderData.setText("淇敼鍚嶡After modification");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j == 7) {
+ //绗竷鍒�
+ textRenderData.setText("淇鍐呭@Revision of contents鈭�7");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 8) {
+ //绗叓鍒�
+ textRenderData.setText("淇浜篅Revised鈭�8");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 9 ) {
+ //绗節鍒�
+ textRenderData.setText("鎵瑰噯浜篅Approver鈭�9");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ //绗崄鍒�
+ textRenderData.setText("鏃ユ湡@Date鈭�10");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else {
+ //鍏朵粬琛�
+ if (j == 0) {
+ //绗竴鍒�
+ try {
+ String insReportCode = manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getDocumentCode();
+ textRenderData.setText(index + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ index++;
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getDocumentCode());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getCapter());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getPages());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getNumber()+"");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getBeforeVersion());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getAfterVersion());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getAlterThing());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 8) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getAlterUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }else if (j == 9) {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getRatifyUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ try {
+ textRenderData.setText(manageRecordAuditList.get((i - 2) + (index1 - 1) * 15).getDate()+"");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(14);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+ Map<String, Object> table = new HashMap<>();
+ table.put("audit", tableRenderData);
+ table.put("index1", index1);
+ auditList.add(table);
+ index1++;
+ }
+ }
+ Integer finalIndex = index1;
+ XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("size", finalIndex);
+ put("cancelList", auditList);
+ }});
+ String name = UUID.randomUUID() + "_鏂囦欢淇琛�" + ".docx";
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ String path = wordUrl + "/" + name;
+ // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+ try {
+ ZipSecureFile.setMinInflateRatio(0.0001);
+ FileInputStream stream = new FileInputStream(path);
+ XWPFDocument document = new XWPFDocument(stream);
+ List<XWPFTable> xwpfTables = document.getTables();
+ for (int i = 0; i < xwpfTables.size(); i++) {
+ Set<String> set1 = new HashSet<>();
+ Map<String, Map<String, Integer>> maps = new HashMap<>();
+ for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+ String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+ if (set1.add(split[1])) {
+ Map<String, Integer> map = new HashMap<>();
+ map.put("sr", j);
+ map.put("sc", k);
+ map.put("er", j + 0);
+ map.put("ec", k + 0);
+ maps.put(split[1], map);
+ } else {
+ Map<String, Integer> map1 = maps.get(split[1]);
+ if (j == map1.get("sr")) {
+ map1.put("ec", map1.get("ec") + 1);
+ } else if (k == map1.get("sc")) {
+ map1.put("er", map1.get("er") + 1);
+ }
+ }
+ String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+ List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+ entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+ // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+ List<String> list = new ArrayList<>();
+ for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+ list.add(entry.getKey());
+ }
+ for (int a = list.size() - 1; a >= 0; a--) {
+ Map<String, Integer> v = maps.get(list.get(a));
+ for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+ if (v.get("ec") > v.get("sc")) {
+ try {
+ mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+// TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ if (v.get("er") > v.get("sr")) {
+ try {
+ mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+// TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream = new FileOutputStream(path);
+ document.write(fileOutputStream);
+ fileOutputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 0; i < xwpfTables1.size(); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return name;
+ }
+
+ // 姘村钩鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+ for (int i = fromCol; i <= toCol; i++) {
+ if (i == fromCol) {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+
+ // 鍨傜洿鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+ for (int i = fromRow; i <= toRow; i++) {
+ if (i == fromRow) {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java
new file mode 100644
index 0000000..ad17167
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java
@@ -0,0 +1,486 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordCancelMapper;
+import com.ruoyi.manage.pojo.ManageRecordCancel;
+
+import com.ruoyi.manage.service.ManageRecordCancelService;
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滃簾鏂囦欢閿�榄傝褰� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 01:27:22
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordCancelServiceImpl extends ServiceImpl<ManageRecordCancelMapper, ManageRecordCancel> implements ManageRecordCancelService {
+
+ @Resource
+ private ManageRecordCancelMapper manageRecordCancelMapper;
+
+
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Override
+ public IPage<ManageRecordCancel> pageManageRecordCancel(Page page, ManageRecordCancel manageRecordCancel) {
+ return manageRecordCancelMapper.pageManageRecordCancel(page, QueryWrappers.queryWrappers(manageRecordCancel));
+ }
+
+ @Override
+ public int ratifyManageRecordCancel(Integer id, String ratifyState) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ ManageRecordCancel manageRecordCancel = manageRecordCancelMapper.selectById(id);
+ manageRecordCancel.setRatifyUser(userId);
+ manageRecordCancel.setRatifyTime(LocalDate.now());
+ manageRecordCancel.setRatifyState(ratifyState);
+ return manageRecordCancelMapper.updateById(manageRecordCancel);
+ }
+
+ @Override
+ public String exportOutManageRecordCancel(ManageRecordCancel manageRecordCancel, HttpServletResponse response) {
+ List<ManageRecordCancel> manageRecordCancelList = manageRecordCancelMapper.pageManageRecordCancel(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordCancel)).getRecords();
+ //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+ String url;
+ try {
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/cancel-deal.docx");
+ File file = File.createTempFile("temp", ".tmp");
+ OutputStream outputStream = new FileOutputStream(file);
+ IOUtils.copy(inputStream, outputStream);
+ url = file.getAbsolutePath();
+ inputStream.close();
+ outputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+
+ List<Map<String, Object>> cancelList = new ArrayList<>();
+ Integer index = 1;
+ Integer index1 = 1;
+ for (int c = 0; c < manageRecordCancelList.size(); c++) {
+ //瓒呰繃15琛屾崲椤�
+ if (c % 15 == 0) {
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛ㄦ牸鐨勮鏁�
+ for (int i = 0; i < 16; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //琛ㄦ牸鐨勫垪鏁�
+ for (int j = 0; j < 10; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i == 0) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒�
+ textRenderData.setText("鏂囦欢缂栧彿@File number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒�
+ textRenderData.setText("鏂囦欢(璁板綍)鍚嶇О@File (record) name");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒�
+ textRenderData.setText("鏁伴噺@Quantity");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒�
+ textRenderData.setText("閿�姣佸師鍥燖Reason for destruction");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ //绗叚鍒�
+ textRenderData.setText("鐢宠浜篅Applicant");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ //绗竷鍒�
+ textRenderData.setText("鏃ユ湡@Date");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ //绗叓鍒�
+ textRenderData.setText("鎵瑰噯@Approve");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 8 ) {
+ //绗節鍒�
+ textRenderData.setText("鏃ユ湡@Date");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ //绗崄鍒�
+ textRenderData.setText("澶囨敞@Remark");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else {
+ //鍏朵粬琛�
+ if (j == 0) {
+ //绗竴鍒�
+ try {
+ String insReportCode = manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getDocumentCode();
+ textRenderData.setText(index + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ index++;
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getDocumentCode());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getDocumentName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getQty()+"");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getReason());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getCreateUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getCreateTime()+"");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getRatifyUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 8) {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getRatifyTime()+"");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }else {
+ try {
+ textRenderData.setText(manageRecordCancelList.get((i - 1) + (index1 - 1) * 15).getRemark());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(14);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+ Map<String, Object> table = new HashMap<>();
+ table.put("cancel", tableRenderData);
+ table.put("index1", index1);
+ cancelList.add(table);
+ index1++;
+ }
+ }
+ Integer finalIndex = index1;
+ XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("size", finalIndex);
+ put("cancelList", cancelList);
+ }});
+ String name = UUID.randomUUID() + "_鏂囦欢閿�姣佺敵璇疯〃" + ".docx";
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ String path = wordUrl + "/" + name;
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 0; i < xwpfTables1.size(); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return name;
+ }
+
+ @Override
+ public int exportInManageRecordCancel(MultipartFile file) {
+ List<ManageRecordCancel> manageRecordCancelList = new ArrayList<>();
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ try {
+ InputStream inputStream = file.getInputStream();
+ XWPFDocument document = new XWPFDocument(inputStream);
+ List<XWPFTable> tables = document.getTables();
+ if (tables.isEmpty()) {
+ throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+ }
+
+ for (XWPFTable table : tables) {
+ List<XWPFTableRow> rows = table.getRows();
+ if (rows.size() <= 1) {
+ throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+ }
+ for (int i = 1; i < rows.size(); i++) { // 浠庣浜岃寮�濮嬶紝璺宠繃琛ㄥご
+ XWPFTableRow row = rows.get(i);
+ if (row.getTableCells().size() != 10) {
+ continue;
+ }
+ if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+ ManageRecordCancel manageRecordCancel = new ManageRecordCancel();
+ manageRecordCancel.setDocumentCode(row.getCell(1).getText());
+ manageRecordCancel.setDocumentName(row.getCell(2).getText());
+ manageRecordCancel.setQty(Integer.valueOf(row.getCell(3).getText()));
+ manageRecordCancel.setReason(row.getCell(4).getText());
+ try {
+ manageRecordCancel.setCreateUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, row.getCell(5).getText())).getId());
+ } catch (Exception e) {
+ manageRecordCancel.setCreateUser(null);
+ }
+ try {
+ manageRecordCancel.setRatifyUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, row.getCell(7).getText())).getId());
+ } catch (Exception e) {
+ manageRecordCancel.setRatifyUser(null);
+ }
+ try {
+ manageRecordCancel.setCreateTime(LocalDate.parse(row.getCell(6).getText(), dateTimeFormatter));
+ } catch (Exception e) {
+ manageRecordCancel.setCreateTime(null);
+ }
+ try {
+ manageRecordCancel.setRatifyTime(LocalDate.parse(row.getCell(8).getText(), dateTimeFormatter));
+ } catch (Exception e) {
+ manageRecordCancel.setRatifyTime(null);
+ }
+ manageRecordCancel.setRemark(row.getCell(9).getText());
+ ManageRecordCancel cancel = manageRecordCancelMapper.selectOne(Wrappers.<ManageRecordCancel>lambdaQuery()
+ .eq(ManageRecordCancel::getDocumentCode, manageRecordCancel.getDocumentCode())
+ .eq(ManageRecordCancel::getDocumentName, manageRecordCancel.getDocumentName()));
+ if (ObjectUtils.isNotEmpty(cancel)) {
+ manageRecordCancel.setId(cancel.getId());
+ }
+ manageRecordCancelList.add(manageRecordCancel);
+ }
+ }
+ }
+ if(CollectionUtils.isEmpty(manageRecordCancelList)){
+ throw new RuntimeException("瀵煎叆妯℃澘鏈夎");
+ }
+ saveOrUpdateBatch(manageRecordCancelList);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCheckServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCheckServiceImpl.java
new file mode 100644
index 0000000..5c67cf5
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCheckServiceImpl.java
@@ -0,0 +1,475 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+
+
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
+
+import com.ruoyi.manage.pojo.ManageRecordCheck;
+
+import com.ruoyi.manage.service.ManageRecordCheckService;
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏂囦欢瀹℃壒璁板綍(鍚慨璁㈠悗鍐嶆瀹℃壒璁板綍) 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 02:31:36
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordCheckServiceImpl extends ServiceImpl<ManageRecordCheckMapper, ManageRecordCheck> implements ManageRecordCheckService {
+
+ @Resource
+ private ManageRecordCheckMapper manageRecordCheckMapper;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Resource
+ private UserMapper userMapper;
+
+
+
+ @Override
+ public IPage<ManageRecordCheck> pageManageRecordCheck(Page page, ManageRecordCheck manageRecordCheck) {
+ return manageRecordCheckMapper.pageManageRecordCheck(page, QueryWrappers.queryWrappers(manageRecordCheck));
+ }
+
+ @Override
+ public int checkManageRecordCheck(Integer id, String checkState) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ ManageRecordCheck manageRecordCheck = manageRecordCheckMapper.selectById(id);
+ manageRecordCheck.setCheckState(checkState);
+ manageRecordCheck.setCheckUser(userId);
+ return manageRecordCheckMapper.updateById(manageRecordCheck);
+ }
+
+ @Override
+ public int ratifyManageRecordCheck(Integer id, String ratifyState) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ ManageRecordCheck manageRecordCheck = manageRecordCheckMapper.selectById(id);
+ manageRecordCheck.setRatifyState(ratifyState);
+ manageRecordCheck.setRatifyUser(userId);
+ return manageRecordCheckMapper.updateById(manageRecordCheck);
+ }
+
+ @Override
+ public String exportOutManageRecordCheck(ManageRecordCheck manageRecordCheck, HttpServletResponse response) {
+ List<ManageRecordCheck> manageRecordCheckList = manageRecordCheckMapper.pageManageRecordCheck(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordCheck)).getRecords();
+ //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+ String url;
+ try {
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/check-deal.docx");
+ File file = File.createTempFile("temp", ".tmp");
+ OutputStream outputStream = new FileOutputStream(file);
+ IOUtils.copy(inputStream, outputStream);
+ url = file.getAbsolutePath();
+ inputStream.close();
+ outputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+
+ List<Map<String, Object>> checkList = new ArrayList<>();
+ Integer index = 1;
+ Integer index1 = 1;
+ for (int c = 0; c < manageRecordCheckList.size(); c++) {
+ //瓒呰繃20琛屾崲椤�
+ if (c % 20 == 0) {
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛ㄦ牸鐨勮鏁�
+ for (int i = 0; i < 21; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //琛ㄦ牸鐨勫垪鏁�
+ for (int j = 0; j < 9; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i == 0) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒�
+ textRenderData.setText("鏂囦欢鍚嶇О@File name");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒�
+ textRenderData.setText("鏂囦欢缂栧彿@File number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒�
+ textRenderData.setText("鐗�/娆Edition/time");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒�
+ textRenderData.setText("缂栧埗@Editor");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ //绗叚鍒�
+ textRenderData.setText("瀹℃牳@Audit");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ //绗竷鍒�
+ textRenderData.setText("鎵瑰噯@Approve");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ //绗叓鍒�
+ textRenderData.setText("鎵瑰噯鏃ユ湡@Date of approve");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ //绗節鍒�
+ textRenderData.setText("澶囨敞@Remark");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ } else {
+ //鍏朵粬琛�
+ if (j == 0) {
+ //绗竴鍒�
+ try {
+ String insReportCode = manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getDocumentName();
+ textRenderData.setText(index + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ index++;
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ try {
+ textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getDocumentName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ try {
+ textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getDocumentCode());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ try {
+ textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getDocumentVersion());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ try {
+ textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getWriteUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ try {
+ textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getCheckUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ try {
+ textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getRatifyUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ try {
+ textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getRatifyDate() + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ try {
+ textRenderData.setText(manageRecordCheckList.get((i - 1) + (index1 - 1) * 20).getRemark());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(14);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+ Map<String, Object> table = new HashMap<>();
+ table.put("check", tableRenderData);
+ table.put("index1", index1);
+ checkList.add(table);
+ index1++;
+ }
+ }
+ Integer finalIndex = index1;
+ XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("size", finalIndex);
+ put("checkList", checkList);
+ }});
+ String name = UUID.randomUUID() + "_鏂囦欢瀹℃壒璁板綍" + ".docx";
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ String path = wordUrl + "/" + name;
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 0; i < xwpfTables1.size(); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return name;
+ }
+
+ @Override
+ public int exportInManageRecordCheck(MultipartFile file) {
+ List<ManageRecordCheck> manageRecordCheckList = new ArrayList<>();
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ try {
+ InputStream inputStream = file.getInputStream();
+ XWPFDocument document = new XWPFDocument(inputStream);
+ List<XWPFTable> tables = document.getTables();
+ if (tables.isEmpty()) {
+ throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+ }
+
+ for (XWPFTable table : tables) {
+ List<XWPFTableRow> rows = table.getRows();
+ if (rows.size() <= 1) {
+ throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+ }
+ for (int i = 1; i < rows.size(); i++) { // 浠庣浜岃寮�濮嬶紝璺宠繃琛ㄥご
+ XWPFTableRow row = rows.get(i);
+ if (row.getTableCells().size() != 9) {
+ continue;
+ }
+ if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+ ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
+ manageRecordCheck.setDocumentName(row.getCell(1).getText());
+ manageRecordCheck.setDocumentCode(row.getCell(2).getText());
+ manageRecordCheck.setDocumentVersion(row.getCell(3).getText());
+ try {
+ manageRecordCheck.setWriteUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, row.getCell(4).getText())).getId());
+ } catch (Exception e) {
+ manageRecordCheck.setWriteUser(null);
+ }
+ try {
+ manageRecordCheck.setCheckUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, row.getCell(5).getText())).getId());
+ } catch (Exception e) {
+ manageRecordCheck.setCheckUser(null);
+ }
+ try {
+ manageRecordCheck.setRatifyUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, row.getCell(6).getText())).getId());
+ } catch (Exception e) {
+ manageRecordCheck.setRatifyUser(null);
+ }
+ try {
+ manageRecordCheck.setRatifyDate(LocalDate.parse(row.getCell(7).getText(), dateTimeFormatter));
+ } catch (Exception e) {
+ manageRecordCheck.setRatifyDate(null);
+ }
+
+ manageRecordCheck.setRemark(row.getCell(8).getText());
+ ManageRecordCheck check = manageRecordCheckMapper.selectOne(Wrappers.<ManageRecordCheck>lambdaQuery()
+ .eq(ManageRecordCheck::getDocumentCode, manageRecordCheck.getDocumentCode())
+ .eq(ManageRecordCheck::getDocumentName, manageRecordCheck.getDocumentName())
+ .eq(ManageRecordCheck::getDocumentVersion, manageRecordCheck.getDocumentVersion()));
+ if (ObjectUtils.isNotEmpty(check)) {
+ manageRecordCheck.setId(check.getId());
+ }
+ manageRecordCheckList.add(manageRecordCheck);
+ }
+ }
+ }
+ saveOrUpdateBatch(manageRecordCheckList);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsServiceImpl.java
new file mode 100644
index 0000000..9b24dc6
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsServiceImpl.java
@@ -0,0 +1,528 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+
+
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordIntervalsMapper;
+import com.ruoyi.manage.mapper.ManageRecordIntervalsTotalMapper;
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import com.ruoyi.manage.service.ManageRecordIntervalsService;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 10:54:31
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordIntervalsServiceImpl extends ServiceImpl<ManageRecordIntervalsMapper, ManageRecordIntervals> implements ManageRecordIntervalsService {
+
+ @Resource
+ private ManageRecordIntervalsMapper manageRecordIntervalsMapper;
+
+ @Resource
+ private ManageRecordIntervalsTotalMapper manageRecordIntervalsTotalMapper;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Override
+ public IPage<ManageRecordIntervals> pageManageRecordIntervals(Page page, ManageRecordIntervals manageRecordIntervals) {
+ return manageRecordIntervalsMapper.pageManageRecordIntervals(page, QueryWrappers.queryWrappers(manageRecordIntervals));
+ }
+
+ @Override
+ public String exportOutManageRecordIntervals(ManageRecordIntervals manageRecordIntervals, HttpServletResponse response) {
+ List<ManageRecordIntervals> manageRecordIntervalsList = manageRecordIntervalsMapper.pageManageRecordIntervals(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordIntervals)).getRecords();
+ //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+ String url;
+ try {
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/intervals-deal.docx");
+ File file = File.createTempFile("temp", ".tmp");
+ OutputStream outputStream = new FileOutputStream(file);
+ IOUtils.copy(inputStream, outputStream);
+ url = file.getAbsolutePath();
+ inputStream.close();
+ outputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+
+ List<Map<String, Object>> intervalsList = new ArrayList<>();
+ Integer index = 1;
+ Integer index1 = 1;
+ for (int c = 0; c < manageRecordIntervalsList.size(); c++) {
+ //瓒呰繃15琛屾崲椤�
+ if (c % 15 == 0) {
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛ㄦ牸鐨勮鏁�
+ for (int i = 0; i < 17; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //琛ㄦ牸鐨勫垪鏁�
+ for (int j = 0; j < 7; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i == 0) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒�
+ textRenderData.setText("鏂囦欢鍚嶇О@File name");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒�
+ textRenderData.setText("鏂囦欢缂栧彿@File number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒�
+ textRenderData.setText("鐗堟湰鍙稝Version number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒�
+ textRenderData.setText("淇鍙稝Revision number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ //绗叚鍒�
+ textRenderData.setText("閫傚疁鎬Suitability");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ //绗竷鍒�
+ textRenderData.setText("澶囨敞@Remark");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i == 16) {
+ //鏈�鍚庝竴琛�
+ textRenderData.setText("娉細閫傚疁鎬т竴鏍忔墦鈥溾垰鈥濊〃姝ゆ枃浠堕�傚疁锛屸�溍椻�濊〃绀轰笉閫傚疁锛屾枃浠堕渶淇鎴栦綔搴熴�侤Note:The鈥溾垰鈥漷able in the suitability column is suitable for this document, the鈥溍椻�漷able is not suitable,and the document needs to berevised or invalidated @瀹℃煡鏃ユ湡锛� @Review Date:@鍙傚姞瀹℃煡浜哄憳绛惧悕锛欯Signatures of the reviewers particip ating in the review:鈭�1");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ //鍏朵粬琛�
+ if (j == 0) {
+ //绗竴鍒�
+ try {
+ String insReportCode = manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentCode();
+ textRenderData.setText(index + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ index++;
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentCode());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentVersion());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i -1) + (index1 - 1) * 15).getRevision());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getSuitability());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getRemark() );
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(14);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+ Map<String, Object> table = new HashMap<>();
+ table.put("intervals", tableRenderData);
+ table.put("index1", index1);
+ intervalsList.add(table);
+ index1++;
+ }
+ }
+ Integer finalIndex = index1;
+ XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("size", finalIndex);
+ put("intervalsList", intervalsList);
+ }});
+ String name = UUID.randomUUID() + "_鏂囦欢瀹氭湡瀹℃煡璁板綍琛�" + ".docx";
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ String path = wordUrl + "/" + name;
+ // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+ try {
+ ZipSecureFile.setMinInflateRatio(0.0001);
+ FileInputStream stream = new FileInputStream(path);
+ XWPFDocument document = new XWPFDocument(stream);
+ List<XWPFTable> xwpfTables = document.getTables();
+ for (int i = 0; i < xwpfTables.size(); i++) {
+ Set<String> set1 = new HashSet<>();
+ Map<String, Map<String, Integer>> maps = new HashMap<>();
+ for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+ String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+ if (set1.add(split[1])) {
+ Map<String, Integer> map = new HashMap<>();
+ map.put("sr", j);
+ map.put("sc", k);
+ map.put("er", j + 0);
+ map.put("ec", k + 0);
+ maps.put(split[1], map);
+ } else {
+ Map<String, Integer> map1 = maps.get(split[1]);
+ if (j == map1.get("sr")) {
+ map1.put("ec", map1.get("ec") + 1);
+ } else if (k == map1.get("sc")) {
+ map1.put("er", map1.get("er") + 1);
+ }
+ }
+ String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+ List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+ entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+ // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+ List<String> list = new ArrayList<>();
+ for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+ list.add(entry.getKey());
+ }
+ for (int a = list.size() - 1; a >= 0; a--) {
+ Map<String, Integer> v = maps.get(list.get(a));
+ for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+ if (v.get("ec") > v.get("sc")) {
+ try {
+ mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+// TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ if (v.get("er") > v.get("sr")) {
+ try {
+ mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+// TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream = new FileOutputStream(path);
+ document.write(fileOutputStream);
+ fileOutputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 0; i < xwpfTables1.size(); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return name;
+ }
+
+ @Override
+ public int exportInManageRecordIntervals(MultipartFile file) {
+ List<ManageRecordIntervals> manageRecordIntervalsList = new ArrayList<>();
+
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ //鑾峰彇褰撳墠骞翠唤
+ LocalDate currentDate = LocalDate.now();
+ // 瀹氫箟鏃ユ湡鏍煎紡
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+ // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+ String currentMonth = currentDate.format(formatter);
+ ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectOne(Wrappers.<ManageRecordIntervalsTotal>lambdaQuery().eq(ManageRecordIntervalsTotal::getYear, currentMonth));
+ try {
+ InputStream inputStream = file.getInputStream();
+ XWPFDocument document = new XWPFDocument(inputStream);
+ List<XWPFTable> tables = document.getTables();
+ if (tables.isEmpty()) {
+ throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+ }
+ for (XWPFTable table : tables) {
+ List<XWPFTableRow> rows = table.getRows();
+ if (rows.size() <= 1) {
+ throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+ }
+ for (int i = 1; i < rows.size(); i++) { // 浠庣浜岃寮�濮嬶紝璺宠繃琛ㄥご
+ XWPFTableRow row = rows.get(i);
+ if (row.getTableCells().size() != 7) {
+ continue;
+ }
+ if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+ ManageRecordIntervals manageRecordIntervals = new ManageRecordIntervals();
+ manageRecordIntervals.setDocumentName(row.getCell(1).getText());
+ manageRecordIntervals.setDocumentCode(row.getCell(2).getText());
+ manageRecordIntervals.setDocumentVersion(row.getCell(3).getText());
+ manageRecordIntervals.setRevision(row.getCell(4).getText());
+ manageRecordIntervals.setSuitability(row.getCell(5).getText());
+ manageRecordIntervals.setRemark(row.getCell(6).getText());
+ manageRecordIntervals.setRecordIntervalsTotalId(manageRecordIntervalsTotal.getId());
+ ManageRecordIntervals intervals = manageRecordIntervalsMapper.selectOne(Wrappers.<ManageRecordIntervals>lambdaQuery()
+ .eq(ManageRecordIntervals::getDocumentCode, manageRecordIntervals.getDocumentCode())
+ .eq(ManageRecordIntervals::getDocumentName, manageRecordIntervals.getDocumentName())
+ .eq(ManageRecordIntervals::getRecordIntervalsTotalId, manageRecordIntervalsTotal.getId())
+ .eq(ManageRecordIntervals::getDocumentVersion, manageRecordIntervals.getDocumentVersion()));
+ if (ObjectUtils.isNotEmpty(intervals)) {
+ manageRecordIntervals.setId(intervals.getId());
+ }
+ manageRecordIntervalsList.add(manageRecordIntervals);
+ }
+ }
+ }
+ saveOrUpdateBatch(manageRecordIntervalsList);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+
+ @Override
+ public int addManageRecordIntervals(ManageRecordIntervals manageRecordIntervals) {
+ //鑾峰彇褰撳墠骞翠唤
+ LocalDate currentDate = LocalDate.now();
+ // 瀹氫箟鏃ユ湡鏍煎紡
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+ // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+ String currentMonth = currentDate.format(formatter);
+ ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectOne(Wrappers.<ManageRecordIntervalsTotal>lambdaQuery().eq(ManageRecordIntervalsTotal::getYear, currentMonth));
+ manageRecordIntervals.setRecordIntervalsTotalId(manageRecordIntervalsTotal.getId());
+ manageRecordIntervalsMapper.insert(manageRecordIntervals);
+ manageRecordIntervalsTotal.setTotalNum(1 + manageRecordIntervalsTotal.getTotalNum());
+ return manageRecordIntervalsTotalMapper.updateById(manageRecordIntervalsTotal);
+ }
+
+ @Override
+ public int delManageRecordIntervals(Integer id) {
+ ManageRecordIntervals manageRecordIntervals = manageRecordIntervalsMapper.selectById(id);
+ manageRecordIntervalsMapper.deleteById(id);
+ ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectById(manageRecordIntervals.getRecordIntervalsTotalId());
+ manageRecordIntervalsTotal.setTotalNum(manageRecordIntervalsTotal.getTotalNum() - 1);
+ return manageRecordIntervalsTotalMapper.updateById(manageRecordIntervalsTotal);
+ }
+
+ // 姘村钩鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+ for (int i = fromCol; i <= toCol; i++) {
+ if (i == fromCol) {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+
+ // 鍨傜洿鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+ for (int i = fromRow; i <= toRow; i++) {
+ if (i == fromRow) {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsTotalServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsTotalServiceImpl.java
new file mode 100644
index 0000000..ae21e58
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIntervalsTotalServiceImpl.java
@@ -0,0 +1,507 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+
+
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordIntervalsMapper;
+import com.ruoyi.manage.mapper.ManageRecordIntervalsTotalMapper;
+
+import com.ruoyi.manage.pojo.ManageRecordIntervals;
+import com.ruoyi.manage.pojo.ManageRecordIntervalsTotal;
+import com.ruoyi.manage.service.ManageRecordIntervalsTotalService;
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * <p>
+ * 鏂囦欢瀹氭湡瀹℃煡璁板綍鎬诲巻鍙茶褰曡〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 01:12:11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordIntervalsTotalServiceImpl extends ServiceImpl<ManageRecordIntervalsTotalMapper, ManageRecordIntervalsTotal> implements ManageRecordIntervalsTotalService {
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Resource
+ private ManageRecordIntervalsTotalMapper manageRecordIntervalsTotalMapper;
+
+ @Resource
+ private ManageRecordIntervalsMapper manageRecordIntervalsMapper;
+
+ @Override
+ public IPage<ManageRecordIntervalsTotal> pageManageRecordIntervalsTotal(Page page, ManageRecordIntervalsTotal manageRecordIntervalsTotal) {
+ return manageRecordIntervalsTotalMapper.pageManageRecordIntervalsTotal(page, QueryWrappers.queryWrappers(manageRecordIntervalsTotal));
+ }
+
+ @Override
+ public int submitManageRecordIntervalsTotal(Integer id) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒板~琛ㄤ汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+ ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectById(id);
+ manageRecordIntervalsTotal.setSubmitUser(userId);
+ manageRecordIntervalsTotal.setSubmitDate(LocalDate.now());
+ manageRecordIntervalsTotal.setSubmitUrl(user.getSignatureUrl());
+ //鐢熸垚鏍峰搧澶勭悊鐢宠琛ㄥ苟灏嗗~琛ㄤ汉鐨勭數瀛愮鍚嶅嵃涓�
+ manageRecordIntervalsTotal.setUrl(recordTotaldeal(id,user.getSignatureUrl()));
+ return manageRecordIntervalsTotalMapper.updateById(manageRecordIntervalsTotal);
+ }
+
+ @Override
+ public int ratifyManageRecordIntervalsTotal(Integer id, String ratifyState) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒版壒鍑嗕汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+ ManageRecordIntervalsTotal manageRecordIntervalsTotal = manageRecordIntervalsTotalMapper.selectById(id);
+ manageRecordIntervalsTotal.setRatifyUser(userId);
+ manageRecordIntervalsTotal.setRatifyState(ratifyState);
+ manageRecordIntervalsTotal.setRatifyDate(LocalDate.now());
+ manageRecordIntervalsTotal.setRatifyUrl(user.getSignatureUrl());
+ //灏嗘壒鍑嗕汉鐨勭鍚嶅嵃涓�
+ String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+ wordInsertUrl(new HashMap<String, Object>() {{
+ put("ratifyDateEn", monthNames[LocalDate.now().getMonthValue() - 1] + " " + LocalDate.now().getDayOfMonth() + ", " + LocalDate.now().getYear());
+ put("ratifyDate", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + user.getSignatureUrl()));
+ }}, wordUrl+"/"+manageRecordIntervalsTotal.getUrl());
+ return manageRecordIntervalsTotalMapper.updateById(manageRecordIntervalsTotal);
+ }
+
+ public int wordInsertUrl(Map<String, Object> map, String url) {
+ XWPFTemplate template = XWPFTemplate.compile(url).render(map);
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(url)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return 1;
+ }
+
+ private String recordTotaldeal(Integer id,String signatureUrl){
+ List<ManageRecordIntervals> manageRecordIntervalsList = manageRecordIntervalsMapper.selectList(Wrappers.<ManageRecordIntervals>lambdaQuery().eq(ManageRecordIntervals::getRecordIntervalsTotalId,id));
+ String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+ //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+ String url;
+ try {
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/intervals-deal.docx");
+ File file = File.createTempFile("temp", ".tmp");
+ OutputStream outputStream = new FileOutputStream(file);
+ IOUtils.copy(inputStream, outputStream);
+ url = file.getAbsolutePath();
+ inputStream.close();
+ outputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+
+ List<Map<String, Object>> intervalsList = new ArrayList<>();
+ Integer index = 1;
+ Integer index1 = 1;
+ for (int c = 0; c < manageRecordIntervalsList.size(); c++) {
+ //瓒呰繃15琛屾崲椤�
+ if (c % 15 == 0) {
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛ㄦ牸鐨勮鏁�
+ for (int i = 0; i < 17; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //琛ㄦ牸鐨勫垪鏁�
+ for (int j = 0; j < 7; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i == 0) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒�
+ textRenderData.setText("鏂囦欢鍚嶇О@File name");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒�
+ textRenderData.setText("鏂囦欢缂栧彿@File number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒�
+ textRenderData.setText("鐗堟湰鍙稝Version number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒�
+ textRenderData.setText("淇鍙稝Revision number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ //绗叚鍒�
+ textRenderData.setText("閫傚疁鎬Suitability");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ //绗竷鍒�
+ textRenderData.setText("澶囨敞@Remark");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i == 16) {
+ //鏈�鍚庝竴琛�
+ textRenderData.setText("娉細閫傚疁鎬т竴鏍忔墦鈥溾垰鈥濊〃姝ゆ枃浠堕�傚疁锛屸�溍椻�濊〃绀轰笉閫傚疁锛屾枃浠堕渶淇鎴栦綔搴熴�侤Note:The鈥溾垰鈥漷able in the suitability column is suitable for this document, the鈥溍椻�漷able is not suitable,and the document needs to berevised or invalidated @瀹℃煡鏃ユ湡锛� @Review Date:@鍙傚姞瀹℃煡浜哄憳绛惧悕锛欯Signatures of the reviewers particip ating in the review:鈭�22");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ //鍏朵粬琛�
+ if (j == 0) {
+ //绗竴鍒�
+ try {
+ String insReportCode = manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentCode();
+ textRenderData.setText(index + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ index++;
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentCode());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getDocumentVersion());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i -1) + (index1 - 1) * 15).getRevision());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getSuitability());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ try {
+ textRenderData.setText(manageRecordIntervalsList.get((i - 1) + (index1 - 1) * 15).getRemark() );
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(14);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+ Map<String, Object> table = new HashMap<>();
+ table.put("intervals", tableRenderData);
+ table.put("index1", index1);
+ intervalsList.add(table);
+ index1++;
+ }
+ }
+ Integer finalIndex = index1;
+ XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("size", finalIndex);
+ put("intervalsList", intervalsList);
+ put("submitDate", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("submitDateEn", monthNames[LocalDate.now().getMonthValue() - 1] + " " + LocalDate.now().getDayOfMonth() + ", " + LocalDate.now().getYear());
+ put("ratifyDate", "{{ratifyDate}}");
+ put("ratifyDateEn","{{ratifyDateEn}}");
+ put("ratifyUrl", null);
+ put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
+ }});
+ String name = UUID.randomUUID() + "_鏂囦欢瀹氭湡瀹℃煡璁板綍琛�" + ".docx";
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ String path = wordUrl + "/" + name;
+ // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+ try {
+ ZipSecureFile.setMinInflateRatio(0.0001);
+ FileInputStream stream = new FileInputStream(path);
+ XWPFDocument document = new XWPFDocument(stream);
+ List<XWPFTable> xwpfTables = document.getTables();
+ for (int i = 0; i < xwpfTables.size(); i++) {
+ Set<String> set1 = new HashSet<>();
+ Map<String, Map<String, Integer>> maps = new HashMap<>();
+ for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+ String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+ if (set1.add(split[1])) {
+ Map<String, Integer> map = new HashMap<>();
+ map.put("sr", j);
+ map.put("sc", k);
+ map.put("er", j + 0);
+ map.put("ec", k + 0);
+ maps.put(split[1], map);
+ } else {
+ Map<String, Integer> map1 = maps.get(split[1]);
+ if (j == map1.get("sr")) {
+ map1.put("ec", map1.get("ec") + 1);
+ } else if (k == map1.get("sc")) {
+ map1.put("er", map1.get("er") + 1);
+ }
+ }
+ String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+ List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+ entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+ // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+ List<String> list = new ArrayList<>();
+ for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+ list.add(entry.getKey());
+ }
+ for (int a = list.size() - 1; a >= 0; a--) {
+ Map<String, Integer> v = maps.get(list.get(a));
+ for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+ if (v.get("ec") > v.get("sc")) {
+ try {
+ mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+// TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ if (v.get("er") > v.get("sr")) {
+ try {
+ mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+// TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream = new FileOutputStream(path);
+ document.write(fileOutputStream);
+ fileOutputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 0; i < xwpfTables1.size(); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return name;
+ }
+
+ // 姘村钩鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+ for (int i = fromCol; i <= toCol; i++) {
+ if (i == fromCol) {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+
+ // 鍨傜洿鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+ for (int i = fromRow; i <= toRow; i++) {
+ if (i == fromRow) {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIssueRecycleServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIssueRecycleServiceImpl.java
new file mode 100644
index 0000000..71a64d4
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordIssueRecycleServiceImpl.java
@@ -0,0 +1,701 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+
+
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordIssueRecycleMapper;
+
+import com.ruoyi.manage.pojo.ManageRecordIssueRecycle;
+
+import com.ruoyi.manage.service.ManageRecordIssueRecycleService;
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * <p>
+ * 鎵�鏈夋枃浠�(鍐呫�佸閮ㄦ枃浠�)鐨勫彂鏀句笌鍥炴敹璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 09:11:05
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordIssueRecycleServiceImpl extends ServiceImpl<ManageRecordIssueRecycleMapper, ManageRecordIssueRecycle> implements ManageRecordIssueRecycleService {
+
+ @Resource
+ private ManageRecordIssueRecycleMapper manageRecordIssueRecycleMapper;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Override
+ public IPage<ManageRecordIssueRecycle> pageManageRecordIssueRecycle(Page page, ManageRecordIssueRecycle manageRecordIssueRecycle) {
+ return manageRecordIssueRecycleMapper.pageManageRecordIssueRecycle(page, QueryWrappers.queryWrappers(manageRecordIssueRecycle));
+ }
+
+ @Override
+ public String exportOutManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle, HttpServletResponse response) {
+ List<ManageRecordIssueRecycle> manageRecordIssueRecycleList = manageRecordIssueRecycleMapper.pageManageRecordIssueRecycle(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordIssueRecycle)).getRecords();
+ //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+ String url;
+ try {
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/recycle-deal.docx");
+ File file = File.createTempFile("temp", ".tmp");
+ OutputStream outputStream = new FileOutputStream(file);
+ IOUtils.copy(inputStream, outputStream);
+ url = file.getAbsolutePath();
+ inputStream.close();
+ outputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+
+ List<Map<String, Object>> recycleList = new ArrayList<>();
+ Integer index = 1;
+ Integer index1 = 1;
+ for (int c = 0; c < manageRecordIssueRecycleList.size(); c++) {
+ //瓒呰繃15琛屾崲椤�
+ if (c % 15 == 0) {
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛ㄦ牸鐨勮鏁�
+ for (int i = 0; i < 17; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //琛ㄦ牸鐨勫垪鏁�
+ for (int j = 0; j < 12; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i == 0) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.鈭�1");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒�
+ textRenderData.setText("鏂囦欢缂栧彿@File number鈭�2");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒�
+ textRenderData.setText("鏂囦欢鍚嶇О@File name鈭�3");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒�
+ textRenderData.setText("鐗堝彿@Edition number鈭�4");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒�
+ textRenderData.setText("浠芥暟@Number of copies鈭�5");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ //绗叚鍒�
+ textRenderData.setText("鏂囦欢绫诲埆@File category鈭�6");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ //绗竷鍒�
+ textRenderData.setText("鍒嗗彂鍙稝Distribution number鈭�7");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ //绗叓鍒�
+ textRenderData.setText("鎺ユ敹閮ㄩ棬@Receiving department鈭�8");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 8 || j == 9) {
+ //绗節鍒�
+ textRenderData.setText("鍙戞斁 Issue鈭�9");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 10 || j == 11) {
+ //绗叓鍒�
+ textRenderData.setText("鍥炴敹 Reclaim鈭�10");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i == 1) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.鈭�1");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒�
+ textRenderData.setText("鏂囦欢缂栧彿@File number鈭�2");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒�
+ textRenderData.setText("鏂囦欢鍚嶇О@File name鈭�3");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒�
+ textRenderData.setText("鐗堝彿@Edition number鈭�4");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒�
+ textRenderData.setText("浠芥暟@Number of copies鈭�5");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ //绗叚鍒�
+ textRenderData.setText("鏂囦欢绫诲埆@File category鈭�6");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ //绗竷鍒�
+ textRenderData.setText("鍒嗗彂鍙稝Distribution number鈭�7");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ //绗叓鍒�
+ textRenderData.setText("鎺ユ敹閮ㄩ棬@Receiving department鈭�8");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 8) {
+ //绗節鍒�
+ textRenderData.setText("鎺ュ彈浜篅Recipients");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 9) {
+ //绗崄鍒�
+ textRenderData.setText("鏃ユ湡@Date");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 10) {
+ //绗崄涓�鍒�
+ textRenderData.setText("绛炬敹浜篅Signatory");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ //绗崄浜屽垪
+ textRenderData.setText("鏃ユ湡@Date");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else {
+ //鍏朵粬琛�
+ if (j == 0) {
+ //绗竴鍒�
+ try {
+ String insReportCode = manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentCode();
+ textRenderData.setText(index + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ index++;
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentCode());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentVersion());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getPages());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDocumentType());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getNumber());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 7) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getDepartLims());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 8) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getReceiveUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 9) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getReceiveDate() + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 10) {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getSignedUserName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ try {
+ textRenderData.setText(manageRecordIssueRecycleList.get((i - 2) + (index1 - 1) * 15).getSignedDate() + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(14);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+ Map<String, Object> table = new HashMap<>();
+ table.put("recycle", tableRenderData);
+ table.put("index1", index1);
+ recycleList.add(table);
+ index1++;
+ }
+ }
+ Integer finalIndex = index1;
+ XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("size", finalIndex);
+ put("recycleList", recycleList);
+ }});
+ String name = UUID.randomUUID() + "_鎵�鏈夋枃浠剁殑鍙戞斁涓庡洖鏀惰褰�" + ".docx";
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ String path = wordUrl + "/" + name;
+ // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+ try {
+ ZipSecureFile.setMinInflateRatio(0.0001);
+ FileInputStream stream = new FileInputStream(path);
+ XWPFDocument document = new XWPFDocument(stream);
+ List<XWPFTable> xwpfTables = document.getTables();
+ for (int i = 0; i < xwpfTables.size(); i++) {
+ Set<String> set1 = new HashSet<>();
+ Map<String, Map<String, Integer>> maps = new HashMap<>();
+ for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+ String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+ if (set1.add(split[1])) {
+ Map<String, Integer> map = new HashMap<>();
+ map.put("sr", j);
+ map.put("sc", k);
+ map.put("er", j + 0);
+ map.put("ec", k + 0);
+ maps.put(split[1], map);
+ } else {
+ Map<String, Integer> map1 = maps.get(split[1]);
+ if (j == map1.get("sr")) {
+ map1.put("ec", map1.get("ec") + 1);
+ } else if (k == map1.get("sc")) {
+ map1.put("er", map1.get("er") + 1);
+ }
+ }
+ String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+ List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+ entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+ // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+ List<String> list = new ArrayList<>();
+ for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+ list.add(entry.getKey());
+ }
+ for (int a = list.size() - 1; a >= 0; a--) {
+ Map<String, Integer> v = maps.get(list.get(a));
+ for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+ if (v.get("ec") > v.get("sc")) {
+ try {
+ mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+// TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ if (v.get("er") > v.get("sr")) {
+ try {
+ mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+// TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream = new FileOutputStream(path);
+ document.write(fileOutputStream);
+ fileOutputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 0; i < xwpfTables1.size(); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return name;
+ }
+
+ @Override
+ public int exportInManageRecordIssueRecycle(MultipartFile file) {
+ List<ManageRecordIssueRecycle> manageRecordIssueRecycleList = new ArrayList<>();
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ try {
+ InputStream inputStream = file.getInputStream();
+ XWPFDocument document = new XWPFDocument(inputStream);
+ List<XWPFTable> tables = document.getTables();
+ if (tables.isEmpty()) {
+ throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+ }
+
+ for (XWPFTable table : tables) {
+ List<XWPFTableRow> rows = table.getRows();
+ if (rows.size() <= 1) {
+ throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+ }
+ for (int i = 2; i < rows.size(); i++) { // 浠庣涓夎寮�濮嬶紝璺宠繃琛ㄥご
+ XWPFTableRow row = rows.get(i);
+ if (row.getTableCells().size() != 12) {
+ continue;
+ }
+ if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+ ManageRecordIssueRecycle manageRecordIssueRecycle = new ManageRecordIssueRecycle();
+ manageRecordIssueRecycle.setDocumentCode(row.getCell(1).getText());
+ manageRecordIssueRecycle.setDocumentName(row.getCell(2).getText());
+ manageRecordIssueRecycle.setDocumentVersion(row.getCell(3).getText());
+ manageRecordIssueRecycle.setPages(row.getCell(4).getText());
+ manageRecordIssueRecycle.setDocumentType(row.getCell(5).getText());
+ manageRecordIssueRecycle.setNumber(row.getCell(6).getText());
+ manageRecordIssueRecycle.setDepartLims(row.getCell(7).getText());
+ try {
+ manageRecordIssueRecycle.setReceiveUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, row.getCell(8).getText())).getId());
+ } catch (Exception e) {
+ manageRecordIssueRecycle.setReceiveUser(null);
+ }
+ try {
+ manageRecordIssueRecycle.setSignedUser(userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, row.getCell(10).getText())).getId());
+ } catch (Exception e) {
+ manageRecordIssueRecycle.setSignedUser(null);
+ }
+ try {
+ manageRecordIssueRecycle.setReceiveDate(LocalDate.parse(row.getCell(9).getText(), dateTimeFormatter));
+ } catch (Exception e) {
+ manageRecordIssueRecycle.setReceiveDate(null);
+ }
+ try {
+ manageRecordIssueRecycle.setSignedDate(LocalDate.parse(row.getCell(11).getText(), dateTimeFormatter));
+ } catch (Exception e) {
+ manageRecordIssueRecycle.setSignedDate(null);
+ }
+
+ ManageRecordIssueRecycle issueRecycle = manageRecordIssueRecycleMapper.selectOne(Wrappers.<ManageRecordIssueRecycle>lambdaQuery()
+ .eq(ManageRecordIssueRecycle::getDocumentCode, manageRecordIssueRecycle.getDocumentCode())
+ .eq(ManageRecordIssueRecycle::getDocumentName, manageRecordIssueRecycle.getDocumentName())
+ .eq(ManageRecordIssueRecycle::getDocumentVersion, manageRecordIssueRecycle.getDocumentVersion()));
+ if (ObjectUtils.isNotEmpty(issueRecycle)) {
+ manageRecordIssueRecycle.setId(issueRecycle.getId());
+ }
+ manageRecordIssueRecycleList.add(manageRecordIssueRecycle);
+ }
+ }
+ }
+ saveOrUpdateBatch(manageRecordIssueRecycleList);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+
+ @Override
+ public int addManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle) {
+ return manageRecordIssueRecycleMapper.insert(manageRecordIssueRecycle);
+ }
+
+ @Override
+ public int doManageRecordIssueRecycle(ManageRecordIssueRecycle manageRecordIssueRecycle) {
+ return manageRecordIssueRecycleMapper.updateById(manageRecordIssueRecycle);
+ }
+
+ // 姘村钩鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+ for (int i = fromCol; i <= toCol; i++) {
+ if (i == fromCol) {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+
+ // 鍨傜洿鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+ for (int i = fromRow; i <= toRow; i++) {
+ if (i == fromRow) {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordTotalServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordTotalServiceImpl.java
new file mode 100644
index 0000000..a617f0f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordTotalServiceImpl.java
@@ -0,0 +1,430 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+
+
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordTotalMapper;
+import com.ruoyi.manage.mapper.ManageRecordVerifyMapper;
+
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+
+import com.ruoyi.manage.service.ManageRecordTotalService;
+
+import com.ruoyi.system.mapper.UserMapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍鎬诲巻鍙茶褰曡〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:30:08
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordTotalServiceImpl extends ServiceImpl<ManageRecordTotalMapper, ManageRecordTotal> implements ManageRecordTotalService {
+
+ @Resource
+ private ManageRecordTotalMapper manageRecordTotalMapper;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Resource
+ private ManageRecordVerifyMapper manageRecordVerifyMapper;
+
+ @Override
+ public IPage<ManageRecordTotal> pageManageRecordTotal(Page page, ManageRecordTotal manageRecordTotal) {
+ return manageRecordTotalMapper.pageProcessTotaldeal(page, QueryWrappers.queryWrappers(manageRecordTotal));
+ }
+
+ @Override
+ public int submitManageRecordTotal(Integer id) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒板~琛ㄤ汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+ ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectById(id);
+ manageRecordTotal.setSubmitUser(userId);
+ manageRecordTotal.setSubmitDate(LocalDate.now());
+ manageRecordTotal.setSubmitUrl(user.getSignatureUrl());
+ //鐢熸垚鏍峰搧澶勭悊鐢宠琛ㄥ苟灏嗗~琛ㄤ汉鐨勭數瀛愮鍚嶅嵃涓�
+ manageRecordTotal.setUrl(recordTotaldeal(id,user.getSignatureUrl()));
+ return manageRecordTotalMapper.updateById(manageRecordTotal);
+ }
+
+ @Override
+ public int ratifyManageRecordTotal(Integer id, String ratifyState) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("鏈壘鍒版壒鍑嗕汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!");
+ ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectById(id);
+ manageRecordTotal.setRatifyUser(userId);
+ manageRecordTotal.setRatifyState(ratifyState);
+ manageRecordTotal.setRatifyDate(LocalDate.now());
+ manageRecordTotal.setRatifyUrl(user.getSignatureUrl());
+ //灏嗘壒鍑嗕汉鐨勭鍚嶅嵃涓�
+ String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+ wordInsertUrl(new HashMap<String, Object>() {{
+ put("ratifyDateEn", monthNames[LocalDate.now().getMonthValue() - 1] + " " + LocalDate.now().getDayOfMonth() + ", " + LocalDate.now().getYear());
+ put("ratifyDate", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + user.getSignatureUrl()));
+ }}, wordUrl+"/"+manageRecordTotal.getUrl());
+ return manageRecordTotalMapper.updateById(manageRecordTotal);
+ }
+
+ public int wordInsertUrl(Map<String, Object> map, String url) {
+ XWPFTemplate template = XWPFTemplate.compile(url).render(map);
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(url)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return 1;
+ }
+
+
+ private String recordTotaldeal(Integer id,String signatureUrl){
+ List<ManageRecordVerify> manageRecordVerifies = manageRecordVerifyMapper.selectList(Wrappers.<ManageRecordVerify>lambdaQuery().eq(ManageRecordVerify::getManageRecordTotalId,id));
+ String url;
+ try {
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/verify-deal.docx");
+ File file = File.createTempFile("temp", ".tmp");
+ OutputStream outputStream = new FileOutputStream(file);
+ IOUtils.copy(inputStream, outputStream);
+ url = file.getAbsolutePath();
+ inputStream.close();
+ outputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+ List<Map<String, Object>> verifyList = new ArrayList<>();
+ Integer index = 1;
+ Integer index1 = 1;
+ for (int c = 0; c < manageRecordVerifies.size(); c++) {
+ //瓒呰繃21琛屾崲椤�
+ if (c % 20 == 0) {
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛ㄦ牸鐨勮鏁�
+ for (int i = 0; i < 21; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //琛ㄦ牸鐨勫垪鏁�
+ for (int j = 0; j < 8; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i == 0) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒楀簭鍙�
+ textRenderData.setText("搴忓彿@No.");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ //绗簩鍒楁牱鍝佸悕绉�
+ textRenderData.setText("澶栨潵鏂囦欢鍚嶇О@Foreign file name");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ //绗笁鍒楁牱鍝佺紪鍙�
+ textRenderData.setText("鏂囦欢缂栧彿@File number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ //绗洓鍒椾緵鏍峰崟浣�
+ textRenderData.setText("鏍囧噯瑙勮寖鍚嶇О@Standard specification name");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ //绗簲鍒楁暟閲�
+ textRenderData.setText("鏍囧噯鍙稝Stanard number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 5) {
+ //绗叚鍒楀鐞嗘柟寮�
+ textRenderData.setText("鐢熸晥鏃ユ湡@Effective Date");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 6) {
+ //绗竷鍒楀鐞嗘柟寮�
+ textRenderData.setText("浣滃簾鏃ユ湡@Void date");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }else {
+ //绗叓鍒楁椂闂�
+ textRenderData.setText("澶囨敞@Remaek");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else {
+ //鍏朵粬琛�
+ if (j == 0) {
+ //绗竴鍒�
+ try{
+ String sampleName = manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getDocumentName();
+ textRenderData.setText(index + "");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ index++;
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ try{
+ textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getDocumentName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j == 2) {
+ try{
+ textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getDocumentCode());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j == 3) {
+ try{
+ textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getStandardName());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j == 4) {
+ try{
+ textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getStandardCode());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j == 5) {
+ try{
+ textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getEffectiveDate()+"");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==6){
+ try{
+ textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getCancelDate()+"");
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ try{
+ textRenderData.setText(manageRecordVerifies.get((i-1) + (index1 - 1) * 20).getNote());
+ } catch (Exception e) {
+ textRenderData.setText("");
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(14);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+ Map<String, Object> table = new HashMap<>();
+ table.put("verify", tableRenderData);
+ table.put("index1", index1);
+ verifyList.add(table);
+ index1++;
+ }
+ }
+ Integer finalIndex = index1;
+ XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("verifyList", verifyList);
+ put("size", finalIndex);
+ put("submitDate", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("submitDateEn", monthNames[LocalDate.now().getMonthValue() - 1] + " " + LocalDate.now().getDayOfMonth() + ", " + LocalDate.now().getYear());
+ put("ratifyDate", "{{ratifyDate}}");
+ put("ratifyDateEn","{{ratifyDateEn}}");
+ put("ratifyUrl", null);
+ put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
+ }});
+ String name = UUID.randomUUID() + "_鏍峰搧澶勭悊鐢宠琛�" + ".docx";
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ String path = wordUrl + "/" + name;
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 0; i < xwpfTables1.size(); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return name;
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordVerifyServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordVerifyServiceImpl.java
new file mode 100644
index 0000000..a49d7b0
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordVerifyServiceImpl.java
@@ -0,0 +1,157 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageRecordTotalMapper;
+import com.ruoyi.manage.mapper.ManageRecordVerifyMapper;
+import com.ruoyi.manage.pojo.ManageRecordTotal;
+import com.ruoyi.manage.pojo.ManageRecordVerify;
+import com.ruoyi.manage.service.ManageRecordVerifyService;
+
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.apache.poi.xwpf.usermodel.XWPFTableRow;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵鏂囦欢纭璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 10:29:44
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ManageRecordVerifyServiceImpl extends ServiceImpl<ManageRecordVerifyMapper, ManageRecordVerify> implements ManageRecordVerifyService {
+
+ @Resource
+ private ManageRecordVerifyMapper manageRecordVerifyMapper;
+
+ @Resource
+ private ManageRecordTotalMapper manageRecordTotalMapper;
+
+ @Override
+ public IPage<ManageRecordVerify> pageManageRecordVerify(Page page, ManageRecordVerify manageRecordVerify) {
+ if (ObjectUtils.isEmpty(manageRecordVerify.getManageRecordTotalId())) {
+ //鑾峰彇褰撳墠骞翠唤
+ LocalDate currentDate = LocalDate.now();
+ // 瀹氫箟鏃ユ湡鏍煎紡
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+ // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+ String currentMonth = currentDate.format(formatter);
+ //鏌ヨ鍘嗗彶
+ ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.<ManageRecordTotal>lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
+ manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
+ }
+ return manageRecordVerifyMapper.pageManageRecordVerify(page, QueryWrappers.queryWrappers(manageRecordVerify));
+ }
+
+ @Override
+ public int addManageRecordVerify(ManageRecordVerify manageRecordVerify) {
+ //鑾峰彇褰撳墠骞翠唤
+ LocalDate currentDate = LocalDate.now();
+ // 瀹氫箟鏃ユ湡鏍煎紡
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+ // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+ String currentMonth = currentDate.format(formatter);
+ ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.<ManageRecordTotal>lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
+ manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
+ manageRecordVerifyMapper.insert(manageRecordVerify);
+ manageRecordTotal.setTotalNum(1 + manageRecordTotal.getTotalNum());
+ return manageRecordTotalMapper.updateById(manageRecordTotal);
+ }
+
+ @Override
+ public int delManageRecordVerify(Integer id) {
+ ManageRecordVerify manageRecordVerify = manageRecordVerifyMapper.selectById(id);
+ manageRecordVerifyMapper.deleteById(id);
+ ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectById(manageRecordVerify.getManageRecordTotalId());
+ manageRecordTotal.setTotalNum(manageRecordTotal.getTotalNum() - 1);
+ return manageRecordTotalMapper.updateById(manageRecordTotal);
+ }
+
+ @Override
+ public int exportManageRecordVerify(MultipartFile file) {
+ List<ManageRecordVerify> manageRecordVerifyList = new ArrayList<>();
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ //鑾峰彇褰撳墠骞翠唤
+ LocalDate currentDate = LocalDate.now();
+ // 瀹氫箟鏃ユ湡鏍煎紡
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
+ // 鏍煎紡鍖栧綋鍓嶆棩鏈�
+ String currentMonth = currentDate.format(formatter);
+ ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.<ManageRecordTotal>lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
+ try {
+ InputStream inputStream = file.getInputStream();
+ XWPFDocument document = new XWPFDocument(inputStream);
+ List<XWPFTable> tables = document.getTables();
+ if (tables.isEmpty()) {
+ throw new ErrorException("鏂囨。涓病鏈夎〃鏍�");
+ }
+
+ for (XWPFTable table : tables) {
+ List<XWPFTableRow> rows = table.getRows();
+ if (rows.size() <= 1) {
+ throw new ErrorException("琛ㄦ牸娌℃湁鏁版嵁琛�");
+ }
+ for (int i = 1; i < rows.size(); i++) { // 浠庣浜岃寮�濮嬶紝璺宠繃琛ㄥご
+ XWPFTableRow row = rows.get(i);
+ if (row.getTableCells().size() != 8) {
+ continue;
+ }
+ if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
+ ManageRecordVerify manageRecordVerify = new ManageRecordVerify();
+ manageRecordVerify.setDocumentName(row.getCell(1).getText());
+ manageRecordVerify.setDocumentCode(row.getCell(2).getText());
+ manageRecordVerify.setStandardName(row.getCell(3).getText());
+ manageRecordVerify.setStandardCode(row.getCell(4).getText());
+ try {
+ manageRecordVerify.setEffectiveDate(LocalDate.parse(row.getCell(5).getText(), dateTimeFormatter));
+ } catch (Exception e) {
+ manageRecordVerify.setEffectiveDate(null);
+ }
+ try {
+ manageRecordVerify.setCancelDate(LocalDate.parse(row.getCell(6).getText(), dateTimeFormatter));
+ } catch (Exception e) {
+ manageRecordVerify.setCancelDate(null);
+ }
+ manageRecordVerify.setNote(row.getCell(7).getText());
+ manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
+ if (manageRecordVerifyMapper.selectCount(Wrappers.<ManageRecordVerify>lambdaQuery()
+ .eq(ManageRecordVerify::getDocumentCode, manageRecordVerify.getDocumentCode())
+ .eq(ManageRecordVerify::getDocumentName, manageRecordVerify.getDocumentName())
+ .eq(ManageRecordVerify::getStandardName, manageRecordVerify.getStandardName())
+ .eq(ManageRecordVerify::getStandardCode, manageRecordVerify.getStandardCode())
+ .eq(ManageRecordVerify::getManageRecordTotalId, manageRecordVerify.getManageRecordTotalId())) <= 0) {
+ manageRecordVerifyList.add(manageRecordVerify);
+ }
+ }
+ }
+ }
+ saveBatch(manageRecordVerifyList);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramFileServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramFileServiceImpl.java
new file mode 100644
index 0000000..bb5fa31
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramFileServiceImpl.java
@@ -0,0 +1,76 @@
+package com.ruoyi.manage.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.manage.mapper.ManageReviewProgramFileMapper;
+import com.ruoyi.manage.mapper.ManageReviewProgramMapper;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import com.ruoyi.manage.pojo.ManageReviewProgramFile;
+import com.ruoyi.manage.service.ManageReviewProgramFileService;
+import com.ruoyi.manage.vo.ReviewProgramDetailsVo;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import java.io.File;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 04:15:47
+ */
+@Service
+public class ManageReviewProgramFileServiceImpl extends ServiceImpl<ManageReviewProgramFileMapper, ManageReviewProgramFile> implements ManageReviewProgramFileService {
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Resource
+ ManageReviewProgramMapper manageReviewProgramMapper;
+
+ @Override
+ public ReviewProgramDetailsVo selectFile(Integer id) {
+ ManageReviewProgram program = manageReviewProgramMapper.selectById(id);
+ LambdaQueryWrapper<ManageReviewProgramFile> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ManageReviewProgramFile::getReviewId, id);
+ List<ManageReviewProgramFile> files = list(queryWrapper);
+ ReviewProgramDetailsVo vo = new ReviewProgramDetailsVo();
+ vo.setProgram(program);
+ vo.setFileList(files);
+ return vo;
+ }
+
+ @Override
+ public void addFile(MultipartFile file, Integer id) {
+ String urlString;
+ String pathName;
+ String path;
+ String filename = file.getOriginalFilename();
+ ManageReviewProgramFile manageReviewProgramFile = new ManageReviewProgramFile();
+ manageReviewProgramFile.setFileName(filename);
+ manageReviewProgramFile.setReviewId(id);
+ // 鏄枃浠�
+ path = wordUrl;
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ manageReviewProgramFile.setUrl(pathName);
+ this.baseMapper.insert(manageReviewProgramFile);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err.println("闄勪欢涓婁紶閿欒");
+ }
+
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramServiceImpl.java
new file mode 100644
index 0000000..c958e90
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewProgramServiceImpl.java
@@ -0,0 +1,125 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.FilePictureRenderData;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageReviewProgramMapper;
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import com.ruoyi.manage.service.ManageReviewProgramService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 03:05:42
+ */
+@Service
+public class ManageReviewProgramServiceImpl extends ServiceImpl<ManageReviewProgramMapper, ManageReviewProgram> implements ManageReviewProgramService {
+
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+
+
+
+
+ @Override
+ public IPage<ManageReviewProgram> page(Page page, String startTime,String endTime, String judgingLocation) {
+ IPage<ManageReviewProgram> iPage = this.baseMapper.page(page,startTime,endTime,judgingLocation);
+ return iPage;
+ }
+
+ @Override
+ public void exportReviewProgram(Integer id, HttpServletResponse response) {
+ ManageReviewProgram reviewProgram = baseMapper.selectById(id);
+ List<String> name = new ArrayList<>();
+ for (String s : reviewProgram.getParticipants().split(",")) {
+ User user = userMapper.selectById(Integer.parseInt(s));
+ name.add(user.getName());
+ }
+ String participantsName = name.stream().collect(Collectors.joining(","));
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+ //缂栧埗浜虹鍚�
+ User user1 = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName, reviewProgram.getEditor()));
+ if (ObjectUtils.isEmpty(user1.getSignatureUrl())){
+ throw new ErrorException(user1.getName()+"娌℃湁涓婁紶涓汉绛惧悕,璇蜂笂浼�!");
+ }
+ String signatureUrl1 = user1.getSignatureUrl();
+ //鎵瑰噯浜虹鍚�
+ if (ObjectUtils.isEmpty(reviewProgram.getApprove())){
+ throw new ErrorException("娌℃湁杩涜鎵瑰噯");
+ }
+ User user2 = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName, reviewProgram.getApprove()));
+ if (ObjectUtils.isEmpty(user2.getSignatureUrl())){
+ throw new ErrorException(user2.getName()+"娌℃湁涓婁紶涓汉绛惧悕,璇蜂笂浼�!");
+ }
+ String signatureUrl2 = user2.getSignatureUrl();
+
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/review-program.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("reviewProgram", reviewProgram);
+ put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl1));
+ put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl2));
+ put("editorDate", reviewProgram.getEditorDate().format(formatter));
+ put("approveDate", reviewProgram.getApproveDate().format(formatter));
+ put("participantsName",participantsName);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "绠$悊璇勫璁″垝", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public int addReviewProgram(ManageReviewProgram manageReviewProgram) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ String name = userMapper.selectById(userId).getName();
+ manageReviewProgram.setEditor(name);
+ manageReviewProgram.setEditorDate(LocalDateTime.now());
+ return baseMapper.insert(manageReviewProgram);
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewReportServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewReportServiceImpl.java
new file mode 100644
index 0000000..958566a
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageReviewReportServiceImpl.java
@@ -0,0 +1,138 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.FilePictureRenderData;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.manage.mapper.ManageReviewReportMapper;
+import com.ruoyi.manage.pojo.ManageReviewReport;
+import com.ruoyi.manage.service.ManageReviewReportService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 绠$悊璇勫鎶ュ憡 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-12 04:44:39
+ */
+@Service
+public class ManageReviewReportServiceImpl extends ServiceImpl<ManageReviewReportMapper, ManageReviewReport> implements ManageReviewReportService {
+
+ @Resource
+ UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public IPage<ManageReviewReport> page(Page page, String startTime, String endTime, String place) {
+ IPage<ManageReviewReport> iPage = this.baseMapper.page(page, startTime, endTime, place);
+ return iPage;
+ }
+
+ @Override
+ public void exportReviewReport(Integer id, HttpServletResponse response) {
+ ManageReviewReport manageReviewReport = baseMapper.selectById(id);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+ //瀹屾垚鏃堕棿
+ String completionDate = "";
+ if (ObjectUtils.isNotEmpty(manageReviewReport.getCompletionDate())) {
+ completionDate = manageReviewReport.getCompletionDate().format(formatter);
+ }
+ //鍑哄腑浜哄憳
+ String attendessName=null;
+ if (ObjectUtils.isNotEmpty(manageReviewReport.getAttendess())) {
+ List<String> name = new ArrayList<>();
+ for (String s : manageReviewReport.getAttendess().split(",")) {
+ User user = userMapper.selectById(Integer.parseInt(s));
+ name.add(user.getName());
+ }
+ attendessName = name.stream().collect(Collectors.joining(","));
+ }
+ //鏃ユ湡
+ String createTime = manageReviewReport.getCreateTime().format(formatter);
+ //瀹℃牳浜�
+ String signatureUrl1 = null;
+ if (ObjectUtils.isNotEmpty(manageReviewReport.getAudit())) {
+ User user1 = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName, manageReviewReport.getAudit()));
+ if (ObjectUtils.isEmpty(user1.getSignatureUrl())) {
+ throw new ErrorException(user1.getName() + "鐨勪釜浜虹鍚嶆病鏈変笂浼�");
+ }
+ signatureUrl1 = user1.getSignatureUrl();
+ }
+ //鎵瑰噯浜�
+ String signatureUrl2 = null;
+ if (ObjectUtils.isNotEmpty(manageReviewReport.getApproval())) {
+ User user2 = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName, manageReviewReport.getApproval()));
+ if (ObjectUtils.isEmpty(user2.getSignatureUrl())) {
+ throw new ErrorException(user2.getName() + "鐨勪釜浜虹鍚嶆病鏈変笂浼�");
+ }
+ signatureUrl2 = user2.getSignatureUrl();
+ }
+
+
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/review-report.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String finalCompletionDate = completionDate;
+ FilePictureRenderData picture1=null;
+ FilePictureRenderData picture2=null;
+ if (signatureUrl1!=null){
+ picture1 = new FilePictureRenderData(100, 50, imgUrl + "/" + signatureUrl1);
+ }
+ if (signatureUrl2!=null) {
+ picture2 = new FilePictureRenderData(100, 50, imgUrl + "/" + signatureUrl2);
+ }
+ FilePictureRenderData finalPicture1 = picture1;
+ FilePictureRenderData finalPicture2 = picture2;
+ String finalAttendessName = attendessName;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("report", manageReviewReport);
+ put("completionDate", finalCompletionDate);
+ put("date", manageReviewReport.getDate().format(formatter));
+ put("createTime", createTime);
+ put("examineUrl", finalPicture1);
+ put("ratifyUrl", finalPicture2);
+ put("attendessName", finalAttendessName);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "璇勫鎶ュ憡", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java
new file mode 100644
index 0000000..ff20588
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java
@@ -0,0 +1,124 @@
+package com.ruoyi.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.manage.mapper.ManageRiskAssessmentResultsMapper;
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import com.ruoyi.manage.service.ManageRiskAssessmentResultsService;
+import com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙堣〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:58:51
+ */
+@Service
+public class ManageRiskAssessmentResultsServiceImpl extends ServiceImpl<ManageRiskAssessmentResultsMapper, ManageRiskAssessmentResults> implements ManageRiskAssessmentResultsService {
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public IPage<ManageRiskAssessmentResultsVo> getPageResults(Page page) {
+ return baseMapper.getPageResults(page, false);
+ }
+
+ @Override
+ public void exportPersonTraining(HttpServletResponse response) {
+ // 鏌ヨ璇︽儏
+ IPage<ManageRiskAssessmentResultsVo> detailedDtos = baseMapper.getPageResults(new Page(1, -1), true);
+ if (detailedDtos.getRecords().isEmpty()) {
+ throw new ErrorException("瀹℃牳閫氳繃鐨勬暟鎹负绌猴紒璇峰鏍搁�氳繃鍚庡湪瀵煎嚭");
+ }
+ ManageRiskAssessmentResultsVo manageRiskAssessmentResultsVo = detailedDtos.getRecords().get(0);
+
+ //鑾峰彇缂栧埗浜虹殑绛惧悕鍦板潃
+ String writeUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getEditor()).getSignatureUrl();
+ if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+
+ //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃
+ String examineUrl = null;
+ if (manageRiskAssessmentResultsVo.getApproval() != null) {
+ examineUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getApproval()).getSignatureUrl();
+ if (StringUtils.isBlank(examineUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ String ratifyUrl = null;
+ if (manageRiskAssessmentResultsVo.getApproval() != null) {
+ ratifyUrl = userMapper.selectById(manageRiskAssessmentResultsVo.getApproval()).getSignatureUrl();
+ if (StringUtils.isBlank(ratifyUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ int index = 1;
+ for (ManageRiskAssessmentResultsVo detailedDto : detailedDtos.getRecords()) {
+ detailedDto.setIndex(index);
+ index++;
+ }
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/risk-factor-identification-risk.docx");
+ String finalExamineUrl = examineUrl;
+ String finalRatifyUrl = ratifyUrl;
+ Configure configure = Configure.builder()
+ .bind("trainingDetailedList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("trainingDetailedList", detailedDtos.getRecords());
+ put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+ put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
+ put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+ put("writeDateUrl", manageRiskAssessmentResultsVo.getEditorDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getEditorDate())).create() : null);
+ put("examineDateUrl", manageRiskAssessmentResultsVo.getApproveDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getApproveDate())).create() : null);
+ put("ratifyDateUrl", manageRiskAssessmentResultsVo.getApproveDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(manageRiskAssessmentResultsVo.getApproveDate())).create() : null);
+ }});
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageControlPlanListVo.java b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageControlPlanListVo.java
new file mode 100644
index 0000000..4fea215
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageControlPlanListVo.java
@@ -0,0 +1,20 @@
+package com.ruoyi.manage.vo;
+
+import com.ruoyi.manage.pojo.ManageControlPlanList;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class ManageControlPlanListVo extends ManageControlPlanList {
+ @Schema(description = "缂栧埗濮撳悕")
+ private String editorName;
+
+ @Schema(description = "瀹℃壒濮撳悕")
+ private String approvalName;
+
+ @Schema(description = "鎵瑰噯濮撳悕")
+ private String approveName;
+
+ @Schema(description = "瀵煎嚭")
+ private Integer index;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageRiskAssessmentResultsVo.java b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageRiskAssessmentResultsVo.java
new file mode 100644
index 0000000..db4547f
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ManageRiskAssessmentResultsVo.java
@@ -0,0 +1,21 @@
+package com.ruoyi.manage.vo;
+
+import com.ruoyi.manage.pojo.ManageRiskAssessmentResults;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class ManageRiskAssessmentResultsVo extends ManageRiskAssessmentResults {
+
+ @Schema(description = "缂栧埗濮撳悕")
+ private String editorName;
+
+ @Schema(description = "瀹℃壒濮撳悕")
+ private String approvalName;
+
+ @Schema(description = "鎵瑰噯濮撳悕")
+ private String approveName;
+
+ @Schema(description = "瀵煎嚭搴忓彿")
+ private Integer index;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/vo/MeetingParticipantsDetailsVo.java b/cnas-manage/src/main/java/com/ruoyi/manage/vo/MeetingParticipantsDetailsVo.java
new file mode 100644
index 0000000..1f6de8e
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/vo/MeetingParticipantsDetailsVo.java
@@ -0,0 +1,15 @@
+package com.ruoyi.manage.vo;
+
+import com.ruoyi.manage.pojo.ManageMeeting;
+import com.ruoyi.manage.pojo.ManageMeetingParticipants;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MeetingParticipantsDetailsVo {
+
+ private ManageMeeting manageMeeting;
+
+ private List<ManageMeetingParticipants> participantsList;
+}
diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/vo/ReviewProgramDetailsVo.java b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ReviewProgramDetailsVo.java
new file mode 100644
index 0000000..713f4d8
--- /dev/null
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/vo/ReviewProgramDetailsVo.java
@@ -0,0 +1,15 @@
+package com.ruoyi.manage.vo;
+
+import com.ruoyi.manage.pojo.ManageReviewProgram;
+import com.ruoyi.manage.pojo.ManageReviewProgramFile;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReviewProgramDetailsVo {
+
+ private ManageReviewProgram program;
+
+ private List<ManageReviewProgramFile> fileList;
+}
diff --git a/cnas-manage/src/main/resources/lib/license.xml b/cnas-manage/src/main/resources/lib/license.xml
new file mode 100644
index 0000000..ecd46c1
--- /dev/null
+++ b/cnas-manage/src/main/resources/lib/license.xml
@@ -0,0 +1,13 @@
+<License>
+ <Data>
+ <Products>
+ <Product>Aspose.Total for Java</Product>
+ <Product>Aspose.Words for Java</Product>
+ </Products>
+ <EditionType>Enterprise</EditionType>
+ <SubscriptionExpiry>20991231</SubscriptionExpiry>
+ <LicenseExpiry>20991231</LicenseExpiry>
+ <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
+ </Data>
+ <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
+</License>
diff --git a/cnas-manage/src/main/resources/mapper/ClientSatisfactionAnalyseFileMapper.xml b/cnas-manage/src/main/resources/mapper/ClientSatisfactionAnalyseFileMapper.xml
new file mode 100644
index 0000000..c957aee
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ClientSatisfactionAnalyseFileMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ruoyi.manage.mapper.ClientSatisfactionAnalyseFileMapper">
+
+ <!-- 瀹㈡埛婊℃剰搴﹀垎鏋愰檮浠跺垪琛� -->
+ <select id="pageAnalyseFile" resultType="com.ruoyi.manage.pojo.ClientSatisfactionAnalyseFile">
+ select *
+ from (select ccf.*,
+ u.name user_name
+ from cnas_client_satisfaction_analyse_file ccf
+ left join user u on u.id = ccf.create_user
+ order by ccf.create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ClientSatisfactionMapper.xml b/cnas-manage/src/main/resources/mapper/ClientSatisfactionMapper.xml
new file mode 100644
index 0000000..ea097e1
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ClientSatisfactionMapper.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ruoyi.manage.mapper.ClientSatisfactionMapper">
+
+ <!-- 瀹㈡埛婊℃剰搴﹁皟鏌� -->
+ <select id="pageClientSatisfaction" resultType="com.ruoyi.manage.pojo.ClientSatisfaction">
+ select *
+ from (select *
+ from cnas_client_satisfaction
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="exportWordClientSatisfaction" resultType="com.ruoyi.manage.dto.ClientSatisfactionDto">
+ select *,
+ CASE WHEN service_attitude = 0 THEN '鈽�'
+ ELSE '鈻�' END AS serviceAttitude0,
+ CASE WHEN service_attitude = 1 THEN '鈽�'
+ ELSE '鈻�' END AS serviceAttitude1,
+ CASE WHEN service_attitude = 2 THEN '鈽�'
+ ELSE '鈻�' END AS serviceAttitude2,
+ service_attitude_suggestion,
+ CASE WHEN technical_competence = 0 THEN '鈽�'
+ ELSE '鈻�' END AS technicalCompetence0,
+ CASE WHEN technical_competence = 1 THEN '鈽�'
+ ELSE '鈻�' END AS technicalCompetence1,
+ CASE WHEN technical_competence = 2 THEN '鈽�'
+ ELSE '鈻�' END AS technicalCompetence2,
+ technical_competence_suggestion,
+ CASE WHEN inspection_work = 0 THEN '鈽�'
+ ELSE '鈻�' END AS inspectionWork0,
+ CASE WHEN inspection_work = 1 THEN '鈽�'
+ ELSE '鈻�' END AS inspectionWork1,
+ CASE WHEN inspection_work = 2 THEN '鈽�'
+ ELSE '鈻�' END AS inspectionWork2,
+ inspection_work_suggestion,
+ CASE WHEN reasonable_fees = 0 THEN '鈽�'
+ ELSE '鈻�' END AS reasonableFees0,
+ CASE WHEN reasonable_fees = 1 THEN '鈽�'
+ ELSE '鈻�' END AS reasonableFees1,
+ CASE WHEN reasonable_fees = 2 THEN '鈽�'
+ ELSE '鈻�' END AS reasonableFees2
+ from cnas_client_satisfaction
+ where client_satisfaction_id = #{clientSatisfactionId}
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalCheckMapper.xml b/cnas-manage/src/main/resources/mapper/InternalCheckMapper.xml
new file mode 100644
index 0000000..f7168c7
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalCheckMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ruoyi.manage.mapper.InternalCheckMapper">
+
+ <!-- 鍐呴儴瀹℃煡鍒嗛〉鏌ヨ -->
+ <select id="pageInternalCheck" resultType="com.ruoyi.manage.dto.InternalCheckDto">
+ select *
+ from (select *
+ from cnas_internal_check
+ order by create_time desc) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalCorrectFileMapper.xml b/cnas-manage/src/main/resources/mapper/InternalCorrectFileMapper.xml
new file mode 100644
index 0000000..aa64435
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalCorrectFileMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.InternalCorrectFileMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.InternalCorrectFile">
+ <id column="supervise_details_correct_file_id" property="correctFileId" />
+ <result column="correct_id" property="correctId" />
+ <result column="type" property="type" />
+ <result column="file_url" property="fileUrl" />
+ <result column="file_name" property="fileName" />
+ <result column="create_user" property="createUser" />
+ <result column="create_time" property="createTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalCorrectMapper.xml b/cnas-manage/src/main/resources/mapper/InternalCorrectMapper.xml
new file mode 100644
index 0000000..71efb96
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalCorrectMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.InternalCorrectMapper">
+
+ <select id="pageInternalAccording" resultType="com.ruoyi.manage.pojo.InternalCorrect">
+ select *
+ from (select *
+ from cnas_internal_correct
+ order by create_time desc) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalImplementMapper.xml b/cnas-manage/src/main/resources/mapper/InternalImplementMapper.xml
new file mode 100644
index 0000000..b41e6ee
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalImplementMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ruoyi.manage.mapper.InternalImplementMapper">
+ <!-- 鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ -->
+ <select id="pageInternalImplement" resultType="com.ruoyi.manage.dto.InternalImplementDto">
+ select *
+ from (select *
+ from cnas_internal_implement
+ order by create_time desc) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalMeetingDetailMapper.xml b/cnas-manage/src/main/resources/mapper/InternalMeetingDetailMapper.xml
new file mode 100644
index 0000000..8bf3b54
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalMeetingDetailMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.InternalMeetingDetailMapper">
+
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalMeetingMapper.xml b/cnas-manage/src/main/resources/mapper/InternalMeetingMapper.xml
new file mode 100644
index 0000000..d5cec24
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalMeetingMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.InternalMeetingMapper">
+
+ <select id="pageInternalMeeting" resultType="com.ruoyi.manage.dto.InternalMeetingDto">
+ select *
+ from (select cim.*,
+ (select GROUP_CONCAT(name)
+ from user
+ where find_in_set(id, cim.participant)) participant_name
+ from cnas_internal_meeting cim
+ order by cim.create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalPlanDetailMapper.xml b/cnas-manage/src/main/resources/mapper/InternalPlanDetailMapper.xml
new file mode 100644
index 0000000..6264605
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalPlanDetailMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.InternalPlanDetailMapper">
+
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalPlanMapper.xml b/cnas-manage/src/main/resources/mapper/InternalPlanMapper.xml
new file mode 100644
index 0000000..8200dfe
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalPlanMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.InternalPlanMapper">
+ <!-- 鍐呭骞村害璁″垝鍒嗛〉鏌ヨ -->
+ <select id="pageInternalPlan" resultType="com.ruoyi.manage.dto.InternalPlanDto">
+ select *
+ from (select *
+ from cnas_internal_plan
+ order by create_time desc) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/InternalReportMapper.xml b/cnas-manage/src/main/resources/mapper/InternalReportMapper.xml
new file mode 100644
index 0000000..08ed7e8
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/InternalReportMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ruoyi.manage.mapper.InternalReportMapper">
+ <!-- 鍐呭鎶ュ憡鍒嗛〉鏌ヨ -->
+ <select id="pageInternalReport" resultType="com.ruoyi.manage.pojo.InternalReport">
+ select *
+ from (select *
+ from cnas_internal_report
+ order by create_time desc) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageControlPlanListMapper.xml b/cnas-manage/src/main/resources/mapper/ManageControlPlanListMapper.xml
new file mode 100644
index 0000000..967e653
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageControlPlanListMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageControlPlanListMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageControlPlanList">
+ <id column="id" property="id" />
+ <result column="job_activity" property="jobActivity" />
+ <result column="category" property="category" />
+ <result column="description" property="description" />
+ <result column="result" property="result" />
+ <result column="intolerable" property="intolerable" />
+ <result column="plan" property="plan" />
+ <result column="editor" property="editor" />
+ <result column="editor_date" property="editorDate" />
+ <result column="approval" property="approval" />
+ <result column="approval_date" property="approvalDate" />
+ <result column="approve" property="approve" />
+ <result column="approve_date" property="approveDate" />
+ </resultMap>
+
+ <select id="getPageList" resultType="com.ruoyi.manage.vo.ManageControlPlanListVo">
+ select c.*, u1.name editor_name, u2.name approval_name, u3.name approve_name
+ from cnas_manage_control_plan_list c
+ left join user u1 on u1.id = c.editor
+ left join user u2 on u2.id = c.approval
+ left join user u3 on u3.id = c.approve
+ <if test="itSExporting == true">
+ where c.approve_status = 1
+ and c.approval_status = 1
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentAlterMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentAlterMapper.xml
new file mode 100644
index 0000000..3bef9a0
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentAlterMapper.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageDocumentAlterMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentAlter">
+ <id column="id" property="id"/>
+ <result column="code" property="code"/>
+ <result column="create_user" property="createUser"/>
+ <result column="createUserName" property="createUserName"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="expect_alter_date" property="expectAlterDate"/>
+ <result column="actually_alter_date" property="actuallyAlterDate"/>
+ <result column="state" property="state"/>
+ <result column="check_user" property="checkUser"/>
+ <result column="checkUserName" property="checkUserName"/>
+ <result column="alter_note" property="alterNote"/>
+ <result column="alter_before_code" property="alterBeforeCode"/>
+ <result column="alter_before_name" property="alterBeforeName"/>
+ <result column="alter_before_version" property="alterBeforeVersion"/>
+ <result column="alter_after_code" property="alterAfterCode"/>
+ <result column="alter_after_name" property="alterAfterName"/>
+ <result column="alter_after_version" property="alterAfterVersion"/>
+ <result column="alter_after_url" property="alterAfterUrl"/>
+ <result column="method" property="method"/>
+ </resultMap>
+
+ <select id="pageManageDocumentAlter" resultMap="BaseResultMap">
+ select * from (select cmda.*,
+ name createUserName
+ from cnas_manage_document_alter cmda
+ left join user u on cmda.create_user = u.id) A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+ <select id="getManageDocumentAlter" resultMap="BaseResultMap">
+ select cmda.*,
+ u1.name createUserName,
+ u2.name checkUserName
+ from cnas_manage_document_alter cmda
+ left join user u1 on cmda.create_user = u1.id
+ left join user u2 on cmda.check_user = u2.id
+ where cmda.id = #{id}
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentCancelMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentCancelMapper.xml
new file mode 100644
index 0000000..c25cfe5
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentCancelMapper.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageDocumentCancelMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentCancel">
+ <id column="id" property="id"/>
+ <result column="create_user" property="createUser"/>
+ <result column="createUserName" property="createUserName"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="name" property="name"/>
+ <result column="version" property="version"/>
+ <result column="document_state" property="documentState"/>
+ <result column="method" property="method"/>
+ <result column="cancel_note" property="cancelNote"/>
+ <result column="check_user" property="checkUser"/>
+ <result column="checkUserName" property="checkUserName"/>
+ <result column="expect_cancel_date" property="expectCancelDate"/>
+ <result column="actually_cancel_date" property="actuallyCancelDate"/>
+ <result column="state" property="state"/>
+ </resultMap>
+
+ <select id="pageManageDocumentCancel" resultMap="BaseResultMap">
+ select * from (select mdc.*,
+ u.name createUserName
+ from cnas_manage_document_cancel mdc
+ left join user u on mdc.create_user = u.id)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+ <select id="getManageDocumentCancel" resultMap="BaseResultMap">
+ select mdc.*,
+ u1.name createUserName,
+ u2.name checkUserName
+ from cnas_manage_document_cancel mdc
+ left join user u1 on mdc.create_user = u1.id
+ left join user u2 on mdc.check_user = u2.id
+ where mdc.id=#{id}
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentControlledMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentControlledMapper.xml
new file mode 100644
index 0000000..554119e
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentControlledMapper.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageDocumentControlledMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentControlled">
+ <id column="id" property="id"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="type" property="type"/>
+ <result column="name" property="name"/>
+ <result column="version" property="version"/>
+ <result column="writer" property="writer"/>
+ <result column="submit_date" property="submitDate"/>
+ <result column="instructions" property="instructions"/>
+ <result column="state" property="state"/>
+ <result column="url" property="url"/>
+ <result column="duty_user" property="dutyUser"/>
+ <result column="dutyUserName" property="dutyUserName"/>
+ <result column="create_user" property="createUser"/>
+ <result column="createUserName" property="createUserName"/>
+ <result column="createUserDepartLims" property="createUserDepartLims"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ </resultMap>
+
+ <select id="pageManageDocumentControlled" resultMap="BaseResultMap">
+ select * from (select cmdc.*, u1.name createUserName, u2.name dutyUserName
+ from cnas_manage_document_controlled cmdc
+ left join user u1 on cmdc.create_user = u1.id
+ left join user u2 on cmdc.duty_user = u2.id)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+ <select id="getManageDocumentControlled" resultMap="BaseResultMap">
+ select cmdc.*, u1.name createUserName, u2.name dutyUserName
+ from cnas_manage_document_controlled cmdc
+ left join user u1 on cmdc.create_user = u1.id
+ left join user u2 on cmdc.duty_user = u2.id
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentIssueRecycleMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentIssueRecycleMapper.xml
new file mode 100644
index 0000000..01d95b7
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentIssueRecycleMapper.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageDocumentIssueRecycleMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentIssueRecycle">
+ <id column="id" property="id"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="name" property="name"/>
+ <result column="version" property="version"/>
+ <result column="state" property="state"/>
+ <result column="document_state" property="documentState"/>
+ <result column="issue_code" property="issueCode"/>
+ <result column="issue_user" property="issueUser"/>
+ <result column="issue_date" property="issueDate"/>
+ <result column="issue_note" property="issueNote"/>
+ <result column="receive_user" property="receiveUser"/>
+ <result column="receive_date" property="receiveDate"/>
+ <result column="recycle_code" property="recycleCode"/>
+ <result column="recycle_user" property="recycleUser"/>
+ <result column="recycle_date" property="recycleDate"/>
+ <result column="recycle_note" property="recycleNote"/>
+ <result column="create_user" property="createUser"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="url" property="url"/>
+ </resultMap>
+
+ <select id="pageManageDocumentIssueRecycle" resultType="com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto">
+ select * from (select cmdir.*,
+ u1.name issueUserName,
+ u2.name recycleUserName,
+ u3.name receiveUserName
+ from cnas_manage_document_issue_recycle cmdir
+ left join user u1 on issue_user=u1.id
+ left join user u2 on recycle_user=u2.id
+ left join user u3 on receive_user=u3.id) A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+ <select id="getManageDocumentIssueRecycle" resultType="com.ruoyi.manage.dto.ManageDocumentIssueRecycleDto">
+ select cmdir.*,
+ u1.name issueUserName,
+ u2.name recycleUserName,
+ u3.name receiveUserNmae
+ from cnas_manage_document_issue_recycle cmdir
+ left join user u1 on issue_user=u1.id
+ left join user u2 on recycle_user=u2.id
+ left join user u3 on receive_user=u3.id
+ where cmdir.id=#{id}
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageDocumentListMapper.xml b/cnas-manage/src/main/resources/mapper/ManageDocumentListMapper.xml
new file mode 100644
index 0000000..d4bf823
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageDocumentListMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageDocumentListMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageDocumentList">
+ <id column="id" property="id"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="type" property="type"/>
+ <result column="name" property="name"/>
+ <result column="version" property="version"/>
+ <result column="writer" property="writer"/>
+ <result column="effective_date" property="effectiveDate"/>
+ <result column="state" property="state"/>
+ <result column="url" property="url"/>
+ <result column="create_user" property="createUser"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ </resultMap>
+ <select id="pageManageDocumentList" resultType="com.ruoyi.manage.pojo.ManageDocumentList">
+ select * from (select * from cnas_manage_document_list ) A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageMeetingMapper.xml b/cnas-manage/src/main/resources/mapper/ManageMeetingMapper.xml
new file mode 100644
index 0000000..700c5dd
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageMeetingMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageMeetingMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageMeeting">
+ <id column="id" property="id" />
+ <result column="meeting_time" property="meetingTime" />
+ <result column="place" property="place" />
+ <result column="compere" property="compere" />
+ <result column="content" property="content" />
+ <result column="create_user" property="createUser" />
+ <result column="create_time" property="createTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+ <select id="page" resultType="com.ruoyi.manage.dto.ManageMeetingDto">
+ select cmm.* from cnas_manage_meeting cmm
+ <where>
+ <if test="startTime != null and startTime != ''">
+ meeting_time >= #{startTime}
+ </if>
+ <if test="endTime != null and endTime != ''">
+ and #{endTime} >= meeting_time
+ </if>
+ <if test="place != null and place != ''">
+ and place = #{place}
+ </if>
+ </where>
+ </select>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageMeetingParticipantsMapper.xml b/cnas-manage/src/main/resources/mapper/ManageMeetingParticipantsMapper.xml
new file mode 100644
index 0000000..f866b80
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageMeetingParticipantsMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageMeetingParticipantsMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageMeetingParticipants">
+ <id column="id" property="id" />
+ <result column="participants" property="participants" />
+ <result column="department" property="department" />
+ <result column="meeting_id" property="meetingId" />
+ <result column="create_user" property="createUser" />
+ <result column="create_time" property="createTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordAuditMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordAuditMapper.xml
new file mode 100644
index 0000000..2e216f4
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordAuditMapper.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRecordAuditMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordAudit">
+ <id column="id" property="id"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="document_name" property="documentName"/>
+ <result column="capter" property="capter"/>
+ <result column="pages" property="pages"/>
+ <result column="number" property="number"/>
+ <result column="before_version" property="beforeVersion"/>
+ <result column="after_version" property="afterVersion"/>
+ <result column="alter_thing" property="alterThing"/>
+ <result column="alter_user" property="alterUser"/>
+ <result column="alterUserName" property="alterUserName"/>
+ <result column="ratify_user" property="ratifyUser"/>
+ <result column="ratifyUserName" property="ratifyUserName"/>
+ <result column="ratifyUserUrl" property="ratifyUserUrl"/>
+ <result column="date" property="date"/>
+ <result column="create_user" property="createUser"/>
+ <result column="createUserName" property="createUserName"/>
+ <result column="createUserDepart" property="createUserDepart"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="reason" property="reason"/>
+ <result column="before_depart" property="beforeDepart"/>
+ <result column="after_depart" property="afterDepart"/>
+ <result column="applicant" property="applicant"/>
+ <result column="formulation" property="formulation"/>
+ <result column="audit" property="audit"/>
+ <result column="method" property="method"/>
+ </resultMap>
+
+ <select id="pageManageRecordAudit" resultMap="BaseResultMap">
+ select * from (select cmra.*,
+ u1.name createUserName,
+ u2.name alterUserName,
+ u3.signature_url ratifyUserUrl,
+ u3.name ratifyUserName
+ from cnas_manage_record_audit cmra
+ left join user u1 on cmra.create_user = u1.id
+ left join user u2 on cmra.alter_user = u2.id
+ left join user u3 on cmra.ratify_user = u3.id)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordCancelMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordCancelMapper.xml
new file mode 100644
index 0000000..039ec0f
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordCancelMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRecordCancelMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordCancel">
+ <id column="id" property="id"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="document_name" property="documentName"/>
+ <result column="qty" property="qty"/>
+ <result column="reason" property="reason"/>
+ <result column="create_user" property="createUser"/>
+ <result column="createUserName" property="createUserName"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="ratify_user" property="ratifyUser"/>
+ <result column="ratify_state" property="ratifyState"/>
+ <result column="ratifyUserName" property="ratifyUserName"/>
+ <result column="ratify_time" property="ratifyTime"/>
+ <result column="remark" property="remark"/>
+ </resultMap>
+
+ <select id="pageManageRecordCancel" resultMap="BaseResultMap">
+ select * from (select cmrc.*,
+ u1.name createUserName,
+ u2.name ratifyUserName
+ from cnas_manage_record_cancel cmrc
+ left join user u1 on cmrc.create_user = u1.id
+ left join user u2 on cmrc.ratify_user = u2.id)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordCheckMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordCheckMapper.xml
new file mode 100644
index 0000000..e320c4a
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordCheckMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRecordCheckMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordCheck">
+ <id column="id" property="id"/>
+ <result column="document_name" property="documentName"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="document_version" property="documentVersion"/>
+ <result column="write_user" property="writeUser"/>
+ <result column="writeUserName" property="writeUserName"/>
+ <result column="check_user" property="checkUser"/>
+ <result column="checkUserName" property="checkUserName"/>
+ <result column="check_state" property="checkState"/>
+ <result column="ratify_user" property="ratifyUser"/>
+ <result column="ratifyUserName" property="ratifyUserName"/>
+ <result column="ratify_state" property="ratifyState"/>
+ <result column="ratify_date" property="ratifyDate"/>
+ <result column="remark" property="remark"/>
+ </resultMap>
+
+ <select id="pageManageRecordCheck" resultMap="BaseResultMap">
+ select * from (select cmrc.*,
+ u1.name writeUserName,
+ u2.name checkUserName,
+ u3.name ratifyUserName
+ from cnas_manage_record_check cmrc
+ left join user u1 on write_user=u1.id
+ left join user u2 on check_user=u2.id
+ left join user u3 on ratify_user=u3.id)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsMapper.xml
new file mode 100644
index 0000000..bc59cb3
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRecordIntervalsMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordIntervals">
+ <id column="id" property="id"/>
+ <result column="document_name" property="documentName"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="document_version" property="documentVersion"/>
+ <result column="revision" property="revision"/>
+ <result column="suitability" property="suitability"/>
+ <result column="remark" property="remark"/>
+ <result column="create_user" property="createUser"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="record_intervals_total_id" property="recordIntervalsTotalId"/>
+ </resultMap>
+
+ <select id="pageManageRecordIntervals" resultMap="BaseResultMap">
+ select *
+ from (select * from cnas_manage_record_intervals) A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsTotalMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsTotalMapper.xml
new file mode 100644
index 0000000..da181ed
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordIntervalsTotalMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRecordIntervalsTotalMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordIntervalsTotal">
+ <id column="id" property="id" />
+ <result column="ratify_user" property="ratifyUser"/>
+ <result column="ratifyUserName" property="ratifyUserName"/>
+ <result column="ratify_state" property="ratifyState"/>
+ <result column="ratify_date" property="ratifyDate"/>
+ <result column="ratify_url" property="ratifyUrl"/>
+ <result column="submit_user" property="submitUser"/>
+ <result column="submitUserName" property="submitUserName"/>
+ <result column="submit_url" property="submitUrl"/>
+ <result column="submit_date" property="submitDate"/>
+ <result column="year" property="year"/>
+ <result column="total_num" property="totalNum"/>
+ <result column="url" property="url"/>
+ </resultMap>
+
+ <select id="pageManageRecordIntervalsTotal" resultMap="BaseResultMap">
+ select * from (select cmrit.*,
+ u1.name submitUserName,
+ u2.name ratifyUserName
+ from cnas_manage_record_intervals_total cmrit
+ left join user u1 on u1.id=submit_user
+ left join user u2 on u2.id=ratify_user)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordIssueRecycleMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordIssueRecycleMapper.xml
new file mode 100644
index 0000000..fead5a3
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordIssueRecycleMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRecordIssueRecycleMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordIssueRecycle">
+ <id column="id" property="id"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="document_name" property="documentName"/>
+ <result column="document_version" property="documentVersion"/>
+ <result column="pages" property="pages"/>
+ <result column="document_type" property="documentType"/>
+ <result column="number" property="number"/>
+ <result column="depart_lims" property="departLims"/>
+ <result column="receive_user" property="receiveUser"/>
+ <result column="receiveUserName" property="receiveUserName"/>
+ <result column="receive_date" property="receiveDate"/>
+ <result column="signed_user" property="signedUser"/>
+ <result column="signedUserName" property="signedUserName"/>
+ <result column="signed_date" property="signedDate"/>
+ </resultMap>
+
+ <select id="pageManageRecordIssueRecycle" resultMap="BaseResultMap">
+ select * from (select cmrir.*,
+ u1.name receiveUserName,
+ u2.name signedUserName
+ from cnas_manage_record_issue_recycle cmrir
+ left join user u1 on receive_user=u1.id
+ left join user u2 on signed_user=u2.id)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordTotalMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordTotalMapper.xml
new file mode 100644
index 0000000..a06dbc1
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordTotalMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRecordTotalMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordTotal">
+ <id column="id" property="id"/>
+ <result column="ratify_user" property="ratifyUser"/>
+ <result column="ratifyUserName" property="ratifyUserName"/>
+ <result column="ratify_state" property="ratifyState"/>
+ <result column="ratify_date" property="ratifyDate"/>
+ <result column="ratify_url" property="ratifyUrl"/>
+ <result column="submit_user" property="submitUser"/>
+ <result column="submitUserName" property="submitUserName"/>
+ <result column="submit_url" property="submitUrl"/>
+ <result column="submit_date" property="submitDate"/>
+ <result column="year" property="year"/>
+ <result column="total_num" property="totalNum"/>
+ <result column="url" property="url"/>
+ </resultMap>
+
+ <select id="pageProcessTotaldeal" resultMap="BaseResultMap">
+ select * from (select cmrt.*,
+ u1.name submitUserName,
+ u2.name ratifyUserName
+ from cnas_manage_record_total cmrt
+ left join user u1 on u1.id=submit_user
+ left join user u2 on u2.id=ratify_user)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRecordVerifyMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRecordVerifyMapper.xml
new file mode 100644
index 0000000..0cc2170
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRecordVerifyMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRecordVerifyMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRecordVerify">
+ <id column="id" property="id"/>
+ <result column="document_name" property="documentName"/>
+ <result column="document_code" property="documentCode"/>
+ <result column="standard_name" property="standardName"/>
+ <result column="standard_code" property="standardCode"/>
+ <result column="effective_date" property="effectiveDate"/>
+ <result column="cancel_date" property="cancelDate"/>
+ <result column="note" property="note"/>
+ <result column="manage_record_total_id" property="manageRecordTotalId"/>
+ </resultMap>
+
+ <select id="pageManageRecordVerify" resultMap="BaseResultMap">
+ select * from (select * from cnas_manage_record_verify)A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageReviewProgramFileMapper.xml b/cnas-manage/src/main/resources/mapper/ManageReviewProgramFileMapper.xml
new file mode 100644
index 0000000..068211c
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageReviewProgramFileMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageReviewProgramFileMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageReviewProgramFile">
+ <id column="id" property="id" />
+ <result column="file_name" property="fileName" />
+ <result column="review_id" property="reviewId" />
+ <result column="url" property="url" />
+ <result column="create_user" property="createUser" />
+ <result column="create_time" property="createTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageReviewProgramMapper.xml b/cnas-manage/src/main/resources/mapper/ManageReviewProgramMapper.xml
new file mode 100644
index 0000000..7ec06a9
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageReviewProgramMapper.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageReviewProgramMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageReviewProgram">
+ <id column="id" property="id" />
+ <result column="review_time" property="reviewTime" />
+ <result column="judging_location" property="judgingLocation" />
+ <result column="judging_purpose" property="judgingPurpose" />
+ <result column="judging_method" property="judgingMethod" />
+ <result column="participants" property="participants" />
+ <result column="judging_scope" property="judgingScope" />
+ <result column="judging_basis" property="judgingBasis" />
+ <result column="main_context" property="mainContext" />
+ <result column="preparation_requirements" property="preparationRequirements" />
+ <result column="editor" property="editor" />
+ <result column="editor_date" property="editorDate" />
+ <result column="approve" property="approve" />
+ <result column="approve_date" property="approveDate" />
+ <result column="create_user" property="createUser" />
+ <result column="create_time" property="createTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+ <select id="page" resultType="com.ruoyi.manage.pojo.ManageReviewProgram">
+ select * from cnas_manage_review_program
+ <where>
+ <if test="startTime != null and startTime != ''">
+ review_time >= #{startTime}
+ </if>
+ <if test="endTime != null and endTime != ''">
+ and #{endTime} >= review_time
+ </if>
+ <if test="judgingLocation != null and judgingLocation != ''">
+ and judging_location = #{judgingLocation}
+ </if>
+ </where>
+ </select>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageReviewReportMapper.xml b/cnas-manage/src/main/resources/mapper/ManageReviewReportMapper.xml
new file mode 100644
index 0000000..5f59653
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageReviewReportMapper.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageReviewReportMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageReviewReport">
+ <id column="id" property="id" />
+ <result column="objective" property="objective" />
+ <result column="place" property="place" />
+ <result column="compere" property="compere" />
+ <result column="record_people" property="recordPeople" />
+ <result column="date" property="date" />
+ <result column="page" property="page" />
+ <result column="judging_method" property="judgingMethod" />
+ <result column="review_basis" property="reviewBasis" />
+ <result column="attendess" property="attendess" />
+ <result column="review_inputs" property="reviewInputs" />
+ <result column="review_process" property="reviewProcess" />
+ <result column="main_topic" property="mainTopic" />
+ <result column="matters" property="matters" />
+ <result column="head" property="head" />
+ <result column="completion_date" property="completionDate" />
+ <result column="tracking_confirmed" property="trackingConfirmed" />
+ <result column="foller_up" property="follerUp" />
+ <result column="overall_evaluation" property="overallEvaluation" />
+ <result column="audit" property="audit" />
+ <result column="approval" property="approval" />
+ <result column="create_user" property="createUser" />
+ <result column="create_time" property="createTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+ <select id="page" resultType="com.ruoyi.manage.pojo.ManageReviewReport">
+ select * from cnas_manage_review_report
+ <where>
+ <if test="startTime != null and startTime != ''">
+ `date` >= #{startTime}
+ </if>
+ <if test="endTime != null and endTime != ''">
+ and #{endTime} >= `date`
+ </if>
+ <if test="place != null and place != ''">
+ and place = #{place}
+ </if>
+ </where>
+ </select>
+
+</mapper>
diff --git a/cnas-manage/src/main/resources/mapper/ManageRiskAssessmentResultsMapper.xml b/cnas-manage/src/main/resources/mapper/ManageRiskAssessmentResultsMapper.xml
new file mode 100644
index 0000000..bb4e2c6
--- /dev/null
+++ b/cnas-manage/src/main/resources/mapper/ManageRiskAssessmentResultsMapper.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.manage.mapper.ManageRiskAssessmentResultsMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.manage.pojo.ManageRiskAssessmentResults">
+ <id column="id" property="id" />
+ <result column="venue" property="venue" />
+ <result column="hazard" property="hazard" />
+ <result column="accidents" property="accidents" />
+ <result column="injury" property="injury" />
+ <result column="risk_L" property="riskL" />
+ <result column="risk_E" property="riskE" />
+ <result column="risk_C" property="riskC" />
+ <result column="risk_D" property="riskD" />
+ <result column="level" property="level" />
+ <result column="conclusion" property="conclusion" />
+ <result column="measures" property="measures" />
+ <result column="editor" property="editor" />
+ <result column="editor_date" property="editorDate" />
+ <result column="approval" property="approval" />
+ <result column="approval_date" property="approvalDate" />
+ <result column="approve" property="approve" />
+ <result column="approve_date" property="approveDate" />
+ </resultMap>
+
+ <select id="getPageResults" resultType="com.ruoyi.manage.vo.ManageRiskAssessmentResultsVo">
+ select c.*, u1.name editor_name, u2.name approval_name, u3.name approve_name
+ from cnas_manage_risk_assessment_results c
+ left join user u1 on u1.id = c.editor
+ left join user u2 on u2.id = c.approval
+ left join user u3 on u3.id = c.approve
+ <if test="itSExporting == true">
+ where c.approve_status = 1
+ and c.approval_status = 1
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-manage/src/main/resources/static/analysis-risk-factors.docx b/cnas-manage/src/main/resources/static/analysis-risk-factors.docx
new file mode 100644
index 0000000..2a43d7a
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/analysis-risk-factors.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/audit-deal.docx b/cnas-manage/src/main/resources/static/audit-deal.docx
new file mode 100644
index 0000000..5f10163
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/audit-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/cancel-deal.docx b/cnas-manage/src/main/resources/static/cancel-deal.docx
new file mode 100644
index 0000000..fee34ad
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/cancel-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/check-deal.docx b/cnas-manage/src/main/resources/static/check-deal.docx
new file mode 100644
index 0000000..20a6735
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/check-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/customer-satisfaction-questionnaire.docx b/cnas-manage/src/main/resources/static/customer-satisfaction-questionnaire.docx
new file mode 100644
index 0000000..dca145e
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/customer-satisfaction-questionnaire.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-check.docx b/cnas-manage/src/main/resources/static/internal-check.docx
new file mode 100644
index 0000000..7875182
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-check.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-correct.docx b/cnas-manage/src/main/resources/static/internal-correct.docx
new file mode 100644
index 0000000..abf9817
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-correct.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-implement.docx b/cnas-manage/src/main/resources/static/internal-implement.docx
new file mode 100644
index 0000000..6dcf362
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-implement.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-meeting.docx b/cnas-manage/src/main/resources/static/internal-meeting.docx
new file mode 100644
index 0000000..f126cbf
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-meeting.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-plan.docx b/cnas-manage/src/main/resources/static/internal-plan.docx
new file mode 100644
index 0000000..83890be
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-plan.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/internal-report.docx b/cnas-manage/src/main/resources/static/internal-report.docx
new file mode 100644
index 0000000..480641f
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/internal-report.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/intervals-deal.docx b/cnas-manage/src/main/resources/static/intervals-deal.docx
new file mode 100644
index 0000000..4cb9c58
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/intervals-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/recycle-deal.docx b/cnas-manage/src/main/resources/static/recycle-deal.docx
new file mode 100644
index 0000000..bc57eb3
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/recycle-deal.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/review-meet.docx b/cnas-manage/src/main/resources/static/review-meet.docx
new file mode 100644
index 0000000..a9cfd92
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/review-meet.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/review-program.docx b/cnas-manage/src/main/resources/static/review-program.docx
new file mode 100644
index 0000000..eb57164
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/review-program.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/review-report.docx b/cnas-manage/src/main/resources/static/review-report.docx
new file mode 100644
index 0000000..4054db5
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/review-report.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/risk-factor-identification-risk.docx b/cnas-manage/src/main/resources/static/risk-factor-identification-risk.docx
new file mode 100644
index 0000000..af89f9d
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/risk-factor-identification-risk.docx
Binary files differ
diff --git a/cnas-manage/src/main/resources/static/verify-deal.docx b/cnas-manage/src/main/resources/static/verify-deal.docx
new file mode 100644
index 0000000..f7929c2
--- /dev/null
+++ b/cnas-manage/src/main/resources/static/verify-deal.docx
Binary files differ
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..f4bb37f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java
@@ -0,0 +1,243 @@
+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.core.domain.entity.DepartmentLims;
+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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+@Tag(name = "浜哄憳-浜哄憳鍩烘湰淇℃伅")
+@RestController
+@RequestMapping("/personBasicInfo")
+public class PersonBasicInfoController {
+
+ @Resource
+ private PersonBasicInfoService personBasicInfoService;
+
+ @Resource
+ private PersonBasicInfoFileService personBasicInfoFileService;
+ @Resource
+ private PersonBasicInfoWorkService personBasicInfoWorkService;
+
+ @Resource
+ private AnnexService annexService;
+
+
+ @Operation(summary = "鏌ヨCNAS浜哄憳渚ц竟鏍�")
+ @GetMapping("/selectCNSAPersonTree")
+ public Result<List<DepartmentDto>> selectCNSAPersonTree() {
+ return Result.success(personBasicInfoService.selectCNSAPersonTree());
+ }
+
+ @Operation(summary = "鑾峰彇CNAS浜哄憳鍩烘湰淇℃伅")
+ @GetMapping("/getCNASPersonnelInfo")
+ public Result getCNASPersonnelInfo(Integer userId) {
+ return Result.success(personBasicInfoService.getCNASPersonnelInfo(userId));
+ }
+
+ @Operation(summary = "淇濆瓨CNAS浜哄憳鍩烘湰淇℃伅")
+ @PostMapping("/saveCNASPersonnelInfo")
+ public Result saveCNASPersonnelInfo(@RequestBody PersonBasicInfoDto personBasicInfoDto) {
+ personBasicInfoService.saveCNASPersonnelInfo(personBasicInfoDto);
+ return Result.success();
+ }
+
+ @Operation(summary = "浜哄憳鏄庣粏鍒嗛〉鏌ヨ")
+ @GetMapping("basicInformationOfPersonnelSelectPage")
+ public Result<IPage<Map<String, Object>>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId) {
+ return Result.success(personBasicInfoService.basicInformationOfPersonnelSelectPage(page, name, departmentId));
+ }
+
+ // 涓婁紶鏂囦欢鎺ュ彛
+ @Operation(summary = "涓婁紶鏂囦欢鎺ュ彛")
+ @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();
+ }
+
+ @Operation(summary = "瀵煎嚭浜哄憳鍩烘湰淇℃伅")
+ @GetMapping("/exportPersonBasicInfo")
+ public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception {
+ personBasicInfoService.exportPersonBasicInfo(userPageDto,response);
+ }
+
+ @Operation(summary = "涓嬭浇浜哄憳妗f鍗�")
+ @GetMapping("/exportPersonBasicInfoById")
+ public Result exportPersonBasicInfoById(Integer id, HttpServletResponse response) {
+ return Result.success(personBasicInfoService.exportPersonBasicInfoById(id,response));
+ }
+
+ /**
+ * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板
+ * @param userId
+ * @param file
+ * @return
+ */
+ @Operation(summary = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板")
+ @PostMapping("/uploadBasicInfoFile")
+ public Result<?> uploadBasicInfoFile(Integer userId, MultipartFile file) {
+ return Result.success(personBasicInfoService.uploadBasicInfoFile(userId, file));
+ }
+
+
+ /**
+ * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒楄〃
+ * @return
+ */
+ @Operation(summary = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒楄〃")
+ @GetMapping("/getBasicInfoFileList")
+ public Result<List<PersonBasicInfoFile>> getBasicInfoFileList(Integer userId){
+ return Result.success(personBasicInfoFileService.list(Wrappers.<PersonBasicInfoFile>lambdaQuery()
+ .eq(PersonBasicInfoFile::getUserId, userId)));
+ }
+
+ /**
+ * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒犻櫎")
+ @DeleteMapping("/delBasicInfoFileList")
+ public Result delBasicInfoFileList(Integer basicInfoFileId){
+ return Result.success(personBasicInfoFileService.removeById(basicInfoFileId));
+ }
+
+ /**
+ * 浜哄憳鍩硅鍩烘湰淇℃伅宸ヤ綔缁忓巻鏂板
+ * @return
+ */
+ @Operation(summary = "浜哄憳鍩硅鍩烘湰淇℃伅宸ヤ綔缁忓巻鏂板")
+ @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
+ */
+ @Operation(summary = "浜哄憳宸ヤ綔缁忓巻鍒楄〃")
+ @GetMapping("/getBasicInfoWorkList")
+ public Result<List<PersonBasicInfoWork>> getBasicInfoWorkList(Integer userId){
+ return Result.success(personBasicInfoWorkService.list(Wrappers.<PersonBasicInfoWork>lambdaQuery()
+ .eq(PersonBasicInfoWork::getUserId, userId)));
+ }
+
+ /**
+ * 浜哄憳宸ヤ綔缁忓巻鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "浜哄憳宸ヤ綔缁忓巻鍒犻櫎")
+ @DeleteMapping("/delBasicInfoWorkList")
+ public Result delBasicInfoWorkList(Integer basicInfoWorkId){
+ return Result.success(personBasicInfoWorkService.removeById(basicInfoWorkId));
+ }
+
+ /**
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "浜哄憳宸ヤ綔缁忓巻淇敼")
+ @PostMapping("/updateBasicInfoWorkList")
+ public Result updateBasicInfoWorkList(@RequestBody PersonBasicInfoWork basicInfoWork){
+ return Result.success(personBasicInfoWorkService.updateById(basicInfoWork));
+ }
+
+
+ @Operation(summary = "娣诲姞缁勭粐鏋舵瀯")
+ @PostMapping("/addDepartmentLims")
+ public Result addDepartmentLims(@RequestBody DepartmentLims department) {
+ return Result.success(personBasicInfoService.addDepartment(department));
+ }
+
+ @Operation(summary = "鍒犻櫎缁勭粐鏋舵瀯")
+ @DeleteMapping("/delDepartmentLims")
+ public Result delDepartmentLims(Integer id) {
+ return Result.success(personBasicInfoService.delDepartment(id));
+ }
+}
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..ad9566b
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 娌熼�氳褰� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-10-09 12:00:57
+ */
+@Tag(name = "浜哄憳 - 娌熼�氳褰�")
+@RestController
+@RequestMapping("/personCommunicationAbility")
+public class PersonCommunicationAbilityController {
+
+ @Autowired
+ private PersonCommunicationAbilityService personCommunicationAbilityService;
+
+ @Operation(summary = "鏂板/鏇存柊 娌熼�氳褰�")
+ @PostMapping("addOrUpdatePersonCommunicationAbility")
+ public Result<?> addOrUpdatePersonCommunicationAbility(@RequestBody PersonCommunicationAbility personCommunicationAbility) {
+ personCommunicationAbilityService.saveOrUpdate(personCommunicationAbility);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍒犻櫎 娌熼�氳褰�")
+ @DeleteMapping("deletePersonCommunicationAbility")
+ public Result<?> deletePersonCommunicationAbility(@RequestParam("id") Integer id) {
+ personCommunicationAbilityService.removeById(id);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "鏌ヨ 娌熼�氳褰�")
+ @GetMapping("personPersonCommunicationAbilityPage")
+ public Result<IPage<PersonCommunicationAbilityDto>> personPersonCommunicationAbilityPage(Page page,
+ Integer departLimsId,
+ Integer userId,
+ String userName) {
+ return Result.success(personCommunicationAbilityService.personPersonCommunicationAbilityPage(page, departLimsId, userId, userName));
+ }
+
+ @Operation(summary = "瀵煎嚭娌熼�氳褰�")
+ @GetMapping("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..76ed308
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-10-09 02:07:49
+ */
+@Tag(name = "浜哄憳 - 宀椾綅鑱岃矗")
+@RestController
+@RequestMapping("/personJobResponsibilities")
+public class PersonJobResponsibilitiesController {
+ @Autowired
+ private PersonJobResponsibilitiesService personJobResponsibilitiesService;
+
+ @Operation(summary = "鏂板/鏇存柊 宀椾綅鑱岃矗")
+ @PostMapping("/personJobResponsibilitiesSave")
+ public Result<?> personJobResponsibilitiesSave(@RequestBody PersonJobResponsibilities personJobResponsibilities) {
+ personJobResponsibilitiesService.saveOrUpdate(personJobResponsibilities);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "鍒犻櫎 宀椾綅鑱岃矗")
+ @DeleteMapping("/personJobResponsibilitiesDelete")
+ public Result<?> personJobResponsibilitiesDelete(@RequestParam("id") Integer id) {
+ personJobResponsibilitiesService.removeById(id);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "鏌ヨ 宀椾綅鑱岃矗")
+ @GetMapping("/personJobResponsibilitiesSelect")
+ public Result personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
+ IPage<PersonJobResponsibilitiesDto> iPage = personJobResponsibilitiesService.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
+ return Result.success(iPage);
+ }
+
+
+ @Operation(summary = "瀵煎嚭浠昏亴宀椾綅璇存槑璇�")
+ @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..814664f
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浜哄憳鑳藉姏 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-10-10 11:26:18
+ */
+@Tag(name = "浜哄憳 - 浜哄憳鑳藉姏")
+@RestController
+@RequestMapping("/personPersonnelCapacity")
+public class PersonPersonnelCapacityController {
+
+ @Autowired
+ private PersonPersonnelCapacityService personPersonnelCapacityService;
+
+
+ @Operation(summary = "鏂板/鏇存柊 浜哄憳鑳藉姏")
+ @PostMapping("addOrUpdatePersonPersonnelCapacity")
+ public Result<?> addOrUpdatePersonPersonnelCapacity(@RequestBody PersonPersonnelCapacity personPersonnelCapacity) {
+ personPersonnelCapacityService.saveOrUpdate(personPersonnelCapacity);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍒犻櫎 浜哄憳鑳藉姏")
+ @DeleteMapping("deletePersonPersonnelCapacity")
+ public Result<?> deletePersonPersonnelCapacity(@RequestParam("id") Integer id) {
+ // 鍒犻櫎鏁版嵁
+ personPersonnelCapacityService.removeById(id);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏌ヨ 浜哄憳鑳藉姏")
+ @GetMapping("personPersonnelCapacityPage")
+ public Result<IPage<PersonPersonnelCapacityDto>> personPersonnelCapacityPage(Page page,
+ Integer departmentId,
+ Integer userId,
+ String userName) {
+ return Result.success(personPersonnelCapacityService.personPersonnelCapacityPage(page, departmentId, userId, userName));
+ }
+
+ @Operation(summary = "纭 浜哄憳鑳藉姏")
+ @PostMapping("confirmPersonnelCapability")
+ public Result<?> confirmPersonnelCapability(@RequestBody PersonPersonnelCapacity personPersonnelCapacity) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ personPersonnelCapacityService.update(Wrappers.<PersonPersonnelCapacity>lambdaUpdate()
+ .eq(PersonPersonnelCapacity::getId, personPersonnelCapacity.getId())
+ .set(PersonPersonnelCapacity::getConfirmOperatingPersonnelId, userId)
+ .set(PersonPersonnelCapacity::getConfirmDate, personPersonnelCapacity.getConfirmDate()));
+ return Result.success();
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鑳藉姏
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭浜哄憳鑳藉姏")
+ @GetMapping("/exportPersonnelCapacity")
+ public void exportPersonnelCapacity(Integer id, HttpServletResponse response){
+ personPersonnelCapacityService.exportPersonnelCapacity(id, response);
+ }
+
+ /**
+ * 鎻愪氦纭浜哄憳鑳藉姏
+ * @param personPersonnelCapacity
+ * @return
+ */
+ @Operation(summary = "鎻愪氦")
+ @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..d5b5893
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-10-09 10:48:17
+ */
+@Tag(name = "浜哄憳 - 浠昏亴鎺堟潈璁板綍")
+@RestController
+@RequestMapping("/personPostAuthorizationRecord")
+public class PersonPostAuthorizationRecordController {
+
+ @Autowired
+ private PersonPostAuthorizationRecordService personPostAuthorizationRecordService;
+
+ @Operation(summary = "鏂板/鏇存柊 浠昏亴鎺堟潈璁板綍")
+ @PostMapping("/addOrUpdatePersonPostAuthorizationRecord")
+ public Result<?> addOrUpdatePersonPostAuthorizationRecord(@RequestBody PersonPostAuthorizationRecord personRewardPunishmentRecord) {
+ personPostAuthorizationRecordService.saveOrUpdate(personRewardPunishmentRecord);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍒犻櫎 浠昏亴鎺堟潈璁板綍")
+ @DeleteMapping("/deletePersonPostAuthorizationRecord")
+ public Result<?> deletePersonPostAuthorizationRecord(@RequestParam("id") Integer id) {
+ // 鍒犻櫎鏂囦欢
+ PersonPostAuthorizationRecord postAuthorizationRecord = personPostAuthorizationRecordService.getById(id);
+ FileSaveUtil.DeleteFile(postAuthorizationRecord.getSystemFileName());
+ // 鍒犻櫎鏁版嵁
+ personPostAuthorizationRecordService.removeById(id);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "鏌ヨ 浠昏亴鎺堟潈璁板綍")
+ @GetMapping("/PersonPostAuthorizationRecordPage")
+ public Result<IPage<PersonPostAuthorizationRecordDto>> PersonPostAuthorizationRecordPage(Page page,
+ Integer departLimsId,
+ Integer userId,
+ String userName) {
+ return Result.success(personPostAuthorizationRecordService.personPostAuthorizationRecordPage(page, departLimsId, userId, userName));
+ }
+
+ @Operation(summary = "瀵煎嚭宀椾綅鑱屼笟璧勬牸璇佷功")
+ @GetMapping("/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..3e5bfe5
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.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
+ */
+@Tag(name = "浜哄憳 - 濂栨儵璁板綍")
+@RestController
+@RequestMapping("/personRewardPunishmentRecord")
+public class PersonRewardPunishmentRecordController {
+
+ @Autowired
+ private PersonRewardPunishmentRecordService personRewardPunishmentRecordService;
+
+ @Operation(summary = "鏂板/鏇存柊 濂栨儵璁板綍")
+ @PostMapping("/addOrUpdateRewardPunishment")
+ public Result<?> PersonTrainingSave(@RequestBody PersonRewardPunishmentRecord personRewardPunishmentRecord) {
+ personRewardPunishmentRecordService.saveOrUpdate(personRewardPunishmentRecord);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍒犻櫎濂栨儵璁板綍")
+ @DeleteMapping("/deleteRewardPunishment")
+ public Result<?> deleteRewardPunishment(@RequestParam("id") Integer id) {
+ personRewardPunishmentRecordService.removeById(id);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏌ヨ 濂栨儵璁板綍")
+ @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));
+ }
+
+ @Operation(summary = "濂栨儵璁板綍瀵煎嚭")
+ @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..e25a6e0
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-10-11 01:11:49
+ */
+@Tag(name = "浜哄憳 - 鍩硅璁″垝")
+@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;
+
+ @Operation(summary = "鍩硅璁″垝 瀵煎叆")
+ @PostMapping("personTrainingImport")
+ public Result<?> personTrainingImport(@RequestPart("file") MultipartFile file, PersonTraining training) {
+ personTrainingService.personTrainingImport(file, training);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍩硅璁″垝 鍒犻櫎")
+ @DeleteMapping("personTrainingDelete")
+ public Result<?> personTrainingDelete(@RequestParam("id") Integer id) {
+ personTrainingService.personTrainingDelete(id);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍩硅璁″垝 鏌ヨ")
+ @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);
+ }
+
+ @Operation(summary = "骞村害鍩硅璁″垝 瀹℃牳")
+ @PostMapping("reviewAnnualPersonnelTraining")
+ public Result<?> reviewAnnualPersonnelTraining(@RequestBody PersonTraining training) {
+ personTrainingService.reviewAnnualPersonnelTraining(training);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍩硅璁″垝 鎵瑰噯")
+ @PostMapping("approveAnnualPersonnelTraining")
+ public Result<?> approveAnnualPersonnelTraining(@RequestBody PersonTraining training) {
+ personTrainingService.approveAnnualPersonnelTraining(training);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "骞村害璁″垝鏄庣粏琛� 鏂板/缂栬緫")
+ @PostMapping("addOrUpdatePersonTrainingDetailed")
+ public Result<?> addOrUpdatePersonTrainingDetailed(@RequestBody PersonTrainingDetailed personTrainingDetailed) {
+ if (ObjectUtils.isEmpty(personTrainingDetailed.getId())) {
+ personTrainingDetailed.setState(3);
+ }
+ personTrainingDetailedService.saveOrUpdate(personTrainingDetailed);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "骞村害璁″垝鏄庣粏琛� 鎵归噺鍒犻櫎")
+ @DeleteMapping("deleteAnnualPlanDetailTable")
+ public Result<?> deleteAnnualPlanDetailTable(String ids) {
+ personTrainingDetailedService.deleteAnnualPlanDetailTable(ids);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "骞村害璁″垝鏄庣粏琛� 鏌ヨ")
+ @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);
+ }
+
+
+ @Operation(summary = "鍩硅涓庤�冩牳璁板綍 鏌ヨ")
+ @GetMapping("trainingAndAssessmentRecordsPage")
+ public Result<List<PersonTrainingRecordDto>> trainingAndAssessmentRecordsPage(Integer trainingDetailedId,
+ String userName) {
+ List<PersonTrainingRecordDto> list = personTrainingRecordService.trainingAndAssessmentRecordsPage(trainingDetailedId, userName);
+ return Result.success(list);
+ }
+
+
+ @Operation(summary = "鍩硅涓庤�冩牳璁板綍 鏂板浜哄憳")
+ @PostMapping("newPersonnelAddedToTrainingRecords")
+ public Result<?> newPersonnelAddedToTrainingRecords(@RequestBody List<PersonTrainingRecord> personTrainingRecord) {
+ personTrainingRecordService.saveBatch(personTrainingRecord);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "鍩硅涓庤�冩牳璁板綍 璁ら")
+ @PostMapping("claimOfTrainingAndAssessmentRecords")
+ public Result<?> claimOfTrainingAndAssessmentRecords(@RequestParam("claimAndClaim") Boolean claimAndClaim,
+ @RequestParam("courseId") Integer courseId) {
+ personTrainingRecordService.claimOfTrainingAndAssessmentRecords(claimAndClaim, courseId);
+ return Result.success();
+ }
+
+
+ @Operation(summary = "鍩硅涓庤�冩牳璁板綍 鎻愪氦/鎾ら攢")
+ @PostMapping("trainingAndAssessmentRecordsAdded")
+ public Result<?> trainingAndAssessmentRecordsAdded(@RequestBody PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) {
+ personTrainingRecordService.trainingAndAssessmentRecordsAdded(personTrainingRecordSubmitDto);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍩硅涓庤�冩牳璁板綍 璇勪环")
+ @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();
+ }
+
+
+ @Operation(summary = "鍩硅涓庤�冩牳璁板綍 鍒犻櫎")
+ @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
+ */
+
+ @Operation(summary = "瀵煎嚭浜哄憳鍩硅璁″垝")
+ @GetMapping("/exportPersonTraining")
+ public void exportPersonTraining(Integer id, HttpServletResponse response){
+ personTrainingService.exportPersonTraining(id, response);
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍")
+ @GetMapping("/exportPersonTrainingRecord")
+ public void exportPersonTrainingRecord(Integer id, HttpServletResponse response){
+ personTrainingService.exportPersonTrainingRecord(id, response);
+ }
+
+ /**
+ * 浜哄憳鍩硅璇︽儏闄勪欢鏂板
+ * @param trainingDetailedId
+ * @param file
+ * @return
+ */
+ @Operation(summary = "浜哄憳鍩硅璇︽儏闄勪欢鏂板")
+ @PostMapping("/uploadTrainingDetailedFile")
+ public Result<?> uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file) {
+ return Result.success(personTrainingService.uploadTrainingDetailedFile(trainingDetailedId, file));
+ }
+
+
+ /**
+ * 浜哄憳鍩硅璇︽儏闄勪欢鍒楄〃
+ * @return
+ */
+ @Operation(summary = "浜哄憳鍩硅璇︽儏闄勪欢鍒楄〃")
+ @GetMapping("/getTrainingDetailedFileList")
+ public Result<List<PersonTrainingDetailedFile>> getTrainingDetailedFileList(Integer trainingDetailedId){
+ return Result.success(personTrainingDetailedFileMapper.selectList(Wrappers.<PersonTrainingDetailedFile>lambdaQuery()
+ .eq(PersonTrainingDetailedFile::getTrainingDetailedId, trainingDetailedId)));
+ }
+
+ /**
+ * 浜哄憳鍩硅璇︽儏闄勪欢鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "浜哄憳鍩硅璇︽儏闄勪欢鍒犻櫎")
+ @DeleteMapping("/delTrainingDetailedFileList")
+ public Result delTrainingDetailedFileList(Integer detailedFileId){
+ return Result.success(personTrainingDetailedFileMapper.deleteById(detailedFileId));
+ }
+
+ /**
+ * 鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅
+ * @return
+ */
+ @Operation(summary = "鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅")
+ @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..ed855d3
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+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 jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-10-11 01:11:49
+ */
+@Tag(name = "浜哄憳 - 鍩硅璁板綍")
+@RestController
+@RequestMapping("/personTrainingRecord")
+public class PersonTrainingRecordController {
+
+ @Autowired
+ private PersonTrainingRecordService personTrainingRecordService;
+
+ @Operation(summary = "鏌ヨ浜哄憳 鍩硅璁板綍")
+ @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);
+ }
+
+
+ @Operation(summary = "鏌ヨ浜哄憳鏄庣粏 鍩硅璁板綍")
+ @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
+ */
+ @Operation(summary = "瀵煎嚭浜哄憳鍩硅璁板綍")
+ @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..d5646f4
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-13 鏄熸湡浜� 13:52:52
+ * Description:
+ */
+@Data
+public class PersonBasicInfoDetailsDto {
+
+ @Schema(description = "鐢ㄦ埛id")
+ private Integer userId;
+
+ @Schema(description = "鐢ㄦ埛濮撳悕")
+ private String name;
+
+ @Schema(description = "鍏ヨ亴鏃堕棿")
+ private String entryTimeStr;
+
+ @Schema(description = "瀹為檯瀹炰範缁撴潫")
+ private String endPracticalPracticeStr;
+
+ @Schema(description = "绫嶈疮")
+ private String nativePlace;
+
+ @Schema(description = "韬唤璇佸彿")
+ private String identityCard;
+
+ @Schema(description = "韬唤璇佸湴鍧�")
+ private String idAddress;
+
+ @Schema(description = "鐢ㄦ埛鎵嬫満鍙�")
+ private String phone;
+
+ @Schema(description = "姣曚笟闄㈡牎")
+ private String graduatedInstitutions1;
+
+ @Schema(description = "涓撲笟")
+ private String major1;
+
+ @Schema(description = "姣曚笟鏃堕棿1")
+ private LocalDateTime graduationTime1;
+
+ @Schema(description = "鏈�楂樺鍘�")
+ private String officialAcademicRedentials;
+
+ @Schema(description = "鏈�楂樺浣�")
+ private String highestDegree;
+
+ @Schema(description = "鑱岀О")
+ private String professionalTitle;
+
+ // 鑱屼笟鑳藉姏
+
+ @Schema(description = "绱ф�ヨ仈绯讳汉")
+ private String emergencyContact;
+
+ @Schema(description = "绱ф�ヨ仈绯讳汉鐢佃瘽")
+ 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..a1231e6
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+@ExcelIgnoreUnannotated
+public class PersonBasicInfoDto extends PersonBasicInfo {
+ @Schema(description = "璐﹀彿")
+ @ExcelProperty("鍛樺伐缂栧彿")
+ private String account;
+
+ @Schema(description = "濮撳悕")
+ @ExcelProperty("濮撳悕")
+ private String name;
+
+ @Schema(description = "濮撳悕(鑻辨枃)")
+ private String nameEn;
+
+ @Schema(description = "骞撮緞")
+ private Integer age;
+
+ @Schema(description = "鐢佃瘽鍙风爜")
+ @ExcelProperty("鎵嬫満鍙�")
+ private String phone;
+
+ @Schema(description = "閭")
+ private String email;
+
+ @Schema(description = "閮ㄩ棬")
+ private String department;
+
+ @Schema(description = "lims缁勭粐鏋舵瀯")
+ private String departLimsId;
+
+ @Schema(description = "绛惧悕鐓х墖鍦板潃")
+ private String signatureUrl;
+
+ @Schema(description = "鑷韩鐓х墖鍦板潃")
+ 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..f781560
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2025/1/14
+ */
+@Data
+public class PersonBasicInfoWorkDto extends PersonBasicInfoWork {
+
+ @Schema(description = "濉厖浣跨敤")
+ 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..4dd0c80
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class PersonPersonnelCapacityDto extends PersonPersonnelCapacity {
+
+ @Schema(description = "鎿嶄綔浜哄鍚�")
+ private String confirmOperatingPersonnelName;
+
+ @Schema(description = "浜哄憳濮撳悕")
+ private String userName;
+
+ @Schema(description = "宀椾綅鍚嶇О")
+ private String postName;
+
+ @Schema(description = "宀椾綅鑱岃矗")
+ private String responsibilities;
+
+ @Schema(description = "宸ヤ綔缁忓巻")
+ private String placeWork;
+
+ @Schema(description = "涓撲笟")
+ private String major;
+
+ @Schema(description = "鑱岀О")
+ 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..3266dba
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/28
+ */
+@Data
+public class PersonPersonnelCapacityExportDto extends PersonPersonnelCapacity {
+
+ @Schema(description = "宀椾綅鍚嶇О")
+ private String postName;
+
+ @Schema(description = "浜哄憳濮撳悕")
+ private String userName;
+
+ @Schema(description = "瀛﹀巻")
+ private String officialAcademicRedentials;
+
+ @Schema(description = "涓撲笟")
+ private String major;
+
+ @Schema(description = "鑱岀О")
+ private String professionalTitle;
+
+ @Schema(description = "宸ヤ綔缁忓巻")
+ private String placeWork;
+
+ @Schema(description = "瀛﹀巻 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String academicConformNot1 = "鈻�";
+ @Schema(description = "瀛﹀巻 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String academicConformNot2 = "鈻�";
+ @Schema(description = "瀛﹀巻 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String academicConformNot3 = "鈻�";
+
+ @Schema(description = "鐩稿叧骞撮檺 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String relatedYearsConformNot1 = "鈻�";
+ @Schema(description = "鐩稿叧骞撮檺 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String relatedYearsConformNot2 = "鈻�";
+ @Schema(description = "鐩稿叧骞撮檺 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String relatedYearsConformNot3 = "鈻�";
+
+ @Schema(description = "鐩稿叧鍩硅 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String relatedTrainingConformNot1 = "鈻�";
+ @Schema(description = "鐩稿叧鍩硅 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String relatedTrainingConformNot2 = "鈻�";
+ @Schema(description = "鐩稿叧鍩硅 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String relatedTrainingConformNot3 = "鈻�";
+
+ @Schema(description = "鐩稿叧缁忛獙 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String relevantExperienceConformNot1 = "鈻�";
+ @Schema(description = "鐩稿叧缁忛獙 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String relevantExperienceConformNot2 = "鈻�";
+ @Schema(description = "鐩稿叧缁忛獙 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String relevantExperienceConformNot3 = "鈻�";
+
+ @Schema(description = "涓婂矖璇� 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String workLicenseConformNot1 = "鈻�";
+ @Schema(description = "涓婂矖璇� 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String workLicenseConformNot2 = "鈻�";
+ @Schema(description = "涓婂矖璇� 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String workLicenseConformNot3 = "鈻�";
+
+ @Schema(description = "宀椾綅鑱岃矗1(鐔熸倝鏈矖浣嶇殑浜у搧妫�娴嬫牱鍝佸埗澶囧拰鐩稿叧浜у搧鍩虹鐭ヨ瘑)")
+ private String jobResponsibilities1 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗2(鐔熸倝鏈矖浣嶆牱鍝佹娴嬫祦绋�)")
+ private String jobResponsibilities2 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗3(姝g‘鐔熺粌鎿嶄綔鏈矖浣嶄华琛ㄨ澶�)")
+ private String jobResponsibilities3 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗4(鐔熸倝鏈矖浣嶇浉鍏虫娴嬫爣鍑�)")
+ private String jobResponsibilities4 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗5(鐔熸倝鏈矖浣嶄骇鍝佹�ц兘鍙婄粨鏋滃垽鏂�佸垎鏋�)")
+ private String jobResponsibilities5 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗6(瀹屾垚鐩稿簲鐨勫巶楠屻�佽璇�)")
+ private String jobResponsibilities6 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗7(缂栧啓鐩稿叧妫�娴嬫墜椤�)")
+ private String jobResponsibilities7 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗8(浜嗚В浠櫒璁惧鍩烘湰缁撴瀯涓庣畝鍗曠淮鎶や繚鍏�)")
+ private String jobResponsibilities8 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗9(鍏峰鎶�鑳藉煿璁殑鑳藉姏)")
+ private String jobResponsibilities9 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗10(鍏峰妫�娴嬩华鍣ㄦ敼閫犺兘鍔�)")
+ private String jobResponsibilities10 = "鈻�";
+
+ @Schema(description = "宀椾綅鑱岃矗 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String jobResponsibilitiesConformNot1 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String jobResponsibilitiesConformNot2 = "鈻�";
+ @Schema(description = "宀椾綅鑱岃矗 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String jobResponsibilitiesConformNot3 = "鈻�";
+
+ @Schema(description = "缁煎悎璇勪环1(鍙儨浠昏宀椾綅)")
+ private String comprehensiveAssessment1 = "鈻�";
+ @Schema(description = "缁煎悎璇勪环2(鍙竟鍩硅杈逛笂宀�)")
+ private String comprehensiveAssessment2 = "鈻�";
+ @Schema(description = "缁煎悎璇勪环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..c42193c
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java
@@ -0,0 +1,36 @@
+package com.ruoyi.personnel.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.deepoove.poi.data.PictureRenderData;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class PersonTrainingDetailedDto extends PersonTrainingDetailed {
+
+ @Schema(description = "涓惧姙閮ㄩ棬鍚嶇О")
+ private String holdingDepartmentName;
+
+ @Schema(description = "鍩硅璁插笀鍚嶇О")
+ private String trainingLecturerName;
+
+ @Schema(description = "鍩硅鑰佸笀鍦板潃")
+ private String trainingLecturerSignatureUrl;
+
+ @Schema(description = "鍩硅鑰佸笀鍦板潃娴�")
+ private PictureRenderData trainingLecturerRender;
+
+ @Schema(description = "褰撳墠鐧诲綍浜烘槸鍚﹁棰�")
+ private Boolean whetherClaim;
+
+
+ @Schema(description = "鍩硅鏃ユ湡")
+ private String trainingDateString;
+
+ // 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ @Schema(description = "搴忓彿(瀵煎嚭浣跨敤)")
+ 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..1a6c3fa
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonTraining;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(description = "鍩硅璁″垝")
+public class PersonTrainingDto extends PersonTraining {
+
+ @Schema(description = "缂栧埗浜哄鍚�")
+ private String compilerName;
+
+ @Schema(description = "瀹℃牳浜哄鍚�")
+ private String reviewerName;
+
+ @Schema(description = "鎵瑰噯浜哄鍚�")
+ private String approverName;
+
+ @Schema(description = "鍒涘缓浜哄鍚�")
+ 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..db78507
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.personnel.dto;
+
+import com.deepoove.poi.data.PictureRenderData;
+import com.ruoyi.personnel.pojo.PersonTrainingRecord;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class PersonTrainingRecordDto extends PersonTrainingRecord {
+ @Schema(description = "濮撳悕")
+ private String userName;
+
+ @Schema(description = "宸ュ彿")
+ private String account;
+
+ @Schema(description = "瑙掕壊")
+ private String roleName;
+
+ @Schema(description = "鐢佃瘽鍙风爜")
+ private String phone;
+
+ @Schema(description = "閮ㄩ棬")
+ private String department;
+
+ @Schema(description = "鍩硅浜哄憳鍥剧墖")
+ private String signatureUrl;
+}
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..5d234e1
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PersonTrainingRecordListDto {
+
+ @Schema(description = "鐢ㄦ埛id")
+ private Integer userId;
+
+ @Schema(description = "鍛樺伐缂栧彿")
+ private String account;
+
+ @Schema(description = "鐢ㄦ埛濮撳悕")
+ private String name;
+
+ @Schema(description = "鎵�鍦ㄩ儴闂�")
+ private String departLimsName;
+
+ @Schema(description = "鑱岀О")
+ private String professionalTitle;
+
+ @Schema(description = "鏈�楂樺鍘�")
+ private String officialAcademicRedentials;
+
+ @Schema(description = "鍏ュ崟浣嶆椂闂�")
+ private LocalDateTime unitTime;
+
+ @Schema(description = "鍏ュ崟浣嶆椂闂�")
+ private String unitTimeSting;
+
+ @Schema(description = "涓撲笟")
+ 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..ec9b26e
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class PersonTrainingRecordSubmitDto {
+
+ @Schema(description = "骞村害璁″垝鏄庣粏ID")
+ private Integer trainingDetailedId;
+
+ @Schema(description = "鍩硅鍦扮偣")
+ private String placeTraining;
+
+ @Schema(description = "鍩硅瀹屾垚鏃堕棿")
+ private LocalDate openingTime;
+
+ @Schema(description = "鑰冩牳鏂瑰紡")
+ private String assessmentMethod;
+
+ @Schema(description = "鏈鍩硅缁煎悎璇勪环")
+ private String comprehensiveAssessment;
+
+ @Schema(description = "璇勪环浜�")
+ private Integer assessmentUserId;
+
+ @Schema(description = "璇勪环鏃堕棿")
+ 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..fa2a9c9
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java
@@ -0,0 +1,36 @@
+package com.ruoyi.personnel.dto;
+
+import com.deepoove.poi.data.PictureRenderData;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/25
+ */
+@Data
+public class TrainingRecordExportDto {
+
+ @Schema(description = "鐢ㄦ埛鍚嶇О1")
+ private PictureRenderData userNameRender1;
+
+ @Schema(description = "閮ㄩ棬1")
+ private String department1;
+
+ @Schema(description = "鑰冩牳缁撴灉1")
+ private String examinationResults1;
+
+ @Schema(description = "鐢ㄦ埛鍚嶇О2")
+ private PictureRenderData userNameRender2;
+
+ @Schema(description = "閮ㄩ棬1")
+ private String department2;
+
+ @Schema(description = "鑰冩牳缁撴灉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..fde3faf
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class TrainingRecordPersonDetailedDto {
+
+ @Schema(description = "鍩硅鏃ユ湡")
+ private String trainingDateString;
+
+ @Schema(description = "鍩硅鏃ユ湡")
+ private String trainingDate;
+
+ @Schema(description = "鍩硅鍐呭")
+ private String trainingContent;
+
+ @Schema(description = "璇炬椂")
+ private Integer classHour;
+
+ @Schema(description = "鑰冩牳缁撴灉")
+ private String examinationResults;
+
+ @Schema(description = "澶囨敞")
+ 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..77c257d
--- /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.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserPageDto extends User {
+
+ @Schema(description = "鍒涘缓鐢ㄦ埛")
+ private String createUserName;
+
+ @Schema(description = "鏇存柊鐢ㄦ埛")
+ private String updateUserName;
+
+ @Schema(description = "瑙掕壊")
+ 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..f5dd8b3
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java
@@ -0,0 +1,38 @@
+package com.ruoyi.personnel.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class PersonTrainingDetailedUpload {
+
+ @ExcelProperty("鍩硅澶х被")
+ private String trainingCategory;
+
+ @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..b915ccf
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java
@@ -0,0 +1,43 @@
+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 org.apache.ibatis.annotations.Param;
+
+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, @Param("name") String name, @Param("departmentId") 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..b309b95
--- /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..cf13fd2
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.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.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-10-09 02:07:49
+ */
+public interface PersonJobResponsibilitiesMapper extends BaseMapper<PersonJobResponsibilities> {
+
+ IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, @Param("userId") String userId, @Param("departmentId") String departmentId, @Param("userName") 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..4574a32
--- /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, @Param("departLimsId") Integer departLimsId,@Param("userId") Integer userId,@Param("userName") 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..a10a7e7
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.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.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-10-09 10:48:17
+ */
+public interface PersonPostAuthorizationRecordMapper extends BaseMapper<PersonPostAuthorizationRecord> {
+
+ IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(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/PersonRewardPunishmentRecordMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java
new file mode 100644
index 0000000..b0633b3
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java
@@ -0,0 +1,27 @@
+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 org.apache.ibatis.annotations.Param;
+
+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, @Param("userId") Integer userId, @Param("userName") String userName,@Param("startTime") Date startTime, @Param("endTime") Date endTime,@Param("departmentId") Integer departmentId);
+
+ List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(@Param("userId") Integer userId, @Param("departmentId") Integer departmentId, @Param("userName") String userName, @Param("startTime") Date startTime, @Param("endTime") 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..2802d6e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java
@@ -0,0 +1,49 @@
+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,
+ @Param("trainingLecturerName") String trainingLecturerName,
+ @Param("courseCode") String courseCode,
+ @Param("trainingDate") String trainingDate,
+ @Param("id") Integer id,
+ @Param("userId") Integer userId,
+ @Param("loginUserId") 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..d10c5b4
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.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.PersonTrainingDto;
+import com.ruoyi.personnel.pojo.PersonTraining;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-10-11 01:11:49
+ */
+public interface PersonTrainingMapper extends BaseMapper<PersonTraining> {
+
+ IPage<PersonTrainingDto> personTrainingSelect(Page page, @Param("compilerName") String compilerName,@Param("departLimsId") 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..f0ddb1d
--- /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(@Param("trainingDetailedId") Integer trainingDetailedId,@Param("userName") String userName);
+
+ IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, @Param("userName") String userName, @Param("userId") Integer userId,@Param("departLimsId") 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, @Param("userId") Integer userId, @Param("year") Integer year);
+
+ /**
+ * 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍瀵煎嚭
+ * @param userId
+ * @param trainingDate
+ * @return
+ */
+ List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtosByTrainingDate(@Param("userId") Integer userId, @Param("year") 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..0f82eaa
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java
@@ -0,0 +1,47 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("cnas_annex")
+@Schema(description = "浜哄憳鍩烘湰淇℃伅闄勪欢琛�")
+public class Annex implements Serializable {
+
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "user琛╥d")
+ private Integer userId;
+
+ @Schema(description = "璇佷欢鍙�")
+ private String idNumber;
+
+ @Schema(description = "鍙戣瘉鍗曚綅")
+ private String issueUnit;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "绾у埆")
+ private String level;
+
+ @Schema(description = "鏈夋晥鏈�")
+ private String periodValidity;
+
+ @Schema(description = "娣诲姞鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "澶嶅嵃浠�")
+ private String copy;
+
+ @Schema(description = "鍘熶欢")
+ 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..40154d6
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java
@@ -0,0 +1,155 @@
+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.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "")
+public class PersonBasicInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "褰撳墠鐘舵��")
+ private String currentState;
+
+ @Schema(description = "鑱岀О")
+ @ExcelProperty("鑱岀О")
+ private String professionalTitle;
+
+ @Schema(description = "鎬у埆")
+ private String sex;
+
+ @Schema(description = "浜哄憳鍒嗙被")
+ private String personnelClassification;
+
+ @Schema(description = "鍑虹敓鏃ユ湡")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime dateBirth;
+
+ @Schema(description = "韬唤璇佸彿")
+ @ExcelProperty("璇佷欢鍙风爜")
+ private String identityCard;
+
+ @Schema(description = "姘戞棌")
+ private String nation;
+
+ @Schema(description = "鏀挎不闈㈣矊")
+ private String politicalStatus;
+
+ @Schema(description = "鏈�楂樺鍘�")
+ @ExcelProperty("鏈�楂樺鍘�")
+ private String officialAcademicRedentials;
+
+ @Schema(description = "姣曚笟鏃堕棿1")
+ @ExcelProperty("姣曚笟鏃堕棿")
+ private LocalDateTime graduationTime1;
+
+ @Schema(description = "姣曚笟闄㈡牎1")
+ @ExcelProperty("姣曚笟闄㈡牎")
+ private String graduatedInstitutions1;
+
+ @Schema(description = "涓撲笟1")
+ @ExcelProperty("鎵�瀛︿笓涓�")
+ private String major1;
+
+ @Schema(description = "姣曚笟鏃堕棿2")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime graduationTime2;
+
+ @Schema(description = "姣曚笟闄㈡牎2")
+ private String graduatedInstitutions2;
+
+ @Schema(description = "涓撲笟2")
+ private String major2;
+
+ @Schema(description = "鎵嬫満鍙�")
+ private String telephone;
+
+ @Schema(description = "澶囨敞")
+ private String remarks;
+
+ @Schema(description = "鐢ㄦ埛琛紙user锛塱d")
+ private Integer userId;
+
+ @Schema(description = "鍏徃鍚嶇О")
+ private String corporateName;
+
+ @Schema(description = "宀椾綅鍚嶇О")
+ private String postName;
+
+ @Schema(description = "鍏ラ泦鍥㈡椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS) // 涓虹┖鍙互鏇存柊
+ @ExcelProperty("鍏ラ泦鍥㈡椂闂�")
+ private LocalDateTime groupTime;
+
+ @Schema(description = "鍔冲姩鍏崇郴")
+ private Integer laborRelations;
+
+ @Schema(description = "宸ヤ綔鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime workingTime;
+
+ @Schema(description = "鍚堝悓鏈夋晥鏈�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime contractLifeTime;
+
+ @Schema(description = "绫嶈疮")
+ @ExcelProperty("绫嶈疮")
+ private String nativePlace;
+
+ @Schema(description = "璇佷欢鏈夋晥鏈�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime validityPeriod;
+
+ @Schema(description = "濠氬Щ鐘跺喌")
+ private Integer maritalStatus;
+
+ @Schema(description = "璇佷欢鍦板潃")
+ @ExcelProperty("璇佷欢鍦板潃")
+ private String idAddress;
+
+ @Schema(description = "璇佷欢璇︾粏鍦板潃")
+ private String idDetailAddress;
+
+ @Schema(description = "鍏ュ厷/鍥㈡椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime dumplingTime;
+
+ @Schema(description = "鏈�楂樺浣�")
+ @ExcelProperty("鏈�楂樺浣�")
+ private String highestDegree;
+
+ @Schema(description = "鏈�鍚庢洿鏂版椂闂�")
+ @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..f233695
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java
@@ -0,0 +1,57 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "浜哄憳鍩烘湰淇℃伅闄勪欢")
+public class PersonBasicInfoFile implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "basic_info_file_id", type = IdType.AUTO)
+ private Integer basicInfoFileId;
+
+ @Schema(description = "浜哄憳鍩烘湰淇℃伅id")
+ private Integer userId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..928923a
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java
@@ -0,0 +1,52 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "浜哄憳鍩烘湰淇℃伅")
+public class PersonBasicInfoWork implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "basic_info_work_id", type = IdType.AUTO)
+ private Integer basicInfoWorkId;
+
+ @Schema(description = "浜哄憳id")
+ private Integer userId;
+
+ @Schema(description = "宸ヤ綔缁忓巻")
+ private String workExperience;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..4f39583
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonCommunicationAbility.java
@@ -0,0 +1,60 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "娌熼�氳褰�")
+public class PersonCommunicationAbility implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "娌熼�氫汉id")
+ private String userId;
+
+ @Schema(description = "娌熼�氭椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime communicationTime;
+
+ @Schema(description = "娌熼�氬湴鐐�")
+ private String communicationPlace;
+
+ @Schema(description = "娌熼�氬唴瀹�")
+ private String communicationContent;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿", 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..4cdd931
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java
@@ -0,0 +1,77 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "宀椾綅鑱岃矗")
+public class PersonJobResponsibilities implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "1宀椾綅鍚嶇О")
+ private String postName;
+
+ @Schema(description = "1宸ヤ綔鐩爣")
+ private String jobObjective;
+
+ @Schema(description = "1宀椾綅鑱岃矗")
+ private String jobResponsibilities;
+
+ @Schema(description = "1浠昏亴浜篿d")
+ private String incumbentId;
+
+ @Schema(description = "1 鎻愪氦鎿嶄綔浜�")
+ private String submittingOperator;
+
+ @Schema(description = "1鎻愪氦鏃ユ湡")
+ private LocalDateTime submittingDate;
+
+ @Schema(description = "2 浠昏亴浜� 涓荤id")
+ private Integer supervisorId;
+
+ @Schema(description = "2 浠昏亴浜� 鎿嶄綔浜�")
+ private String incumbentOperator;
+
+ @Schema(description = "2 浠昏亴浜� 鏃ユ湡")
+ private LocalDateTime incumbentDate;
+
+ @Schema(description = "3 涓荤 鎿嶄綔浜�")
+ private String supervisorOperator;
+
+ @Schema(description = "3 涓荤 鏃ユ湡")
+ private LocalDateTime supervisorDate;
+
+ @Schema(description = "鍒涘缓浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "褰撳墠鐘舵��")
+ private String currentState;
+
+ @Schema(description = "鍒涘缓鏃ユ湡 / 鎻愪氦鏃ユ湡", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "褰撳墠璐熻矗浜�")
+ 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..242607d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java
@@ -0,0 +1,113 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "浜哄憳鑳藉姏")
+public class PersonPersonnelCapacity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "瀛﹀巻")
+ private String academicDegree;
+
+ @Schema(description = "瀛﹀巻 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+ private Integer academicConformNot;
+
+ @Schema(description = "瀛﹀巻 澶囨敞")
+ private String academicRemarks;
+
+ @Schema(description = "鐩稿叧骞撮檺")
+ private String relatedYears;
+
+ @Schema(description = "鐩稿叧骞撮檺 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+ private Integer relatedYearsConformNot;
+
+ @Schema(description = "鐩稿叧骞撮檺 澶囨敞")
+ private String relatedYearsRemarks;
+
+ @Schema(description = "鐩稿叧鍩硅")
+ private String relatedTraining;
+
+ @Schema(description = "鐩稿叧鍩硅 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+ private Integer relatedTrainingConformNot;
+
+ @Schema(description = "鐩稿叧鍩硅 澶囨敞")
+ private String relatedTrainingRemarks;
+
+ @Schema(description = "鐩稿叧缁忛獙")
+ private String relevantExperience;
+
+ @Schema(description = "鐩稿叧缁忛獙 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+ private Integer relevantExperienceConformNot;
+
+ @Schema(description = "鐩稿叧缁忛獙 澶囨敞")
+ private String relevantExperienceRemarks;
+
+ @Schema(description = "涓婂矖璇�")
+ private String workLicense;
+
+ @Schema(description = "涓婂矖璇� 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+ private Integer workLicenseConformNot;
+
+ @Schema(description = "涓婂矖璇� 澶囨敞")
+ private String workLicenseRemarks;
+
+ @Schema(description = "宀椾綅鑱岃矗")
+ private String jobResponsibilities;
+
+ @Schema(description = "宀椾綅鑱岃矗 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+ private Integer jobResponsibilitiesConformNot;
+
+ @Schema(description = "宀椾綅鑱岃矗 澶囨敞")
+ private String jobResponsibilitiesRemarks;
+
+ @Schema(description = "缁煎悎璇勪环")
+ private String comprehensiveAssessment;
+
+ @Schema(description = "2 纭浜� userId涓婚敭")
+ private Integer confirmOperatingPersonnelId;
+
+ @Schema(description = "2 纭浜� 鏃ユ湡")
+ private LocalDateTime confirmDate;
+
+ @Schema(description = "鍒涘缓鏃ユ湡", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃ユ湡", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍒涘缓浜�", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊浜�", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "浜哄憳濮撳悕 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..8fd0b49
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java
@@ -0,0 +1,73 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "浠昏亴鎺堟潈璁板綍")
+public class PersonPostAuthorizationRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "璇佷功缂栧彿")
+ private String certificateNumber;
+
+ @Schema(description = "琚换鑱屼汉鍛榠d")
+ private String userId;
+
+ @Schema(description = "浠昏亴宀椾綅")
+ private String post;
+
+ @Schema(description = "鎿嶄綔绫诲瀷")
+ private String operationType;
+
+ @Schema(description = "鍘熸枃浠跺悕绉�")
+ private String fileName;
+
+ @Schema(description = "绯荤粺鐢熸垚鏂囦欢鍚嶇О")
+ private String systemFileName;
+
+ @Schema(description = "澶囨敞")
+ private String remarks;
+
+ @Schema(description = "鍒涘缓鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鏇存柊浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鍒涘缓浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鐞嗚鐭ヨ瘑鑰冭瘯鎴愮哗")
+ private String num1;
+
+ @Schema(description = "鎿嶄綔鎶�鑳借�冭瘯鎴愮哗")
+ 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..489f610
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java
@@ -0,0 +1,60 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "濂栨儵璁板綍")
+public class PersonRewardPunishmentRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "濂栨儵绾у埆")
+ private String rewardPunishLevel;
+
+ @Schema(description = "濂栨儵鍚嶇О")
+ private String rewardPunishName;
+
+ @Schema(description = "濂栨儵鏃堕棿")
+ private LocalDateTime rewardPunishTime;
+
+ @Schema(description = "濂栨儵鍗曚綅")
+ private String rewardPunishWorkUnit;
+
+ @Schema(description = "濂栨儵鍐呭")
+ private String rewardPunishContent;
+
+ @Schema(description = "鐢ㄦ埛id")
+ private Integer userId;
+
+ @Schema(description = "鍒涘缓鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍒涘缓浜�", 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..6ea9853
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java
@@ -0,0 +1,82 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "鍩硅璁″垝")
+public class PersonTraining implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "璁″垝骞翠唤")
+ private String planYear;
+
+ @Schema(description = "缂栧埗浜篿d")
+ private Integer compilerId;
+
+ @Schema(description = "缂栧埗鏃ユ湡")
+ private LocalDateTime compilationDate;
+
+ @Schema(description = "瀹℃牳浜篿d")
+ private Integer reviewerId;
+
+ @Schema(description = "瀹℃牳鏃ユ湡")
+ private LocalDateTime auditDate;
+
+ @Schema(description = "瀹℃牳鐘舵��")
+ private Integer reviewerStatus;
+
+ @Schema(description = "瀹℃牳澶囨敞")
+ private String auditRemarks;
+
+ @Schema(description = "鎵瑰噯浜篿d")
+ private Integer approverId;
+
+ @Schema(description = "鎵瑰噯澶囨敞")
+ private String approvalRemarks;
+
+ @Schema(description = "鎵瑰噯鐘舵��(1锛氭壒鍑嗭紱2锛氫笉鎵瑰噯)")
+ private Integer approvalStatus;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ private LocalDateTime approvalDate;
+
+ @Schema(description = "鍒涘缓鏃ユ湡")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鏇存柊浜篿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..aabc0b1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java
@@ -0,0 +1,101 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "鍩硅璁″垝璇︽儏")
+public class PersonTrainingDetailed implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "鍩硅璁″垝")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鍩硅澶х被")
+ private String trainingCategory;
+
+ @Schema(description = "鍩硅鐩爣")
+ private String trainingObjectives;
+
+ @Schema(description = "鍩硅鍐呭")
+ private String trainingContent;
+
+ @Schema(description = "鍩硅鏂瑰紡")
+ private String trainingMode;
+
+ @Schema(description = "鐘舵��(1锛氬凡瀹屾垚锛�2锛氬緟璇勪环锛�3: 鏈紑濮�)")
+ private Integer state;
+
+ @Schema(description = "鍙傚姞瀵硅薄")
+ private String participants;
+
+ @Schema(description = "涓惧姙閮ㄩ棬")
+ private String holdingDepartment;
+
+ @Schema(description = "鍩硅鍦扮偣")
+ private String placeTraining;
+
+ @Schema(description = "鍩硅璁插笀_id")
+ private Integer trainingLecturerId;
+
+ @Schema(description = "璁″垝鍩硅鏃ユ湡")
+ private String trainingDate;
+
+ @Schema(description = "鍩硅瀹屾垚鏃堕棿")
+ private LocalDate openingTime;
+
+ @Schema(description = "璇炬椂")
+ private Integer classHour;
+
+ @Schema(description = "澶囨敞")
+ private String remarks;
+
+ @Schema(description = "鍩硅璁″垝id")
+ private Integer planId;
+
+ @Schema(description = "鍒涘缓鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鍒涘缓浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鏇存柊鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鑰冩牳鏂瑰紡")
+ private String assessmentMethod;
+
+ @Schema(description = "鏈鍩硅缁煎悎璇勪环")
+ private String comprehensiveAssessment;
+
+ @Schema(description = "璇勪环浜�")
+ private Integer assessmentUserId;
+
+ @Schema(description = "璇勪环鏃堕棿")
+ 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..e040159
--- /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.v3.oas.annotations.media.Schema;
+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;
+
+ @Schema(description = "浜哄憳浣犲煿璁鍒掕鎯卛d")
+ private Integer trainingDetailedId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鍒涘缓浜�")
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ private Date createTime;
+
+ @Schema(description = "淇敼浜�")
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ 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..600263e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java
@@ -0,0 +1,40 @@
+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.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "鍩硅璁板綍")
+public class PersonTrainingRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "training_record_id", type = IdType.AUTO)
+ private Integer trainingRecordId;
+
+ @Schema(description = "鐢ㄦ埛琛ㄦ牸锛坲ser锛変富閿�")
+ private Integer userId;
+
+ @Schema(description = "鍩硅璁″垝璇︽儏 - 瀛� id")
+ private Integer courseId;
+
+ @Schema(description = "鑰冩牳缁撴灉")
+ 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..35a4aed
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java
@@ -0,0 +1,60 @@
+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.common.core.domain.entity.DepartmentLims;
+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 jakarta.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);
+
+ /**
+ * 娣诲姞缁勭粐鏋舵瀯
+ * @param department
+ * @return
+ */
+ int addDepartment(DepartmentLims department);
+
+ /**
+ * 鍒犻櫎缁勭粐鏋舵瀯
+ * @param id
+ * @return
+ */
+ boolean delDepartment(Integer id);
+}
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..949c28d
--- /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 jakarta.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..d7abf0b
--- /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 jakarta.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..a7b8bf3
--- /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 jakarta.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..033e2aa
--- /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 jakarta.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..ecb6fa1
--- /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..454914c
--- /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..34cd2ab
--- /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 jakarta.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..4bba16f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java
@@ -0,0 +1,64 @@
+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.apache.ibatis.annotations.Param;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.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,
+ @Param("compilerName") String compilerName, @Param("departmentId") 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..3e4049a
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java
@@ -0,0 +1,383 @@
+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 jakarta.annotation.Resource;
+import jakarta.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();
+ inputStream.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 department
+ * @return
+ */
+ @Override
+ public int addDepartment(DepartmentLims department) {
+ departmentMapper.insert(department);
+ return department.getId();
+ }
+
+ /**
+ * 鍒犻櫎缁勭粐鏍�
+ * @param id
+ * @return
+ */
+ @Override
+ public boolean delDepartment(Integer id) {
+ //鍒ゆ柇鏄惁鏈夊瓙绫�,鐩村埌娌℃湁涓烘
+ List<DepartmentLims> department = getDepartment(id);
+ List<Integer> ids = department.stream().map(DepartmentLims::getId).collect(Collectors.toList());
+ departmentMapper.delete(Wrappers.<DepartmentLims>lambdaQuery()
+ .in(DepartmentLims::getId, ids));
+ return true;
+ }
+
+ //鍒ゆ柇鏄惁鏈夊瓙绫�,鐩村埌娌℃湁涓烘
+ public List<DepartmentLims> getDepartment(Integer id) {
+ List<DepartmentLims> list = new ArrayList<>();
+ DepartmentLims depart = departmentMapper.selectById(id);
+ list.add(depart);
+ List<DepartmentLims> departments = departmentMapper.selectList(Wrappers.<DepartmentLims>lambdaQuery().eq(DepartmentLims::getFatherId, id));
+ if (ObjectUtils.isNotEmpty(departments)) {
+ list.addAll(departments);
+ for (DepartmentLims department : departments) {
+ list.addAll(getDepartment(department.getId()));
+ }
+ }
+ return list;
+ }
+
+ /**
+ * 閫掑綊鏌ヨ瀛愯妭鐐�
+ * @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..34f937b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonCommunicationAbilityServiceImpl.java
@@ -0,0 +1,114 @@
+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 jakarta.annotation.Resource;
+import jakarta.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();
+ inputStream.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..e34c522
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java
@@ -0,0 +1,114 @@
+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 jakarta.annotation.Resource;
+import jakarta.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();
+ inputStream.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..2974840
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPersonnelCapacityServiceImpl.java
@@ -0,0 +1,160 @@
+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.constant.MenuJumpPathConstants;
+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 jakarta.annotation.Resource;
+import jakarta.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();
+ inputStream.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(MenuJumpPathConstants.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..4f45be8
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
@@ -0,0 +1,133 @@
+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 jakarta.annotation.Resource;
+import jakarta.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();
+ inputStream.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..ed82a41
--- /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..7c05355
--- /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..badf239
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java
@@ -0,0 +1,179 @@
+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.constant.MenuJumpPathConstants;
+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 jakarta.annotation.Resource;
+import jakarta.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();
+ inputStream.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(MenuJumpPathConstants.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..e5d2c50
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingServiceImpl.java
@@ -0,0 +1,438 @@
+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.constant.MenuJumpPathConstants;
+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 jakarta.annotation.Resource;
+import jakarta.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(MenuJumpPathConstants.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(MenuJumpPathConstants.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();
+ inputStream.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);
+
+ // 鐢熸垚鍩硅鑰佸笀绛惧悕
+ detailedDto.setTrainingLecturerRender(StringUtils.isNotBlank(detailedDto.getTrainingLecturerSignatureUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + detailedDto.getTrainingLecturerSignatureUrl()).create() : null);
+
+ // 鏌ヨ鍩硅鐨勪汉鍛�
+ 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.setUserNameRender1(StringUtils.isNotBlank(recordDto.getSignatureUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + recordDto.getSignatureUrl()).create() : null);
+ exportDto.setDepartment1(recordDto.getDepartment());
+ exportDto.setExaminationResults1(recordDto.getExaminationResults());
+ count ++;
+ break;
+ case 1:
+ exportDto.setUserNameRender2(StringUtils.isNotBlank(recordDto.getSignatureUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + recordDto.getSignatureUrl()).create() : null);
+ 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();
+ inputStream.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/java/com/ruoyi/personnel/task/PersonTrainingSchedule.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/task/PersonTrainingSchedule.java
new file mode 100644
index 0000000..9eac72f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/task/PersonTrainingSchedule.java
@@ -0,0 +1,65 @@
+package com.ruoyi.personnel.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.personnel.mapper.PersonTrainingDetailedMapper;
+import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import jakarta.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * 鍩硅璁″垝浣跨敤鎻愰啋璁板綍鎻愰啋
+ */
+@Component
+public class PersonTrainingSchedule {
+ @Resource
+ private PersonTrainingDetailedMapper personTrainingDetailedMapper;
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+ /**
+ * 鎻愰啋濉啓浜哄憳鍩硅璁板綍
+ */
+// @Scheduled(cron = "0/5 * * * * *")
+ @Scheduled(cron = "0 0 9 1,15 * *") // 姣忔湀涓�鍙锋墽琛�
+ public void task1() {
+ // 鏌ヨ褰撴湀鍩硅璁″垝
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M");
+ String format = LocalDateTime.now().format(formatter);
+ List<PersonTrainingDetailed> personTrainingDetaileds = personTrainingDetailedMapper.selectList(Wrappers.<PersonTrainingDetailed>lambdaQuery()
+ .eq(PersonTrainingDetailed::getTrainingDate, format));
+
+ for (PersonTrainingDetailed personTrainingDetailed : personTrainingDetaileds) {
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ鍩硅璁插笀
+ User user = userMapper.selectById(personTrainingDetailed.getTrainingLecturerId());
+ // 浼佷笟寰俊閫氱煡鍩硅
+ String message = "";
+ message += "浜哄憳鍩硅璁″垝鎻愰啋閫氱煡";
+ message += "\n鍩硅鐩爣: " + personTrainingDetailed.getTrainingObjectives();
+ message += "\n鍩硅鍐呭: " + personTrainingDetailed.getTrainingContent();
+ message += "\n鍙傚姞瀵硅薄: " + personTrainingDetailed.getParticipants();
+ message += "\n鍩硅鏃ユ湡: " + personTrainingDetailed.getTrainingDate();
+ message += "\n璁″垝褰撴湀杩涜鍩硅";
+
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(user.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+ }
+
+}
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..da32169
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml
@@ -0,0 +1,64 @@
+<?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
+ <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..a4d9133
--- /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.dict_label) responsibilities, cppc.id
+ from cnas_person_personnel_capacity cppc
+ left join sys_dict_data e on FIND_IN_SET(e.dict_value, cppc.job_responsibilities)
+ where e.dict_type = 'responsibilities_list'
+ 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/PersonTrainingDetailedMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonTrainingDetailedMapper.xml
new file mode 100644
index 0000000..e0013ed
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonTrainingDetailedMapper.xml
@@ -0,0 +1,55 @@
+<?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.PersonTrainingDetailedMapper">
+
+ <select id="queryTheAnnualPlanDetailsTable" resultType="com.ruoyi.personnel.dto.PersonTrainingDetailedDto">
+ SELECT cptd.*,
+ u1.name training_lecturer_name,
+ dl.name holding_department_name, !isnull(cptr.training_record_id) whether_claim
+ FROM cnas_person_training_detailed cptd
+ left join user u1 on cptd.training_lecturer_id = u1.id
+ left join department_lims dl on dl.id = cptd.holding_department
+ left join cnas_person_training_record cptr on cptr.user_id = #{loginUserId} and cptr.course_id = cptd.id
+ <where>
+ <if test="id != null">
+ and cptd.plan_id = #{id}
+ </if>
+ <if test="userId != null">
+ and u1.id = #{userId}
+ </if>
+ <if test="trainingLecturerName != null and trainingLecturerName != ''">
+ and u1.name like concat('%', #{trainingLecturerName}, '%')
+ </if>
+ <if test="trainingDate != null and trainingDate != ''">
+ and date_format(cptd.training_date,'%Y-%m-%d') = #{trainingDate}
+ </if>
+ </where>
+ </select>
+
+ <!-- 鏍规嵁涓昏〃id鏌ヨ璇︽儏 -->
+ <select id="selectTrainingList" resultType="com.ruoyi.personnel.dto.PersonTrainingDetailedDto">
+ SELECT cptd.*,
+ u1.name training_lecturer_name
+ FROM cnas_person_training_detailed cptd
+ left join user u1 on cptd.training_lecturer_id = u1.id
+ where cptd.plan_id = #{trainingId}
+ </select>
+
+ <!-- 鏌ヨ璇︾粏 -->
+ <select id="selectTrainingDetail" resultType="com.ruoyi.personnel.dto.PersonTrainingDetailedDto">
+ SELECT cptd.*,
+ u1.name training_lecturer_name,
+ u1.signature_url training_lecturer_signature_url
+ FROM cnas_person_training_detailed cptd
+ left join user u1 on cptd.training_lecturer_id = u1.id
+ where cptd.id = #{id}
+ </select>
+
+ <!-- 鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅 -->
+ <select id="getThisYearTrainingDetailed" resultType="com.ruoyi.personnel.pojo.PersonTrainingDetailed">
+ select cptd.id,
+ cptd.training_objectives
+ from cnas_person_training_detailed cptd
+ where training_date like concat('%', YEAR(NOW()), '%')
+ </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..88eabe4
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml
@@ -0,0 +1,127 @@
+<?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
+ from cnas_person_training_record cptr
+ left join user u on u.id = cptr.user_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,
+ u.signature_url
+ 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.major1,
+ u.id user_id,
+ DATE_FORMAT(cpbi.group_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 cptd.training_date like concat('%', #{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 cptd.training_date like concat('%', #{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,
+ cptd.training_date 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 cptd.training_date like concat('%', #{year}, '%')
+ </if>
+ </where>
+ order by STR_TO_DATE(CONCAT(cptd.training_date, '.01'), '%Y.%m.%d')
+
+ </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..360dbcb
--- /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..ab13ad6
--- /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/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..9ee3346
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 09:53:20
+ */
+@Tag(name = "涓嶇鍚堥」鐨勫垎甯�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/inconsistentDistribution")
+public class InconsistentDistributionController {
+
+ private InconsistentDistributionService inconsistentDistributionService;
+
+ /**
+ * 涓嶇鍚堥」鐨勫垎甯冨垎椤垫煡璇�
+ * @param
+ * @return
+ */
+ @Operation(summary = "涓嶇鍚堥」鐨勫垎甯冨垎椤垫煡璇�")
+ @GetMapping("/pageInconsistentDistribution")
+ public Result<IPage<InconsistentDistributionDto>> pageInconsistentDistribution(Page page, InconsistentDistribution inconsistentDistribution) throws Exception {
+ return Result.success(inconsistentDistributionService.pageInconsistentDistribution(page, inconsistentDistribution));
+ }
+
+ /**
+ * 涓嶇鍚堥」鐨勫垎甯冩柊澧�
+ * @return
+ */
+ @Operation(summary = "涓嶇鍚堥」鐨勫垎甯冩柊澧�")
+ @PostMapping("/addInconsistentDistribution")
+ public Result addInconsistentDistribution(@RequestBody InconsistentDistributionDto inconsistentDistribution){
+ return Result.success(inconsistentDistributionService.addInconsistentDistribution(inconsistentDistribution));
+ }
+
+ /**
+ * 涓嶇鍚堥」鐨勫垎甯冧慨鏀�
+ * @return
+ */
+ @Operation(summary = "涓嶇鍚堥」鐨勫垎甯冧慨鏀�")
+ @PostMapping("/updateInconsistentDistribution")
+ public Result updateInconsistentDistribution(@RequestBody InconsistentDistributionDto inconsistentDistribution){
+ return Result.success(inconsistentDistributionService.updateInconsistentDistribution(inconsistentDistribution));
+ }
+
+ /**
+ * 涓嶇鍚堥」鐨勫垎甯冨垹闄�
+ * @return
+ */
+ @Operation(summary = "涓嶇鍚堥」鐨勫垎甯冨垹闄�")
+ @DeleteMapping("/delInconsistentDistribution")
+ public Result delInconsistentDistribution(Integer distributionId){
+ return Result.success(inconsistentDistributionService.delInconsistentDistribution(distributionId));
+ }
+
+ /**
+ * 涓嶇鍚堥」鐨勫垎甯冩煡鐪嬭鎯�
+ * @return
+ */
+ @Operation(summary = "涓嶇鍚堥」鐨勫垎甯冩煡鐪嬭鎯�")
+ @GetMapping("/getInconsistentDistributionOne")
+ public Result<InconsistentDistributionDto> getInconsistentDistributionOne(Integer distributionId){
+ return Result.success(inconsistentDistributionService.getInconsistentDistributionOne(distributionId));
+ }
+
+ /**
+ * 瀵煎嚭涓嶇鍚堥」鐨勫垎甯�
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭涓嶇鍚堥」鐨勫垎甯�")
+ @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..1b9c4c3
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java
@@ -0,0 +1,126 @@
+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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+@Tag(name = "妫�楠屽鎵樺崟")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/inspectionOrder")
+public class InspectionOrderController {
+
+ private InspectionOrderService inspectionOrderService;
+
+ /**
+ * 濮旀墭鍗曟楠屽垎椤垫煡璇�
+ * @return
+ */
+ @Operation(summary = "濮旀墭鍗曟楠屽垎椤垫煡璇�")
+ @GetMapping("/pageInspectionOrder")
+ public Result<IPage<InspectionOrderDto>> pageInspectionOrder(InspectionOrder inspectionOrder,Page page) throws Exception {
+ return Result.success(inspectionOrderService.pageInspectionOrder(page, inspectionOrder));
+ }
+
+ /**
+ * 濮旀墭鍗曟楠屾柊澧�
+ * @return
+ */
+
+ @Operation(summary = "濮旀墭鍗曟楠屾柊澧�")
+ @PostMapping("/addInspectionOrder")
+ public Result addInspectionOrder(@RequestBody InspectionOrderDto InspectionOrder){
+ return Result.success(inspectionOrderService.addInspectionOrder(InspectionOrder));
+ }
+
+ /**
+ * 濮旀墭鍗曟楠屼慨鏀�
+ * @return
+ */
+ @Operation(summary = "濮旀墭鍗曟楠屼慨鏀�")
+ @PostMapping("/updateInspectionOrder")
+ public Result updateInspectionOrder(@RequestBody InspectionOrderDto InspectionOrder){
+ return Result.success(inspectionOrderService.updateInspectionOrder(InspectionOrder));
+ }
+
+ /**
+ * 濮旀墭鍗曟楠屽垹闄�
+ * @return
+ */
+ @Operation(summary = "濮旀墭鍗曟楠屽垹闄�")
+ @DeleteMapping("/delInspectionOrder")
+ public Result delInspectionOrder(Integer inspectionOrderId){
+ return Result.success(inspectionOrderService.delInspectionOrder(inspectionOrderId));
+ }
+
+ /**
+ * 濮旀墭鍗曟楠屾煡鐪嬭鎯�
+ * @return
+ */
+ @Operation(summary = "濮旀墭鍗曟楠屾煡鐪嬭鎯�")
+ @GetMapping("/getInspectionOrderOne")
+ public Result<InspectionOrderDto> getInspectionOrderOne(Integer inspectionOrderId){
+ return Result.success(inspectionOrderService.getInspectionOrderOne(inspectionOrderId));
+ }
+
+ /**
+ * 濮旀墭鍗曟楠屾煡鐪嬭鎯�
+ * @return
+ */
+ @Operation(summary = "鏍规嵁鎴愬搧璁㈠崟鏌ヨ濮旀墭鍗曡鎯�")
+ @GetMapping("/getInspectionOrderByInsOderId")
+ public Result<InspectionOrderDto> getInspectionOrderByInsOderId(Integer insOrderId){
+ return Result.success(inspectionOrderService.getInspectionOrderByInsOderId(insOrderId));
+ }
+
+ /**
+ * 濮旀墭鍗曟煡璇㈡垚鍝佽鍗�
+ * @return
+ */
+ @Operation(summary = "濮旀墭鍗曟煡璇㈡垚鍝佽鍗�")
+ @GetMapping("/getInsOrderOnInspection")
+ public Result<IPage<InsOrder>> getInsOrderOnInspection(Page page ,InsOrder insOrder) throws Exception {
+ return Result.success(inspectionOrderService.getInsOrderOnInspection(page, insOrder));
+ }
+
+ /**
+ * 濮旀墭鍗曟垚鍝佹姤鍛婁笂浼�
+ * @return
+ */
+ @Operation(summary = "濮旀墭鍗曟垚鍝佹姤鍛婁笂浼�")
+ @PostMapping("/uploadInspectionOrderFile")
+ public Result uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId) {
+ return Result.success(inspectionOrderService.uploadInspectionOrderFile(file, inspectionOrderId));
+ }
+
+ /**
+ * 瀵煎嚭妫�楠屽鎵樺崟
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭妫�楠屽鎵樺崟")
+ @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..80f42c2
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessComplainController.java
@@ -0,0 +1,67 @@
+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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鎶曡瘔 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-02 09:29:11
+ */
+@RestController
+@RequestMapping("/processComplain")
+@Tag(name = "鎶曡瘔")
+public class ProcessComplainController {
+
+ @Resource
+ private ProcessComplainService processComplainService;
+
+ @Operation(summary = "鎶曡瘔鎯呭喌姹囨�昏〃")
+ @GetMapping("/pageProcessComplain")
+ public Result pageProcessComplain( ProcessComplain processComplain,Page page) throws Exception {
+ return Result.success(processComplainService.pageProcessComplain(page, processComplain));
+ }
+
+ @Operation(summary = "鏂板鎶曡瘔")
+ @PostMapping("/addProcessComplain")
+ public Result addProcessComplain(@RequestBody ProcessComplain processComplain ) {
+ return Result.success(processComplainService.addProcessComplain(processComplain));
+ }
+
+ @Operation(summary = "鍒犻櫎鎶曡瘔")
+ @DeleteMapping("/delProcessComplain")
+ public Result delProcessComplain(Long id) {
+ return Result.success(processComplainService.removeById(id));
+ }
+
+ @Operation(summary = "鎶曡瘔璇︽儏")
+ @GetMapping("/getProcessComplain")
+ public Result getProcessComplain(Long id) {
+ return Result.success(processComplainService.getProcessComplain(id));
+ }
+
+ @Operation(summary = "澶勭悊鎶曡瘔")
+ @PostMapping("/doProcessComplain")
+ public Result doProcessComplain(@RequestBody ProcessComplain processComplain) {
+ return Result.success(processComplainService.doProcessComplain(processComplain));
+ }
+
+ @Operation(summary = "瀵煎嚭鍒楄〃")
+ @GetMapping("/exportProcessComplain")
+ public void exportProcessComplain(ProcessComplain processComplain,HttpServletResponse response) throws Exception {
+ 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..afccb46
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessDealController.java
@@ -0,0 +1,51 @@
+package com.ruoyi.process.controller;
+
+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.JackSonUtil;
+import com.ruoyi.process.pojo.ProcessDeal;
+import com.ruoyi.process.service.ProcessDealService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-02 02:50:19
+ */
+@RestController
+@RequestMapping("/processDeal")
+@Tag(name = "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+public class ProcessDealController {
+
+ @Resource
+ private ProcessDealService processDealService;
+
+ @Operation(summary = "鏂板妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+ @PostMapping("/addProcessDeal")
+ public Result addProcessDeal(@RequestBody ProcessDeal processDeal) {
+ return Result.success(processDealService.saveOrUpdate(processDeal));
+ }
+
+ @Operation(summary = "鍒犻櫎妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+ @DeleteMapping("/delProcessDeal")
+ public Result delProcessDeal(Integer id) {
+ return Result.success(processDealService.removeById(id));
+ }
+
+
+ @Operation(summary = "鏌ョ湅妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+ @GetMapping("/getProcessDeal")
+ public Result getProcessDeal(Integer id) {
+ return Result.success(processDealService.list(Wrappers.<ProcessDeal>lambdaQuery().eq(ProcessDeal::getTotaldealId,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..dac177e
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 娴嬮噺涓嶇‘瀹氬害鐨勮瘎浠� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-02 01:10:43
+ */
+@RestController
+@RequestMapping("/processEvaluate")
+@Tag(name = "娴嬮噺涓嶇‘瀹氬害鐨勮瘎浠�")
+public class ProcessEvaluateController {
+
+ @Resource
+ private ProcessEvaluateService processEvaluateService;
+
+ @Operation(summary = "鏌ヨ娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹氬垪琛�")
+ @GetMapping("/pageProcessEvaluate")
+ public Result pageProcessEvaluate(ProcessEvaluate processEvaluate,Page page) throws Exception {
+ return Result.success(processEvaluateService.pageProcessEvaluate(page, processEvaluate));
+ }
+
+ @Operation(summary = "鏂板娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�")
+ @PostMapping("/addProcessEvaluate")
+ public Result addProcessEvaluate(MultipartFile file){
+ return Result.success(processEvaluateService.addProcessEvaluate(file));
+ }
+
+ @Operation(summary = "璇勪环")
+ @PostMapping("/doProcessEvaluate")
+ public Result doProcessEvaluate(@RequestBody ProcessEvaluate processEvaluate){
+ return Result.success(processEvaluateService.doProcessEvaluate(processEvaluate));
+ }
+
+ @Operation(summary = "鍒犻櫎娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�")
+ @DeleteMapping("/delProcessEvaluate")
+ public Result delProcessEvaluate(Long id){
+ return Result.success(processEvaluateService.removeById(id));
+ }
+
+ @Operation(summary = "瀵煎嚭娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�")
+ @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..70e3cb5
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 鏍囧噯鏌ユ柊
+ *
+ * @author zhuo
+ * @since 2024-11-04
+ */
+@Tag(name = "鏍囧噯鏌ユ柊")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/processMethodSearchNew")
+public class ProcessMethodSearchNewController {
+
+ private ProcessMethodSearchNewService processMethodSearchNewService;
+
+ /**
+ * 鏂板鏍囧噯鏌ユ柊
+ * @param processMethodSearchNewList
+ * @return
+ */
+ @Operation(summary = "鏂板鏍囧噯鏌ユ柊")
+ @PostMapping("/addMethodSearchNew")
+ public Result addMethodSearchNew(@RequestBody List<ProcessMethodSearchNew> processMethodSearchNewList ) {
+ return Result.success(processMethodSearchNewService.addMethodSearchNew(processMethodSearchNewList));
+ }
+
+ /**
+ * 淇敼鏍囧噯鏌ユ柊
+ * @param processMethodSearchNew
+ * @return
+ */
+ @Operation(summary = "淇敼鏍囧噯鏌ユ柊")
+ @PostMapping("/updateMethodSearchNew")
+ public Result updateMethodSearchNew(@RequestBody ProcessMethodSearchNew processMethodSearchNew ) {
+ return Result.success(processMethodSearchNewService.updateById(processMethodSearchNew));
+ }
+
+ /**
+ * 鏍囧噯鏌ユ柊鍒楄〃
+ */
+ @Operation(summary = "鏍囧噯鏌ユ柊鍒楄〃")
+ @GetMapping("/pageMethodSearchNew")
+ public Result<IPage<ProcessMethodSearchNew>> pageMethodSearchNew(ProcessMethodSearchNewBackupsDto processMethodSearchNew,Page page) throws Exception {
+ return Result.success(processMethodSearchNewService.pageMethodSearchNew(page, processMethodSearchNew));
+ }
+
+ @Operation(summary = "鏍囧噯鏌ユ柊瀵煎嚭")
+ @GetMapping("/exportMethodSearchNew")
+ public void exportMethodSearchNew(Integer archivedId, HttpServletResponse response) throws Exception {
+ processMethodSearchNewService.exportMethodSearchNew(archivedId, response);
+ }
+
+ /**
+ * 瀵煎叆鏍囧噯鏌ユ柊
+ * @return
+ */
+ @Operation(summary = "瀵煎叆鏍囧噯鏌ユ柊")
+ @PostMapping("/importMethodSearchNew")
+ public Result importMethodSearchNew(MultipartFile file){
+ return Result.success(processMethodSearchNewService.importMethodSearchNew(file));
+ }
+
+ /**
+ * 鏂板瀛樻。
+ * @param archived
+ * @return
+ */
+ @Operation(summary = "鏂板瀛樻。")
+ @PostMapping("/addSearchNewArchived")
+ public Result addSearchNewApprovalProcess(@RequestBody ProcessMethodSearchNewArchived archived) {
+ return Result.success(processMethodSearchNewService.addSearchNewArchived(archived));
+ }
+
+ /**
+ * 鏂板瀛樻。
+ * @return
+ */
+ @Operation(summary = "鏌ヨ瀛樻。")
+ @GetMapping("/pageSearchNewArchived")
+ public Result pageSearchNewArchived(ProcessMethodSearchNewArchivedDto archived,Page page) throws Exception {
+ return Result.success(processMethodSearchNewService.pageSearchNewArchived(page, archived));
+ }
+
+ /**
+ * 鏍囧噯鏌ユ柊鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鏌ヨ瀛樻。澶囦唤鍒楄〃")
+ @GetMapping("/pageSearchNewBackups")
+ public Result<IPage<ProcessMethodSearchNewBackups>> pageSearchNewBackups(ProcessMethodSearchNewBackups backups,Page page) throws Exception {
+ return Result.success(processMethodSearchNewService.pageSearchNewBackups(page, backups));
+ }
+
+
+ /**
+ * 瀛樻。鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "瀛樻。鎵瑰噯")
+ @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..6c04881
--- /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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 鏍囧噯鏂规硶楠岃瘉
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@RestController
+@RequestMapping("/processMethodVerify")
+@Tag(name = "鏍囧噯鏂规硶楠岃瘉")
+@AllArgsConstructor
+public class ProcessMethodVerifyController {
+
+ @Resource
+ private ProcessMethodVerifyService processMethodVerifyService;
+
+ @Resource
+ private ProcessMethodVerifyMethodFileService processMethodVerifyMethodFileService;
+
+
+
+ /**
+ * 鏍囧噯鏌ユ柊鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鏍囧噯鏂规硶鏇存柊楠岃瘉鍒楄〃")
+ @GetMapping("/pagesMethodVerify")
+ public Result<IPage<ProcessMethodVerify>> pagesMethodVerify(ProcessMethodVerifyDto methodVerifyDto,Page page) throws Exception {
+ return Result.success(processMethodVerifyService.pagesMethodVerify(page, methodVerifyDto));
+ }
+
+ /**
+ * 鏂板鏍囧噯鏂规硶楠岃瘉
+ * @param methodVerifyDto
+ * @return
+ */
+ @Operation(summary = "鏂板鏍囧噯鏂规硶楠岃瘉")
+ @PostMapping("/addMethodVerify")
+ public Result addMethodVerify(@RequestBody ProcessMethodVerifyDto methodVerifyDto ) {
+ return Result.success(processMethodVerifyService.addMethodSearchNew(methodVerifyDto));
+ }
+
+ /**
+ * 鏌ヨ鏍囧噯鏂规硶楠岃瘉璇︽儏
+ * @param methodVerifyId
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鏍囧噯鏂规硶楠岃瘉璇︽儏")
+ @GetMapping("/getMethodVerifyOne")
+ public Result<ProcessMethodVerifyDto> getMethodVerifyOne(Integer methodVerifyId) {
+ return Result.success(processMethodVerifyService.getMethodVerifyOne(methodVerifyId));
+ }
+
+
+ /**
+ * 淇敼鏍囧噯鏂规硶楠岃瘉
+ * @param methodVerifyDto
+ * @return
+ */
+ @Operation(summary = "淇敼鏍囧噯鏂规硶楠岃瘉")
+ @PostMapping("/updateMethodVerify")
+ public Result updateMethodVerify(@RequestBody ProcessMethodVerifyDto methodVerifyDto ) {
+ return Result.success(processMethodVerifyService.updateMethodVerify(methodVerifyDto));
+ }
+
+ /**
+ * 鍒犻櫎鏍囧噯鏂规硶鏇存柊楠岃瘉
+ * @param methodVerifyId
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎鏍囧噯鏂规硶鏇存柊楠岃瘉")
+ @DeleteMapping("/delMethodVerify")
+ public Result delMethodVerify(Integer methodVerifyId){
+ return Result.success(processMethodVerifyService.delMethodVerify(methodVerifyId));
+ }
+
+ /**
+ * 瀵煎嚭鏍囧噯鏂规硶鏇存柊楠岃瘉
+ * @param methodVerifyId 鏍囧噯鏂规硶楠岃瘉id
+ */
+ @Operation(summary = "瀵煎嚭鏍囧噯鏂规硶鏇存柊楠岃瘉")
+ @GetMapping("/exportMethodVerify")
+ public void exportMethodVerify(Integer methodVerifyId, HttpServletResponse response){
+ processMethodVerifyService.exportMethodVerify(methodVerifyId, response);
+ }
+
+ /**
+ * 楠岃瘉纭
+ * @param methodVerifyId
+ * @return
+ */
+ @Operation(summary = "楠岃瘉纭")
+ @GetMapping("/methodVerifyAffirm")
+ public Result methodVerifyAffirm(Integer methodVerifyId) {
+ return Result.success(processMethodVerifyService.methodVerifyAffirm(methodVerifyId));
+ }
+
+ /**
+ * 鏂规硶楠岃瘉鏂板鍘熷璁板綍
+ * @param methodVerifyId
+ * @param file
+ * @return
+ */
+ @Operation(summary = "鏂规硶楠岃瘉鏂板鍘熷璁板綍")
+ @PostMapping("/uploadVerifyMethodFile")
+ public Result<?> uploadVerifyMethodFile(Integer methodVerifyId, MultipartFile file) {
+ return Result.success(processMethodVerifyService.uploadVerifyMethodFile(methodVerifyId, file));
+ }
+
+
+ /**
+ * 鏍囧噯鏂规硶鏇存柊楠岃瘉鍘熷璁板綍鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鏍囧噯鏂规硶鏇存柊楠岃瘉鍘熷璁板綍鍒楄〃")
+ @GetMapping("/getVerifyMethodFileList")
+ public Result<List<ProcessMethodVerifyMethodFile>> getVerifyMethodFileList(Integer methodVerifyId){
+ return Result.success(processMethodVerifyService.getVerifyMethodFileList(methodVerifyId));
+ }
+
+ /**
+ * 鏍囧噯鏂规硶鍒犻櫎楠岃瘉鍘熷璁板綍鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鏍囧噯鏂规硶鍒犻櫎楠岃瘉鍘熷璁板綍鍒楄〃")
+ @DeleteMapping("/delVerifyMethodFileList")
+ public Result delVerifyMethodFileList(Integer methodFileId){
+ return Result.success(processMethodVerifyMethodFileService.removeById(methodFileId));
+ }
+
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessOrderDeviceController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessOrderDeviceController.java
new file mode 100644
index 0000000..255fb8b
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessOrderDeviceController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.process.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.pojo.DeviceRecord;
+import com.ruoyi.device.service.DeviceRecordService;
+import com.ruoyi.process.pojo.ProcessOrderDevice;
+import com.ruoyi.process.service.ProcessOrderDeviceService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛�(7.1妫�楠屽鎵樺崟) 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:51:48
+ */
+@Tag(name = "cnas璁惧浣跨敤璁板綍")
+@RestController
+@RequestMapping("/processOrderDevice")
+public class ProcessOrderDeviceController {
+ @Autowired
+ private ProcessOrderDeviceService processOrderDeviceService;
+
+ @Operation(summary = "璁惧浣跨敤璁板綍鏌ヨ")
+ @GetMapping("/deviceRecordPage")
+ public Result deviceRecordPage(Integer deviceId, Page page, String sampleCode, String managementNumber) {
+ return Result.success(processOrderDeviceService.deviceRecordPage(deviceId, page, sampleCode, managementNumber));
+ }
+
+ @Operation(summary = "鏂板")
+ @PostMapping("/saveDeviceRecord")
+ public Result saveDeviceRecords(@RequestBody ProcessOrderDevice processOrderDevice) {
+ return Result.success(processOrderDeviceService.save(processOrderDevice));
+ }
+
+ /**
+ * 缂栬緫璁惧浣跨敤璁板綍
+ * @param processOrderDevice
+ * @return
+ */
+ @Operation(summary = "淇敼")
+ @PostMapping("/updateDeviceRecord")
+ public Result updateDeviceRecord(@RequestBody ProcessOrderDevice processOrderDevice) {
+ return Result.success(processOrderDeviceService.updateById(processOrderDevice));
+ }
+
+ @DeleteMapping("/deleteDeviceRecord")
+ public Result deleteDeviceRecords(@RequestParam("id") Integer id) {
+ return Result.success(processOrderDeviceService.removeById(id));
+ }
+
+ @Operation(summary = "璁惧浣跨敤璁板綍瀵煎嚭")
+ @GetMapping("/exportUseRecord")
+ public void exportUseRecord(Integer deviceId, String exportDate, HttpServletResponse response){
+ //processOrderDeviceService.exportUseRecord(deviceId, exportDate, response);
+ }
+}
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..ca16864
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessReportController.java
@@ -0,0 +1,71 @@
+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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-05 08:58:39
+ */
+@RestController
+@RequestMapping("/processReport")
+@Tag(name = "妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃")
+public class ProcessReportController {
+
+ @Resource
+ private ProcessReportService processReportService;
+
+ @Operation(summary = "鏌ヨ妫�楠屾姤鍛婂彂鏀剧櫥璁板垪琛�")
+ @GetMapping("/pageProcessReport")
+ public Result pageProcessReport(ProcessReportDto processReport , Page page) {
+ return Result.success(processReportService.pageProcessReport(page, processReport));
+ }
+
+ @Operation(summary = "鏂板妫�楠屾姤鍛婂彂鏀剧櫥璁�")
+ @PostMapping("/addProcessReport")
+ public Result addProcessReport(@RequestBody ProcessReport processReport) {
+ return Result.success(processReportService.save(processReport));
+ }
+
+ @Operation(summary = "鍒犻櫎妫�楠屾姤鍛婂彂鏀剧櫥璁�")
+ @DeleteMapping("/delProcessReport")
+ public Result delProcessReport(Long id) {
+ return Result.success(processReportService.removeById(id));
+ }
+
+ @Operation(summary = "鏌ョ湅妫�楠屾姤鍛婂彂鏀剧櫥璁拌鎯�")
+ @GetMapping("/getProcessReport")
+ public Result getProcessReport(Long id) {
+ return Result.success(processReportService.getById(id));
+ }
+
+ @Operation(summary = "淇敼妫�楠屾姤鍛婂彂鏀剧櫥璁�")
+ @PostMapping("/doProcessReport")
+ public Result doProcessReport(@RequestBody ProcessReport processReport) {
+ return Result.success(processReportService.updateById(processReport));
+ }
+
+ @Operation(summary = "瀵煎嚭妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃")
+ @GetMapping("/exportProcessReport")
+ public void exportProcessReport(ProcessReportDto dto, HttpServletResponse response) {
+ processReportService.exportProcessReport(dto, response);
+ }
+
+}
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..54a654a
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessSampleController.java
@@ -0,0 +1,57 @@
+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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏍峰搧鎺ユ敹 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-12 05:02:49
+ */
+@RestController
+@RequestMapping("/processSample")
+@Tag(name = "鏍峰搧鎺ユ敹")
+public class ProcessSampleController {
+
+ @Resource
+ private ProcessSampleService processSampleService;
+
+ @Operation(summary = "鏌ヨ鏍峰搧鎺ユ敹璇︽儏")
+ @GetMapping("/pageProcessSample")
+ public Result pageProcessSample(ProcessSample processSample, Page page){
+ return Result.success(processSampleService.pageProcessSample(page, processSample));
+ }
+
+ @Operation(summary = "鏂板鏍峰搧鎺ユ敹璇︽儏")
+ @PostMapping("/addProcessSample")
+ public Result addProcessSample(@RequestBody ProcessSample processSample) {
+ return Result.success(processSampleService.saveOrUpdate(processSample));
+ }
+
+ @Operation(summary = "鍒犻櫎鏍峰搧鎺ユ敹")
+ @DeleteMapping("/delProcessSample")
+ public Result delProcessSample(Integer id) {
+ return Result.success(processSampleService.removeById(id));
+ }
+
+
+ @Operation(summary = "瀵煎嚭鏍峰搧鎺ユ敹")
+ @GetMapping("/exportProcessSample")
+ public void exportProcessSample(ProcessSample processSample, HttpServletResponse response) {
+ processSampleService.exportProcessSample(processSample,response);
+ }
+
+
+}
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..38a91d1
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotaldealController.java
@@ -0,0 +1,74 @@
+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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�昏〃(鍘嗗彶) 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-02 03:59:09
+ */
+@RestController
+@RequestMapping("/processTotaldeal")
+@Tag(name = "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+public class ProcessTotaldealController {
+
+ @Resource
+ private ProcessTotaldealService processTotaldealService;
+
+ @Operation(summary = "鏌ヨ妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃垪琛�")
+ @GetMapping("/pageProcessTotaldeal")
+ public Result pageProcessTotaldeal(ProcessTotaldeal processTotaldeal , Page page) throws Exception {
+ return Result.success(processTotaldealService.pageProcessTotaldeal(page, processTotaldeal));
+ }
+
+ @Operation(summary = "鏂板妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+ @PostMapping("/addProcessTotaldeal")
+ public Result addProcessTotaldeal(@RequestBody Map<String, String> param) {
+ String month = param.get("month");
+ return Result.success(processTotaldealService.addProcessTotaldeal(month));
+ }
+
+ @Operation(summary = "鎻愪氦妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+ @PostMapping("/submitProcessTotaldeal")
+ public Result submitProcessTotaldeal(@RequestBody Map<String, Integer> param) {
+ Integer id = param.get("id");
+ return Result.success(processTotaldealService.submitProcessTotaldeal(id));
+ }
+
+ @Operation(summary = "瀹℃牳妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+ @PostMapping("/checkProcessTotaldeal")
+ public Result checkProcessTotaldeal(@RequestBody Map<String, Object> param) {
+ Integer id = (Integer) param.get("id");
+ String state = (String) param.get("state");
+ return Result.success(processTotaldealService.checkProcessTotaldeal(id, state));
+ }
+
+ @Operation(summary = "鎵瑰噯妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+ @PostMapping("/ratifyProcessTotaldeal")
+ public Result ratifyProcessTotaldeal(@RequestBody Map<String, Object> param) {
+ Integer id = (Integer) param.get("id");
+ String state = (String) param.get("state");
+ return Result.success(processTotaldealService.ratifyProcessTotaldeal(id,state));
+ }
+
+ @Operation(summary = "瀵煎嚭妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+ @GetMapping("/exportProcessTotaldeal")
+ public void exportProcessTotaldeal(Integer id, HttpServletResponse response) {
+ processTotaldealService.exportProcessTotaldeal(id,response);
+ }
+
+
+}
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..31fc4a1
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java
@@ -0,0 +1,296 @@
+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.QualityMonitorDetailsDto;
+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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Tag(name = "璐ㄩ噺鐩戞帶璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/qualityMonitor")
+public class QualityMonitorController {
+
+ @Resource
+ private QualityMonitorService qualityMonitorService;
+
+ @Resource
+ private QualityMonitorDetailsService qualityMonitorDetailsService;
+
+ @Resource
+ private QualityMonitorDetailsEvaluateFileMapper qualityMonitorDetailsEvaluateFileMapper;
+
+ /**
+ * 瀵煎叆鐩戞帶璁″垝
+ * @return
+ */
+ @Operation(summary = "瀵煎叆鐩戞帶璁″垝")
+ @PostMapping("/importQualityMonitor")
+ public Result importQualityMonitor(MultipartFile file, QualityMonitor qualityMonitor) {
+ return Result.success(qualityMonitorService.importQualityMonitor(file, qualityMonitor));
+ }
+
+ /**
+ * 鐩戞帶璁″垝瀹℃牳
+ * @return
+ */
+ @Operation(summary = "鐩戞帶璁″垝瀹℃牳")
+ @PostMapping("/examineQualityMonitor")
+ public Result examineQualityMonitor(@RequestBody QualityMonitor qualityMonitor) {
+ return Result.success(qualityMonitorService.examineQualityMonitor(qualityMonitor));
+ }
+
+ /**
+ * 鐩戞帶璁″垝鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "鐩戞帶璁″垝鍒犻櫎")
+ @DeleteMapping("/delQualitySupervise")
+ public Result delQualitySupervise(Integer qualityMonitorId) {
+ return Result.success(qualityMonitorService.removeById(qualityMonitorId));
+ }
+
+ /**
+ * 鐩戞帶璁″垝鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "鐩戞帶璁″垝鎵瑰噯")
+ @PostMapping("/ratifyQualityMonitor")
+ public Result ratifyQualityMonitor(@RequestBody QualityMonitor qualityMonitor) {
+ return Result.success(qualityMonitorService.ratifyQualityMonitor(qualityMonitor));
+ }
+
+
+ /**
+ * 鐩戞帶璁″垝鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鐩戞帶璁″垝鍒楄〃")
+ @GetMapping("/pageQualityMonitor")
+ public Result<IPage<QualityMonitorDto>> pageQualityMonitor(QualityMonitor qualityMonitor,Page page) throws Exception {
+ return Result.success(qualityMonitorService.pageQualityMonitor(page, qualityMonitor));
+ }
+
+ /**
+ * 鐩戞帶璁″垝璇︽儏鍒楄〃
+ * @param data
+ * @return
+ */
+ @Operation(summary = "鐩戞帶璁″垝璇︽儏鍒楄〃")
+ @GetMapping("/pageQualityMonitorDetail")
+ public Result<IPage<QualityMonitorDetailsDto>> pageQualityMonitorDetail(QualityMonitorDetails qualityMonitorDetails, Page page) throws Exception {
+ return Result.success(qualityMonitorService.pageQualityMonitorDetail(page, qualityMonitorDetails));
+ }
+
+ /**
+ * 鏂板鐩戞帶璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鏂板鐩戞帶璁″垝璇︽儏")
+ @PostMapping("/addQualityMonitorDetail")
+ public Result addQualityMonitorDetail(@RequestBody QualityMonitorDetails qualityMonitorDetails) {
+ if (qualityMonitorDetails.getQualityMonitorId() == null) {
+ throw new ErrorException("缂哄皯鐩戞帶璁″垝涓昏〃id");
+ }
+ return Result.success(qualityMonitorDetailsService.save(qualityMonitorDetails));
+ }
+
+ /**
+ * 淇敼鐩戞帶璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "淇敼鐩戞帶璁″垝璇︽儏")
+ @PostMapping("/updateQualityMonitorDetail")
+ public Result updateQualityMonitorDetail(@RequestBody QualityMonitorDetails qualityMonitorDetails) {
+ return Result.success(qualityMonitorDetailsService.updateById(qualityMonitorDetails));
+ }
+
+ /**
+ * 鍒犻櫎鐩戞帶璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎鐩戞帶璁″垝璇︽儏")
+ @DeleteMapping("/delQualityMonitorDetail")
+ public Result delQualityMonitorDetail(Integer qualityMonitorDetailsId) {
+ return Result.success(qualityMonitorDetailsService.removeById(qualityMonitorDetailsId));
+ }
+
+ /**
+ * 瀵煎嚭鐩戞帶璁″垝
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭鐩戞帶璁″垝")
+ @GetMapping("/exportQualityMonitorDetail")
+ public void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response) {
+ qualityMonitorService.exportQualityMonitorDetail(qualityMonitorId, response);
+ }
+
+
+ /************************************************************ 瀹炴柦 *******************************************************************/
+
+ /**
+ * 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅")
+ @GetMapping("/getQualityMonitorRatify")
+ public Result<QualityMonitorDetailsRatify> getQualityMonitorRatify(Integer qualityMonitorDetailsId) {
+ return Result.success(qualityMonitorService.getQualityMonitorRatify(qualityMonitorDetailsId));
+ }
+
+ /**
+ * 鏂板鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+ * @return
+ */
+ @Operation(summary = "鏂板鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅")
+ @PostMapping("/addQualityMonitorRatify")
+ public Result addQualityMonitorRatify(@RequestBody QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
+ return Result.success(qualityMonitorService.addQualityMonitorRatify(qualityMonitorDetailsRatify));
+ }
+
+ /**
+ * 鐩戞帶璁″垝璇︽儏鎻愪氦鎵瑰噯鎰忚
+ * @return
+ */
+ @Operation(summary = "鐩戞帶璁″垝璇︽儏鎻愪氦鎵瑰噯鎰忚")
+ @PostMapping("/addQualityMonitorRatifyOpinion")
+ public Result addQualityMonitorRatifyOpinion(@RequestBody QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
+ return Result.success(qualityMonitorService.addQualityMonitorRatifyOpinion(qualityMonitorDetailsRatify));
+ }
+
+ /**
+ * 瀵煎嚭鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+ * @param qualityMonitorDetailsId 鐩戞帶璁″垝璇︽儏瀹炴柦id
+ */
+ @Operation(summary = "瀵煎嚭鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅")
+ @GetMapping("/exportQualityMonitorRatify")
+ public void exportQualityMonitorRatify(Integer qualityMonitorDetailsId, HttpServletResponse response){
+ qualityMonitorService.exportQualityMonitorRatify(qualityMonitorDetailsId, response);
+ }
+
+ /************************************************************ 璇勪环 *******************************************************************/
+
+ /**
+ * 鏌ヨ鐩戞帶璇勪环
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戞帶璇勪环")
+ @GetMapping("/getQualityMonitorEvaluate")
+ public Result<QualityMonitorDetailsEvaluate> getQualityMonitorEvaluate(Integer qualityMonitorDetailsId) {
+ return Result.success(qualityMonitorService.getQualityMonitorEvaluate(qualityMonitorDetailsId));
+ }
+
+ /**
+ * 鏂板鐩戞帶璇勪环
+ * @return
+ */
+ @Operation(summary = "鏂板鐩戞帶璇勪环")
+ @PostMapping("/addQualityMonitorEvaluate")
+ public Result addQualityMonitorEvaluate(@RequestBody QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
+ return Result.success(qualityMonitorService.addQualityMonitorEvaluate(qualityMonitorDetailsEvaluate));
+ }
+
+ /**
+ * 瀵煎嚭鐩戞帶璇勪环
+ * @param qualityMonitorDetailsId 鐩戞帶璇勪环id
+ */
+ @Operation(summary = "瀵煎嚭鐩戞帶璇勪环")
+ @GetMapping("/exportQualityMonitorEvaluate")
+ public void exportQualityMonitorEvaluate(Integer qualityMonitorDetailsId, HttpServletResponse response){
+ qualityMonitorService.exportQualityMonitorEvaluate(qualityMonitorDetailsId, response);
+ }
+
+ /**
+ * 鐩戞帶璇勪环鎵瑰噯鎰忚
+ * @return
+ */
+ @Operation(summary = "鐩戞帶璇勪环鎵瑰噯鎰忚")
+ @PostMapping("/addMonitorEvaluateOpinion")
+ public Result addMonitorEvaluateOpinion(@RequestBody QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
+ return Result.success(qualityMonitorService.addMonitorEvaluateOpinion(qualityMonitorDetailsEvaluate));
+ }
+
+
+ /**
+ * 鏂板鐩戞帶璇勪环闄勪欢琛�
+ * @param qualityMonitorDetailsId
+ * @param file
+ * @return
+ */
+ @Operation(summary = "鏂板鐩戞帶璇勪环闄勪欢琛�")
+ @PostMapping("/uploadEvaluateFile")
+ public Result<?> uploadEvaluateFile(Integer qualityMonitorDetailsId, MultipartFile file) {
+ return Result.success(qualityMonitorService.uploadEvaluateFile(qualityMonitorDetailsId, file));
+ }
+
+
+ /**
+ * 鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃")
+ @GetMapping("/getEvaluateFileList")
+ public Result<List<QualityMonitorDetailsEvaluateFile>> getEvaluateFileList(Integer qualityMonitorDetailsId) {
+ return Result.success(qualityMonitorService.getEvaluateFileList(qualityMonitorDetailsId));
+ }
+
+ /**
+ * 鍒犻櫎鐩戞帶璇勪环闄勪欢琛�
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎鐩戞帶璇勪环闄勪欢琛�")
+ @DeleteMapping("/delVerifyEvaluateFileList")
+ public Result delVerifyMethodFileList(Integer evaluateFileId) {
+ return Result.success(qualityMonitorDetailsEvaluateFileMapper.deleteById(evaluateFileId));
+ }
+
+ /******************************************************** 瀹屾垚鎶ュ憡 ***************************************************************/
+
+ /**
+ * 涓婁紶鐩戞帶瀹屾垚鎶ュ憡
+ * @param file
+ * @param qualityMonitorDetailsId
+ * @return
+ */
+ @Operation(summary = "涓婁紶鐩戞帶瀹屾垚鎶ュ憡")
+ @PostMapping("/uploadFinishReport")
+ public Result uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId) {
+ return Result.success(qualityMonitorService.uploadFinishReport(file, qualityMonitorDetailsId));
+ }
+
+
+ /**
+ * 鐩戞帶璁″垝鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "鎵瑰噯瀹屾垚鎶ュ憡")
+ @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..900d100
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseController.java
@@ -0,0 +1,354 @@
+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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 璐ㄩ噺鐩戠潱涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Tag(name = "璐ㄩ噺鐩戠潱璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/qualitySupervise")
+public class QualitySuperviseController {
+
+ @Resource
+ private QualitySuperviseService qualitySuperviseService;
+ @Resource
+ private QualitySuperviseDetailsService qualitySuperviseDetailsService;
+ @Resource
+ private QualitySuperviseDetailsCorrectMapper qualitySuperviseDetailsCorrectMapper;
+
+ /**
+ * 瀵煎叆鐩戠潱璁″垝
+ * @return
+ */
+ @Operation(summary = "瀵煎叆鐩戠潱璁″垝")
+ @PostMapping("/importQualitySupervise")
+ public Result importQualitySupervise(MultipartFile file, QualitySupervise qualitySupervise){
+ return Result.success(qualitySuperviseService.importQualitySupervise(file, qualitySupervise));
+ }
+
+ /**
+ * 鐩戠潱璁″垝鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鐩戠潱璁″垝鍒楄〃")
+ @GetMapping("/pageQualitySupervise")
+ public Result<IPage<QualitySupervise>> pageQualitySupervise(QualitySupervise qualitySupervise ,Page page) throws Exception {
+ return Result.success(qualitySuperviseService.pageQualitySupervise(page, qualitySupervise));
+ }
+
+ /**
+ * 鐩戠潱璁″垝鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "鐩戠潱璁″垝鎵瑰噯")
+ @PostMapping("/ratifyQualitySupervise")
+ public Result ratifyQualitySupervise(@RequestBody QualitySupervise qualitySupervise){
+ return Result.success(qualitySuperviseService.ratifyQualitySupervise(qualitySupervise));
+ }
+
+ /**
+ * 鐩戠潱璁″垝鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "鐩戠潱璁″垝鍒犻櫎")
+ @DeleteMapping("/delQualitySupervise")
+ public Result delQualitySupervise(Integer superviseId){
+ return Result.success(qualitySuperviseService.removeById(superviseId));
+ }
+
+ /**
+ * 鐩戠潱璁″垝璇︽儏鍒楄〃
+ * @param qualitySuperviseDetails
+ * @param page
+ * @return
+ */
+ @Operation(summary = "鐩戠潱璁″垝璇︽儏鍒楄〃")
+ @GetMapping("/pageQualitySuperviseDetail")
+ public Result<IPage<QualitySuperviseDetailsDto>> pageQualitySuperviseDetail(QualitySuperviseDetailsDto qualitySuperviseDetails,Page page) throws Exception {
+ return Result.success(qualitySuperviseService.pageQualitySuperviseDetail(page, qualitySuperviseDetails));
+ }
+
+ /**
+ * 鏂板鐩戠潱璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鏂板鐩戠潱璁″垝璇︽儏")
+ @PostMapping("/addQualitySuperviseDetail")
+ public Result addQualitySuperviseDetail(@RequestBody QualitySuperviseDetails qualitySuperviseDetails){
+ if (qualitySuperviseDetails.getSuperviseId() == null) {
+ throw new ErrorException("缂哄皯鐩戠潱璁″垝涓昏〃id");
+ }
+ return Result.success(qualitySuperviseDetailsService.save(qualitySuperviseDetails));
+ }
+
+ /**
+ * 淇敼鐩戠潱璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "淇敼鐩戠潱璁″垝璇︽儏")
+ @PostMapping("/updateQualitySuperviseDetail")
+ public Result updateQualitySuperviseDetail(@RequestBody QualitySuperviseDetails qualitySuperviseDetails){
+ return Result.success(qualitySuperviseDetailsService.updateById(qualitySuperviseDetails));
+ }
+
+ /**
+ * 鍒犻櫎鐩戠潱璁″垝璇︽儏
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎鐩戠潱璁″垝璇︽儏")
+ @DeleteMapping("/delQualitySuperviseDetail")
+ public Result delQualitySuperviseDetail(Integer superviseDetailsId){
+ return Result.success(qualitySuperviseDetailsService.removeById(superviseDetailsId));
+ }
+
+ /**
+ * 鏌ヨ璇ヨ鍒掔洃鐫e憳
+ * @return
+ */
+ @Operation(summary = "鏌ヨ璇ヨ鍒掔洃鐫e憳")
+ @GetMapping("/getRecordUser")
+ public Result getRecordUser(Integer superviseDetailsId){
+ return Result.success(qualitySuperviseService.getRecordUser(superviseDetailsId));
+ }
+
+
+ /**
+ * 瀵煎嚭鐩戠潱璁″垝
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭鐩戠潱璁″垝")
+ @GetMapping("/exportQualitySupervise")
+ public void exportQualitySupervise(Integer superviseId, HttpServletResponse response){
+ qualitySuperviseService.exportQualitySupervise(superviseId, response);
+ }
+
+
+ /************************************************* 璁板綍 *********************************************************/
+
+ /**
+ * 鏌ヨ鐩戠潱璁板綍淇℃伅
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戠潱璁板綍淇℃伅")
+ @GetMapping("/getSuperviseDetailRecord")
+ public Result<QualitySuperviseDetailsRecord> getSuperviseDetailRecord(Integer superviseDetailsId){
+ return Result.success(qualitySuperviseService.getSuperviseDetailRecord(superviseDetailsId));
+ }
+
+ /**
+ * 鏂板鐩戠潱璁板綍淇℃伅
+ * @return
+ */
+ @Operation(summary = "鏂板鐩戠潱璁板綍淇℃伅")
+ @PostMapping("/addSuperviseDetailRecord")
+ public Result addSuperviseDetailRecord(@RequestBody QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord){
+ return Result.success(qualitySuperviseService.addSuperviseDetailRecord(qualitySuperviseDetailsRecord));
+ }
+
+ /**
+ * 鐩戠潱璁板綍鎵瑰噯
+ * @return
+ */
+ @Operation(summary = "鐩戠潱璁板綍鎵瑰噯")
+ @PostMapping("/addSuperviseRecordOpinion")
+ public Result addSuperviseRecordOpinion(@RequestBody QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord){
+ return Result.success(qualitySuperviseService.addSuperviseRecordOpinion(qualitySuperviseDetailsRecord));
+ }
+
+ /**
+ * 瀵煎嚭璐ㄩ噺鐩戠潱璇︽儏璁板綍琛�
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭鐩戠潱璁板綍琛�")
+ @GetMapping("/exportSuperviseDetailRecord")
+ public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response){
+ qualitySuperviseService.exportSuperviseDetailRecord(superviseDetailsId, response);
+ }
+
+ /************************************************* 涓嶅悎鏍煎伐浣滄帶鍒跺崟 ********************************************************/
+
+
+ /**
+ * 鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+ * @return
+ */
+ @Operation(summary = "鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+ @PostMapping("/addSuperviseDetailAccording")
+ public Result addSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
+ return Result.success(qualitySuperviseService.addSuperviseDetailAccording(qualitySuperviseDetailsAccording));
+ }
+
+ /**
+ * 鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�(瑁呭娴佺▼)
+ * @return
+ */
+ @Operation(summary = "(瑁呭娴佺▼)鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+ @PostMapping("/addEquipSuperviseDetailAccording")
+ public Result addEquipSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
+ return Result.success(qualitySuperviseService.addEquipSuperviseDetailAccording(qualitySuperviseDetailsAccording));
+ }
+
+ /**
+ * (瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+ * @return
+ */
+ @Operation(summary = "(瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+ @PostMapping("/approverEquipSuperviseDetailAccording")
+ public Result approverEquipSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
+ return Result.success(qualitySuperviseService.approverEquipSuperviseDetailAccording(qualitySuperviseDetailsAccording));
+ }
+
+ /**
+ * 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+ @GetMapping("/getSuperviseDetailAccording")
+ public Result<QualitySuperviseDetailsAccording> getSuperviseDetailAccording(Integer superviseDetailsId){
+ return Result.success(qualitySuperviseService.getSuperviseDetailAccording(superviseDetailsId));
+ }
+
+ /**
+ * 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭垪琛�
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭垪琛�")
+ @GetMapping("/pageSuperviseDetailAccording")
+ public Result<IPage<QualitySuperviseDetailsAccording>> pageSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording,Page page) throws Exception {
+ return Result.success(qualitySuperviseService.pageSuperviseDetailAccording(page, detailsAccording));
+ }
+
+ /**
+ * 瀵煎嚭鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�")
+ @GetMapping("/superviseDetailAccordingExport")
+ public void superviseDetailAccordingExport(@RequestParam("superviseDetailsId") Integer id, HttpServletResponse response){
+ qualitySuperviseService.superviseDetailAccordingExport(id, response);
+ }
+
+
+
+ /************************************************* 绾犳鎺柦澶勭悊鍗� ********************************************************/
+
+
+ /**
+ * 鏂板鐩戠潱绾犳澶勭悊淇℃伅
+ * @return
+ */
+ @Operation(summary = "鏂板鐩戠潱绾犳澶勭悊")
+ @PostMapping("/addSuperviseDetailCorrect")
+ public Result addSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
+ return Result.success(qualitySuperviseService.addSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
+ }
+
+ /**
+ * (瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊淇℃伅
+ * @return
+ */
+ @Operation(summary = "(瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊")
+ @PostMapping("/addEquipSuperviseDetailCorrect")
+ public Result addEquipSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
+ return Result.success(qualitySuperviseService.addEquipSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
+ }
+
+ /**
+ * (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊
+ * @return
+ */
+ @Operation(summary = "(瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊")
+ @PostMapping("/approveEquipSuperviseDetailCorrect")
+ public Result approveEquipSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
+ return Result.success(qualitySuperviseService.approveEquipSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
+ }
+
+ /**
+ * 鏌ヨ鐩戠潱绾犳澶勭悊
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戠潱绾犳澶勭悊")
+ @GetMapping("/getSuperviseDetailCorrect")
+ public Result<QualitySuperviseDetailsCorrect> getSuperviseDetailCorrect(Integer superviseDetailsId){
+ return Result.success(qualitySuperviseService.getSuperviseDetailCorrect(superviseDetailsId));
+ }
+
+ /**
+ * 鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃")
+ @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
+ */
+ @Operation(summary = "鏂板鐩戠潱绾犳鎺柦闄勪欢")
+ @PostMapping("/uploadSuperviseDetailCorrectFile")
+ public Result<?> uploadSuperviseDetailCorrectFile(Integer superviseDetailsCorrectId, MultipartFile file) {
+ return Result.success(qualitySuperviseService.uploadSuperviseDetailCorrectFile(superviseDetailsCorrectId, file));
+ }
+
+
+ /**
+ * 鏌ヨ鐩戠潱绾犳鎺柦闄勪欢
+ * @return
+ */
+ @Operation(summary = "鏌ヨ鐩戠潱绾犳鎺柦闄勪欢")
+ @GetMapping("/getSuperviseDetailCorrectFileList")
+ public Result<List<QualitySuperviseDetailsCorrectFile>> getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId){
+ return Result.success(qualitySuperviseService.getSuperviseDetailCorrectFileList(superviseDetailsCorrectId));
+ }
+
+ /**
+ * 鍒犻櫎鐩戠潱绾犳鎺柦闄勪欢
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎鐩戠潱绾犳鎺柦闄勪欢")
+ @DeleteMapping("/delSuperviseDetailCorrectFile")
+ public Result delSuperviseDetailCorrectFile(Integer superviseDetailsCorrectFileId){
+ return Result.success(qualitySuperviseDetailsCorrectMapper.deleteById(superviseDetailsCorrectFileId));
+ }
+
+ /**
+ * 瀵煎嚭鐩戠潱绾犳鎺柦
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭鐩戠潱绾犳鎺柦")
+ @GetMapping("/exportSuperviseDetaillCorrect")
+ public void exportSuperviseDetaillCorrect(Integer superviseDetailsCorrectId, HttpServletResponse response){
+ qualitySuperviseService.exportSuperviseDetaillCorrect(superviseDetailsCorrectId, response);
+ }
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseManagementReviewController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseManagementReviewController.java
new file mode 100644
index 0000000..b981d42
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseManagementReviewController.java
@@ -0,0 +1,71 @@
+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.pojo.QualitySupervise;
+import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
+import com.ruoyi.process.service.QualitySuperviseManagementReviewService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璐ㄩ噺鐩戠潱绠$悊璇勫杈撳叆鏉愭枡 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2025-05-07 10:46:11
+ */
+@RestController
+@RequestMapping("/managementReview")
+@Tag(name = "璐ㄩ噺鐩戠潱绠$悊璇勫杈撳叆鏉愭枡")
+@AllArgsConstructor
+public class QualitySuperviseManagementReviewController {
+
+ private QualitySuperviseManagementReviewService qualitySuperviseManagementReviewService;
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @return
+ */
+ @Operation(summary = "鍒嗛〉鏌ヨ")
+ @GetMapping("/pageManagementReview")
+ public Result<IPage<QualitySuperviseManagementReview>> pageManagementReview(QualitySuperviseManagementReview managementReview, Page page) {
+ return Result.success(qualitySuperviseManagementReviewService.pageManagementReview(page, managementReview));
+ }
+
+ /**
+ * 鏂板鎴栦慨鏀�
+ * @return
+ */
+ @Operation(summary = "鏂板鎴栦慨鏀�")
+ @PostMapping("/saveOrUpdateManagementReview")
+ public Result saveOrUpdateManagementReview(@RequestBody QualitySuperviseManagementReview managementReview) {
+ return Result.success(qualitySuperviseManagementReviewService.saveOrUpdate(managementReview));
+ }
+
+ /**
+ * 鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "鍒犻櫎")
+ @DeleteMapping("/deleteManagementReview")
+ public Result deleteManagementReview(Integer managementReviewId) {
+ return Result.success(qualitySuperviseManagementReviewService.removeById(managementReviewId));
+ }
+
+ /**
+ * 瀵煎嚭
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭")
+ @GetMapping("/exportManagementReview")
+ public void exportManagementReview(Integer managementReviewId,HttpServletResponse response) {
+ qualitySuperviseManagementReviewService.exportManagementReview(managementReviewId, 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..f8e0f60
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/15
+ */
+@Data
+public class InconsistentDistributionDto extends InconsistentDistribution {
+
+ @Schema(description = "鍒嗗竷璇︽儏")
+ private List<InconsistentDistributionDetail> distributionDetailList;
+
+ @Schema(description = "鍗犳瘮瀵硅薄")
+ private InconsistentDistributionProportionDto distributionProportion;
+
+ @Schema(description = "鍒涘缓浜哄悕绉�")
+ private String createUserName;
+
+ @Schema(description = "淇敼浜哄悕绉�")
+ 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..2320836
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 鍗犳瘮瀵硅薄
+ *
+ * @Author zhuo
+ * @Date 2024/11/15
+ */
+
+@Data
+public class InconsistentDistributionProportionDto {
+
+ @Schema(description = "绔犺妭鍙�")
+ private String chapterNumber;
+
+ @Schema(description = "瑕佺礌")
+ private String essentials;
+
+ @Schema(description = "涓讳换")
+ private BigDecimal director;
+
+ @Schema(description = "鎶�鏈礋璐d汉")
+ private BigDecimal technology;
+
+ @Schema(description = "璐ㄩ噺璐熻矗浜�")
+ private BigDecimal quality;
+
+ @Schema(description = "缁煎悎瀹�")
+ private BigDecimal comprehensive;
+
+ @Schema(description = "璇曢獙瀹�")
+ private BigDecimal testing;
+
+ @Schema(description = "鍚堣")
+ private Integer total;
+
+ @Schema(description = "鍗犳瘮")
+ 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..3a459bc
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/9
+ */
+@Data
+public class InspectionOrderDto extends InspectionOrder {
+
+ @Schema(description = "濮旀墭妫�楠屽崟璇︽儏")
+ 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..90df017
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-10 鏄熸湡浜�
+ * Description:
+ */
+@Data
+public class InspectionOrderExportDto extends InspectionOrder {
+ @Schema(description = "鐣欐牱:1 鏄�")
+ private String isLeave1 = "鈻�";
+
+ @Schema(description = "鐣欐牱:0 鍚�")
+ private String isLeave2 = "鈻�";
+
+ @Schema(description = "鎶ュ憡鍙戦�佹柟寮� 1锛氳嚜鍙�")
+ private String send1 = "鈻�";
+
+ @Schema(description = "鎶ュ憡鍙戦�佹柟寮� 0锛氬叾浠�")
+ private String send0 = "鈻�";
+
+ @Schema(description = "鏍峰搧澶勭悊鏂瑰紡 1锛氬疄楠屽澶勭悊")
+ private String processing1 = "鈻�";
+
+ @Schema(description = "鏍峰搧澶勭悊鏂瑰紡 0锛氬鎵樺崟浣嶅彇鍥�")
+ private String processing0 = "鈻�";
+
+ @Schema(description = "鍒ゆ柇瑙勫垯 1锛氳�冭檻涓嶇‘瀹氬害")
+ private String criterionRule1 = "鈻�";
+
+ @Schema(description = "鍒ゆ柇瑙勫垯 0锛氫笉鑰冭檻涓嶇‘瀹氬害")
+ private String criterionRule0 = "鈻�";
+
+ @Schema(description = "濮旀墭鏃堕棿 瀛楃涓叉牸寮忥細yyyy骞碝M鏈坉d")
+ private String commissionDateString;
+
+ @Schema(description = "鎺ユ敹鏃ユ湡 瀛楃涓叉牸寮忥細yyyy骞碝M鏈坉d")
+ private String receiptDataString;
+
+ @Schema(description = "棰嗘牱鏃ユ湡 瀛楃涓叉牸寮忥細yyyy骞碝M鏈坉d")
+ private String sampleDataString;
+
+ @Schema(description = "绾﹀畾鏃堕棿 瀛楃涓叉牸寮忥細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/ProcessDealDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessDealDto.java
new file mode 100644
index 0000000..9e595e1
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessDealDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.process.pojo.ProcessDeal;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2025/4/23
+ */
+@Data
+public class ProcessDealDto extends ProcessDeal {
+ @Schema(description = "搴忓彿")
+ private String indexs;
+
+ @Schema(description = "鏃堕棿")
+ private String dealTimeStr;
+}
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..8412af2
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/25
+ */
+@Data
+public class ProcessMethodSearchNewArchivedDto extends ProcessMethodSearchNewArchived {
+
+ @Schema(description = "缂栧埗浜�")
+ private String writeName;
+
+ @Schema(description = "鎵瑰噯浜�")
+ 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..ac15b4a
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/4
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class ProcessMethodSearchNewBackupsDto extends ProcessMethodSearchNewBackups {
+
+ @Schema(description = "寮�濮嬫椂闂�")
+ private String beginDate;
+
+ @Schema(description = "缁撴潫鏃堕棿")
+ private String endDate;
+
+ @Schema(description = "缂栧埗浜篿d")
+ private Integer writeUserId;
+
+ @Schema(description = "鎵瑰噯浜篿d")
+ private Integer ratifyUserId;
+
+ @Schema(description = "缂栧埗浜烘棩鏈�")
+ private String writeDate;
+
+ @Schema(description = "鎵瑰噯浜烘棩鏈�")
+ private String ratifyDate;
+
+ @ExcelProperty(value = {"鏄惁鏈夋洿鏂版爣鍑�", "鏄惁鏈夋洿鏂版爣鍑�"}, index = 4)
+ @Schema(description = "鏄惁鏈夋洿鏂版爣鍑�")
+ private String isNewStandardString;
+
+ @ExcelProperty(value = {"鏌ユ柊璁板綍", "鏍囧噯缃�"}, index = 7)
+ @Schema(description = "鏍囧噯缃�")
+ private String standardNet;
+
+ @ExcelProperty(value = {"鏌ユ柊璁板綍", "濮旀墭鎯呮姤鎵�"}, index = 8)
+ @Schema(description = "濮旀墭鎯呮姤鎵�")
+ private String informationOffices;
+
+ @ExcelProperty(value = {"鏌ユ柊璁板綍", "鏍囧噯涔﹀簵"}, index = 9)
+ @Schema(description = "鏍囧噯涔﹀簵")
+ private String standardBookstore;
+
+ @ExcelProperty(value = {"鏌ユ柊璁板綍", "鍏朵粬"}, index = 10)
+ @Schema(description = "鍏朵粬")
+ private String other;
+
+ @ExcelProperty(value = {"澶囨敞", "澶囨敞"}, index = 11)
+ @Schema(description = "澶囨敞")
+ private String remarkString;
+
+ @ExcelProperty(value = {"搴忓彿", "搴忓彿"}, index = 0)
+ @Schema(description = "搴忓彿")
+ 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..08b90f6
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/12
+ */
+@Data
+public class ProcessMethodVerifyCalibrationsFileDto extends ProcessMethodVerifyCalibrationsFile {
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "璁惧缂栧彿")
+ 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..3e9dc14
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/5
+ */
+@Data
+public class ProcessMethodVerifyDto extends ProcessMethodVerify {
+
+ @Schema(description = "璁惧闄勪欢")
+ private List<ProcessMethodVerifyMachineAttachment> machineAttachmentList;
+
+ @Schema(description = "鍘熷璁板綍闄勪欢")
+ private List<ProcessMethodVerifyMethodFile> methodFileList;
+
+ @Schema(description = "涓婂矖璇�")
+ private List<ProcessMethodVerifyWorkFile> workFileList;
+
+ @Schema(description = "鏍″噯璇佷功")
+ 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..16a4eeb
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-19 鏄熸湡鍥� 15:55:46
+ * Description:
+ */
+@Data
+public class ProcessMethodVerifyExportWordDto extends ProcessMethodVerify {
+ @Schema(description = "(浜�)鏄惁婊¤冻 1婊¤冻 0涓嶆弧瓒�")
+ private String personIsSatisfiedStr;
+
+ @Schema(description = "(鏈�)鏄惁婊¤冻")
+ private String machineIsSatisfiedStr;
+
+ @Schema(description = "(鏂�)鏄惁婊¤冻")
+ private String materialIsSatisfiedStr;
+
+ @Schema(description = "(娉�)鏄惁婊¤冻")
+ private String methodIsSatisfiedStr;
+
+ @Schema(description = "(鐜�)鏄惁婊¤冻")
+ private String environmentIsSatisfiedStr;
+
+ @Schema(description = "(娴嬮噺婧簮鎬�)鏄惁婊¤冻")
+ private String traceabilityIsSatisfiedStr;
+
+ @Schema(description = "(鏍峰搧绠$悊闇�姹�)鏄惁婊¤冻")
+ private String managementIsSatisfiedStr;
+
+ @Schema(description = "(鍏朵粬)鏄惁婊¤冻")
+ private String otherIsSatisfiedStr;
+
+ @Schema(description = "纭鏃堕棿")
+ 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..fac8c1c
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessReportDto.java
@@ -0,0 +1,30 @@
+package com.ruoyi.process.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.deepoove.poi.data.PictureRenderData;
+import com.ruoyi.process.pojo.ProcessReport;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+//瀵煎嚭
+public class ProcessReportDto extends ProcessReport {
+
+ private List<Integer> ids;
+
+ @Schema(description = "鍙戦�佷汉濮撳悕")
+ private String sendUserName;
+
+ @Schema(description = "鍙戦�佷汉鍦板潃")
+ private String sendUserUrl;
+
+ @Schema(description = "鍙戦�佷汉绛惧悕")
+ private PictureRenderData sendUserRender;
+
+ @Schema(description = "绛炬敹绛惧悕")
+ private PictureRenderData signatoryRender;
+
+
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java
new file mode 100644
index 0000000..ccc0a9d
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.QualityMonitorDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2025/3/24
+ */
+@Data
+public class QualityMonitorDetailsDto extends QualityMonitorDetails {
+
+ @Schema(description = "瀹炴柦鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:涓嶆壒鍑�, 3:宸叉壒鍑�")
+ private Integer detailsRatifyStatus;
+
+ @Schema(description = "鎶ュ憡鐘舵��, 0: 鏈紑濮�, 1:寰呮彁浜�, 2:琛ユ壒鍑�, 3:宸叉壒鍑�")
+ private Integer reportStatus;
+
+ @Schema(description = "璇勪环鐘舵��, 0: 鏈紑濮�, 1:寰呰瘎浠�, 2:寰呮壒鍑�, 3:宸叉壒鍑�")
+ private Integer evaluateStatus;
+
+}
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..b1a2241
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-20 鏄熸湡浜� 9:08:38
+ * Description:
+ */
+@Data
+public class QualityMonitorDetailsEvaluateDto extends QualityMonitorDetailsEvaluate {
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ 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..3db11c2
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/6
+ */
+@Data
+public class QualityMonitorDto extends QualityMonitor {
+
+ @Schema(description = "缂栧埗浜�")
+ private String writeName;
+
+ @Schema(description = "瀹℃牳浜�")
+ private String examineName;
+
+ @Schema(description = "鎵瑰噯浜�")
+ 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..3534d4d
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-11 鏄熸湡涓� 16:26:41
+ * Description:
+ */
+@Data
+public class QualitySuperviseDetailsAccordingDto extends QualitySuperviseDetailsAccording {
+
+ @Schema(description = "1鍙戠幇閮ㄩ棬-鏃ユ湡")
+ private String discovererDateString;
+
+ @Schema(description = "3璐d换閮ㄩ棬 鏃ユ湡")
+ private String responsibleDepartmentDateString;
+
+ @Schema(description = "4绾犳鎺柦 鏃ユ湡")
+ private String correctiveMeasureDateString;
+
+ @Schema(description = "5璐ㄩ噺璐熻矗浜烘棩鏈�")
+ private String qualitySupervisorDateString;
+
+ @Schema(description = "0琚洃鐫f椂闂� 鏃ユ湡")
+ private String supervisedTimeString;
+
+ @Schema(description = "4绾犳鎺柦澶勭悊鍗曡窡韪�(鏄�)")
+ private String correctiveMeasureFollowTracksYes = "鈻�";
+ @Schema(description = "4绾犳鎺柦澶勭悊鍗曡窡韪�(鍚�)")
+ private String correctiveMeasureFollowTracksNo = "鈻�";
+
+
+ @Schema(description = "5鏄惁閫氱煡瀹㈡埛(鏄�)")
+ private String whetherInformCustomerYes = "鈻�";
+ @Schema(description = "5鏄惁閫氱煡瀹㈡埛(鍚�)")
+ private String whetherInformCustomerNo = "鈻�";
+
+
+ @Schema(description = "5鏄惁鎭㈠宸ヤ綔(1锛氭槸锛�2锛氬惁)")
+ private String whetherResumeWorkYes = "鈻�";
+ @Schema(description = "5鏄惁鎭㈠宸ヤ綔(1锛氭槸锛�2锛氬惁)")
+ private String whetherResumeWorkNo = "鈻�";
+
+ @Schema(description = "1涓嶇鍚堝伐浣滃彂鐜伴�斿緞0(绠$悊璇勫)")
+ private String discoveryApproach0 = "鈻�";
+ @Schema(description = "1涓嶇鍚堝伐浣滃彂鐜伴�斿緞1(鍐呴儴瀹℃牳)")
+ private String discoveryApproach1 = "鈻�";
+ @Schema(description = "1涓嶇鍚堝伐浣滃彂鐜伴�斿緞2(妫�娴嬭繃绋嬫帶鍒�)")
+ private String discoveryApproach2 = "鈻�";
+ @Schema(description = "1涓嶇鍚堝伐浣滃彂鐜伴�斿緞3(鍐呴儴璐ㄩ噺鎺у埗)")
+ private String discoveryApproach3 = "鈻�";
+ @Schema(description = "1涓嶇鍚堝伐浣滃彂鐜伴�斿緞4(鍐呴儴鐩戠潱)")
+ private String discoveryApproach4 = "鈻�";
+ @Schema(description = "1涓嶇鍚堝伐浣滃彂鐜伴�斿緞5(澶栭儴璇勫/妫�鏌�)")
+ private String discoveryApproach5 = "鈻�";
+ @Schema(description = "1涓嶇鍚堝伐浣滃彂鐜伴�斿緞6(椤惧鎶曡瘔/鎰忚鍙嶉)")
+ private String discoveryApproach6 = "鈻�";
+ @Schema(description = "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..55c9dab
--- /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.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/2
+ */
+@Data
+public class QualitySuperviseDetailsCorrectDto extends QualitySuperviseDetailsCorrect {
+
+ @Schema(description = "鎻愬嚭鏃堕棿")
+ private String raiseTimeString;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽鏃堕棿")
+ private String causeTimeString;
+
+ @Schema(description = "绾犳鏃堕棿")
+ private String correctTimeString;
+
+ @Schema(description = "楠岃瘉鏃堕棿")
+ 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..ffac447
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java
@@ -0,0 +1,34 @@
+package com.ruoyi.process.dto;
+
+import com.ruoyi.process.pojo.QualitySuperviseDetails;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/7
+ */
+@Data
+public class QualitySuperviseDetailsDto extends QualitySuperviseDetails {
+
+ @Schema(description = "鏄惁绗﹀悎,0 涓嶇鍚�, 1绗﹀悎")
+ private Integer isAccording;
+
+ @Schema(description = "2鏄惁绾犳澶勭悊, 0鍚�, 1鏄�")
+ private Integer isCorrect;
+
+ @Schema(description = "璐ㄩ噺鐩戠潱璇︽儏绾犳澶勭悊id")
+ private Integer superviseDetailsCorrectId;
+
+ @Schema(description = "鐩戠潱鍘熷洜绫诲瀷, 1:瀹氭湡鐩戠潱, 2:鍔ㄦ�佺洃鐫�")
+ private Integer causeType;
+
+ @Schema(description = "璁板綍鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:涓嶆壒鍑�, 3:宸叉壒鍑�")
+ private Integer recordStatus;
+
+ @Schema(description = "鎺у埗鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:涓嶆壒鍑�, 3:宸叉壒鍑�")
+ private Integer accordingStatus;
+
+ @Schema(description = "绾犳鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:涓嶆壒鍑�, 3:宸叉壒鍑�")
+ private Integer correctStatus;
+}
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/listener/NewJuOrderInspectionListener.java b/cnas-process/src/main/java/com/ruoyi/process/listener/NewJuOrderInspectionListener.java
new file mode 100644
index 0000000..c444fa5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/listener/NewJuOrderInspectionListener.java
@@ -0,0 +1,70 @@
+package com.ruoyi.process.listener;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.inspect.event.NewJuOrderPlacedEvent;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.service.InsOrderService;
+import com.ruoyi.process.mapper.InspectionOrderMapper;
+import com.ruoyi.process.pojo.InspectionOrder;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+
+/**
+ * 鏂拌仛鎴愬搧涓嬪崟鎴愬姛鍚庯紝鑷姩鐢熸垚涓�鏉℃楠屽鎵樺崟銆�
+ */
+@Component
+@AllArgsConstructor
+public class NewJuOrderInspectionListener {
+
+ private final InsOrderService insOrderService;
+ private final InspectionOrderMapper inspectionOrderMapper;
+
+ @EventListener
+ public void onNewJuOrderPlaced(NewJuOrderPlacedEvent event) {
+ InsOrder order = insOrderService.getById(event.getInsOrderId());
+ if (order == null) {
+ return;
+ }
+ // 骞傜瓑锛氬悓涓�鎴愬搧璁㈠崟宸叉湁妫�楠屽鎵樺崟鍒欒烦杩�
+ Long count = inspectionOrderMapper.selectCount(Wrappers.<InspectionOrder>lambdaQuery()
+ .eq(InspectionOrder::getInsOrderId, order.getId()));
+ if (count > 0) {
+ return;
+ }
+ InspectionOrder inspectionOrder = new InspectionOrder();
+ inspectionOrder.setInsOrderId(order.getId());
+ inspectionOrder.setEntrustCode(order.getEntrustCode());
+ // 璇曟牱鍚嶇О浼樺厛鍙栨姤鍛婂睍绀哄瓧娈�
+ inspectionOrder.setSampleName(StringUtils.isNotBlank(order.getSampleView())
+ ? order.getSampleView() : order.getSample());
+ inspectionOrder.setProduction(order.getProduction());
+ inspectionOrder.setQuantity(order.getTestQuantity());
+ inspectionOrder.setCommissionDate(LocalDate.now());
+ inspectionOrder.setCommissionUnit(order.getCompany());
+ inspectionOrder.setCommissionUser(order.getPrepareUser());
+ inspectionOrder.setCommissionPhone(order.getPhone());
+ inspectionOrder.setSampleStatus("瀹屽ソ");
+ // 鏄惁鐣欐牱璇箟杞崲锛歩ns 0鍚�/1鏄� -> cnas 1鏄�/2鍚�
+ inspectionOrder.setIsLeave(Integer.valueOf(1).equals(order.getIsLeave()) ? 1 : 2);
+ // 鏍峰搧澶勭疆锛�1濮旀墭鏂瑰彇鍥�/2妫�娴嬫柟澶勭疆 -> processing 0濮旀墭鍗曚綅鍙栧洖/1瀹為獙瀹ゅ鐞嗭紱鏈�夋椂娌跨敤鏃у瓧娈�
+ if (Integer.valueOf(1).equals(order.getSampleDisposal())) {
+ inspectionOrder.setProcessing(0);
+ } else if (Integer.valueOf(2).equals(order.getSampleDisposal())) {
+ inspectionOrder.setProcessing(1);
+ } else {
+ inspectionOrder.setProcessing(order.getProcessing());
+ }
+ // 鎶ュ憡浜や粯鏂瑰紡锛�1鑷彇 -> send 1锛屽叾浣� 0锛涙湭閫夋椂娌跨敤鏃у瓧娈�
+ if (order.getReportDelivery() != null) {
+ inspectionOrder.setSend(Integer.valueOf(1).equals(order.getReportDelivery()) ? 1 : 0);
+ } else {
+ inspectionOrder.setSend(order.getSend());
+ }
+ // 鎶ュ憡鏂囦欢涓庣害瀹氭椂闂寸敓鎴愭椂涓虹┖锛屽悗缁湪妫�楠屽鎵樺崟椤甸潰缂栬緫/涓婁紶
+ inspectionOrderMapper.insert(inspectionOrder);
+ }
+}
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..8156b3a
--- /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..cfce5b9
--- /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..96cee33
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderMapper.java
@@ -0,0 +1,41 @@
+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;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <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..7941190
--- /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..82913de
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessDealMapper.java
@@ -0,0 +1,27 @@
+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.ProcessDealDto;
+import com.ruoyi.process.pojo.ProcessDeal;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <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);
+
+ List<ProcessDealDto> selectDeal(@Param("id") Integer id);
+
+}
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..85945d1
--- /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..9d7b089
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewBackupsMapper.java
@@ -0,0 +1,27 @@
+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;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <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, @Param("ew") 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/ProcessOrderDeviceMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessOrderDeviceMapper.java
new file mode 100644
index 0000000..03a5302
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessOrderDeviceMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.process.pojo.ProcessOrderDevice;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛�(7.1妫�楠屽鎵樺崟) Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:51:48
+ */
+public interface ProcessOrderDeviceMapper extends BaseMapper<ProcessOrderDevice> {
+
+ Set<String> selectDeviceNumber(@Param("inspectionOrderId") Integer inspectionOrderId);
+
+ List<Integer> selectDeviceIdsByNumbers(@Param("deviceNumbers") Set<String> deviceNumbers);
+
+ IPage<ProcessOrderDevice> deviceRecordPage(@Param("deviceId") Integer deviceId, @Param("page") Page page, @Param("sampleCode") String sampleCode, @Param("managementNumber") String managementNumber);
+}
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..75bd9ac
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessReportMapper.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.dto.ProcessReportDto;
+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<ProcessReportDto> pageProcessReport(Page page, @Param("ew") QueryWrapper<ProcessReportDto> queryWrappers);
+
+ List<ProcessReportDto> exportProcessReport();
+}
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..14accb4
--- /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/ProcessTotaldealMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotaldealMapper.java
new file mode 100644
index 0000000..12a6189
--- /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..22bb9a7
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsMapper.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.QualityMonitorDetailsDto;
+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<QualityMonitorDetailsDto> 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/QualitySuperviseManagementReviewMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseManagementReviewMapper.java
new file mode 100644
index 0000000..7a0ae0c
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseManagementReviewMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.process.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璐ㄩ噺鐩戠潱绠$悊璇勫杈撳叆鏉愭枡 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2025-05-07 10:46:11
+ */
+public interface QualitySuperviseManagementReviewMapper extends BaseMapper<QualitySuperviseManagementReview> {
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @param page
+ * @return
+ */
+ IPage<QualitySuperviseManagementReview> pageManagementReview(@Param("page") Page page, @Param("ew") QueryWrapper<QualitySuperviseManagementReview> ew);
+}
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..2f90322
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistribution.java
@@ -0,0 +1,44 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 09:53:20
+ */
+
+@Data
+@TableName("cnas_inconsistent_distribution")
+@Schema(description = "涓嶇鍚堥」鐨勫垎甯�")
+public class InconsistentDistribution {
+
+ @TableId(value = "distribution_id", type = IdType.AUTO)
+ private Integer distributionId;
+
+ @Schema(description = "骞翠唤")
+ private String distributionYear;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..f637872
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java
@@ -0,0 +1,73 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "涓嶇鍚堥」鐨勫垎甯冭鎯�")
+public class InconsistentDistributionDetail {
+
+ @TableId(value = "distribution_detail_id", type = IdType.AUTO)
+ private Integer distributionDetailId;
+
+ @Schema(description = "涓昏〃id")
+ private Integer distributionId;
+
+ @Schema(description = "绔犺妭鍙�")
+ private String chapterNumber;
+
+ @Schema(description = "瑕佺礌")
+ private String essentials;
+
+ @Schema(description = "涓讳换")
+ private Integer director;
+
+ @Schema(description = "鎶�鏈礋璐d汉")
+ private Integer technology;
+
+ @Schema(description = "璐ㄩ噺璐熻矗浜�")
+ private Integer quality;
+
+ @Schema(description = "缁煎悎瀹�")
+ private Integer comprehensive;
+
+ @Schema(description = "璇曢獙瀹�")
+ private Integer testing;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍚堣")
+ @TableField(select = false,exist = false)
+ private Integer total;
+
+ @Schema(description = "鍗犳瘮")
+ @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..3a0a6f3
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrder.java
@@ -0,0 +1,109 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "妫�楠屽鎵樺崟")
+public class InspectionOrder {
+
+ @TableId(value = "inspection_order_id", type = IdType.AUTO)
+ private Integer inspectionOrderId;
+
+ @Schema(description = "鎴愬搧璁㈠崟id")
+ private Integer insOrderId;
+
+ @Schema(description = "濮旀墭缂栧彿")
+ private String entrustCode;
+
+ @Schema(description = "璇曟牱鍚嶇О")
+ private String sampleName;
+
+ @Schema(description = "鍨嬪彿")
+ private String modelNo;
+
+ @Schema(description = "鐢熶骇鍗曚綅")
+ private String production;
+
+ @Schema(description = "鏍峰搧鏁伴噺")
+ private String quantity;
+
+ @Schema(description = "濮旀墭鏃堕棿")
+ private LocalDate commissionDate;
+
+ @Schema(description = "濮旀墭鍗曚綅")
+ private String commissionUnit;
+
+ @Schema(description = "濮旀墭浜�")
+ private String commissionUser;
+
+ @Schema(description = "濮旀墭浜鸿仈绯绘柟寮�")
+ private String commissionPhone;
+
+ @Schema(description = "鏍峰搧鐘舵��")
+ private String sampleStatus;
+
+ @Schema(description = "鏄惁鐣欐牱1: 鏄�, 2:鍚�")
+ private Integer isLeave;
+
+ @Schema(description = "鏍峰搧澶勭悊鏂瑰紡 1锛氬疄楠屽澶勭悊 0锛氬鎵樺崟浣嶅彇鍥�")
+ private Integer processing;
+
+ @Schema(description = "绾﹀畾鏃堕棿")
+ private LocalDate appointed;
+
+ @Schema(description = "鎶ュ憡鍙戦�佹柟寮� 1锛氳嚜鍙� 0锛氬叾浠�")
+ private Integer send;
+
+ @Schema(description = "鍒ゆ柇瑙勫垯 1锛氳�冭檻涓嶇‘瀹氬害 0锛氫笉鑰冭檻涓嶇‘瀹氬害")
+ private Integer criterionRule;
+
+ @Schema(description = "鍒ゆ柇瑙勫垯鑰冭檻涓嶇‘瀹氬害澶囨敞")
+ private String criterionRuleRemark;
+
+ @Schema(description = "缁煎悎瀹や汉鍛�")
+ private String generalOfficeUser;
+
+ @Schema(description = "鎺ユ敹鏃ユ湡")
+ private LocalDate receiptData;
+
+ @Schema(description = "棰嗘牱浜哄憳")
+ private String sampleTakerUser;
+
+ @Schema(description = "棰嗘牱鏃ユ湡")
+ private LocalDate sampleData;
+
+ @Schema(description = "鎶ュ憡鏂囦欢鍦板潃")
+ private String fileUrl;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..44c7542
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrderDetail.java
@@ -0,0 +1,61 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 妫�楠屽鎵樺崟璇︽儏琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-09
+ */
+@Getter
+@Setter
+@TableName("cnas_inspection_order_detail")
+@Schema(description = "妫�楠屽鎵樺崟璇︽儏琛�")
+public class InspectionOrderDetail {
+
+ @TableId(value = "inspection_order_detail_id", type = IdType.AUTO)
+ private Integer inspectionOrderDetailId;
+
+ @Schema(description = "濮旀墭鍗昳d")
+ private Integer inspectionOrderId;
+
+ @Schema(description = "鏍峰搧缂栧彿")
+ private String sampleNumber;
+
+ @Schema(description = "璇曢獙椤圭洰")
+ private String testItem;
+
+ @Schema(description = "璇曢獙渚濇嵁")
+ private String testStandard;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..1e890ff
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessComplain.java
@@ -0,0 +1,141 @@
+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.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "鎶曡瘔")
+public class ProcessComplain implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ @ExcelIgnore
+ private Integer id;
+
+ @Schema(description = "鎶曡瘔缂栧彿")
+ @ExcelIgnore
+ private String complainNo;
+
+ @Schema(description = "鎶曡瘔鍚嶇О")
+ @ExcelProperty(value = "鎶曡瘔鍚嶇О")
+ private String complainName;
+
+ @Schema(description = "澶栭敭鍏宠仈(妫�娴嬫姤鍛奿d)")
+ @ExcelIgnore
+ private Integer insReportId;
+
+ @ExcelIgnore
+ @TableField(select = false,exist = false)
+ //鐢ㄦ潵鏂板浼犲弬鐨勬姤鍛婄紪鍙�
+ private String code;
+
+ @Schema(description = "鏍峰搧缂栧彿")
+ @ExcelIgnore
+ private String sampleCode;
+
+ @Schema(description = "鎶曡瘔浜�")
+ @TableField(fill = FieldFill.INSERT)
+ @ExcelIgnore
+ private Integer createUser;
+
+ @ExcelProperty(value = "鎶曡瘔浜�")
+ @TableField(select = false,exist = false)
+ private String complainant;
+
+ @Schema(description = "鎶曡瘔鏃ユ湡")
+ @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;
+
+ @Schema(description = "鎶曡瘔鏂瑰紡")
+ @ExcelIgnore
+ private String complainMethod;
+
+ @Schema(description = "闂璁板綍")
+ @ExcelIgnore
+ private String problemRecords;
+
+ @Schema(description = "闂璁板綍-璐ㄩ噺璐熻矗浜�")
+ @ExcelIgnore
+ private Integer problemRecordsUser;
+
+ @Schema(description = "闂璁板綍-鏃ユ湡")
+ @ExcelIgnore
+ private LocalDate problemRecordsTime;
+
+ @Schema(description = "璐d换褰掑睘鍙婃姇璇夋槸鍚︽垚绔�")
+ @ExcelIgnore
+ private String dutyOwnership;
+
+ @Schema(description = "璐d换褰掑睘鍙婃姇璇夋槸鍚︽垚绔媉璐ㄩ噺璐熻矗浜�")
+ @ExcelIgnore
+ private Integer dutyOwnershipUser;
+
+ @Schema(description = "璐d换褰掑睘鍙婃姇璇夋槸鍚︽垚绔媉鏃ユ湡")
+ @ExcelIgnore
+ private LocalDate dutyOwnershipTime;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽")
+ @ExcelIgnore
+ private String causeAnalysis;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽_璐d换閮ㄩ棬璐熻矗浜�")
+ @ExcelIgnore
+ private Integer causeAnalysisUser;
+
+ @Schema(description = "鍘熷洜鍒嗘瀽_鏃ユ湡")
+ @ExcelIgnore
+ private LocalDate causeAnalysisTime;
+
+ @Schema(description = "绾犳鎺柦")
+ @ExcelIgnore
+ private String correctiveAction;
+
+ @Schema(description = "绾犳鎺柦_璐d换閮ㄩ棬璐熻矗浜�")
+ @ExcelIgnore
+ private Integer correctiveActionUser;
+
+ @Schema(description = "绾犳鎺柦_鏃ユ湡")
+ @ExcelIgnore
+ private LocalDate correctiveActionTime;
+
+ @Schema(description = "绾犳鎺柦纭")
+ @ExcelIgnore
+ private String correctiveActionConfirmation;
+
+ @Schema(description = "绾犳鎺柦纭_璐ㄩ噺璐熻矗浜�")
+ @ExcelIgnore
+ private Integer correctiveActionConfirmationUser;
+
+ @Schema(description = "绾犳鎺柦纭_鏃ユ湡")
+ @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..5d05b6e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessDeal.java
@@ -0,0 +1,75 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�")
+public class ProcessDeal implements Serializable {
+
+
+ @Schema(description = "涓婚敭")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏍峰搧鍚嶇О")
+ private String sampleName;
+
+ @Schema(description = "鏍峰搧缂栧彿")
+ private String sampleCode;
+
+ @Schema(description = "渚涙牱鍗曚綅")
+ private String sampleSupplier;
+
+ @Schema(description = "鏁伴噺")
+ private Integer num;
+
+ @Schema(description = "澶勭悊鏂瑰紡")
+ private String dealMethod;
+
+ @Schema(description = "鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate dealTime;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍏宠仈鐨勫巻鍙叉�昏〃id")
+ private Integer totaldealId;
+
+ @Schema(description = "鍏宠仈鐨勫巻鍙插缃牱鍝乮d")
+ private Integer processSampleId;
+
+ @Schema(description = "鍏宠仈鐨勬楠屾牱鍝乮d(ins_sample)")
+ private Integer insSampleId;
+}
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..417d67c
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessEvaluate.java
@@ -0,0 +1,73 @@
+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.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "娴嬮噺涓嶇‘瀹氬害鐨勮瘎浠�")
+public class ProcessEvaluate implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ @ExcelIgnore
+ private Integer id;
+
+ @Schema(description = "鎶ュ憡鍚嶇О")
+ @ExcelProperty(value = "鎶ュ憡鍚嶇О")
+ private String reportName;
+
+ @Schema(description = "鎶ュ憡璺緞")
+ @ExcelIgnore
+ private String reportUrl;
+
+ @Schema(description = "璇勪环浜�")
+ @ExcelIgnore
+ private Integer evaluateUser;
+
+ @TableField(select = false,exist = false)
+ @ExcelProperty(value = "璇勪环浜�")
+ private String evaluateUserName;
+
+ @Schema(description = "璇勪环鏃ユ湡")
+ @ExcelProperty(value = "璇勪环鏃ユ湡")
+ private LocalDate evaluateTime;
+
+ @Schema(description = "澶囨敞")
+ @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..a5aaec6
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java
@@ -0,0 +1,69 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯鏌ユ柊
+ *
+ * @author zhuo
+ * @since 2024-11-04
+ */
+@Data
+@TableName("cnas_process_method_search_new")
+@Schema(description = "鏍囧噯鏌ユ柊琛�")
+public class ProcessMethodSearchNew {
+
+ @TableId(type = IdType.AUTO)
+ private Integer methodSearchNewId;
+
+ @Schema(description = "鏍囧噯鏂规硶楠岃瘉id")
+ private Integer verifyId;
+
+ @Schema(description = "鏍囧噯鍚嶇О")
+ private String methodName;
+
+ @Schema(description = "鏍囧噯鍙�")
+ private String standardNo;
+
+ @Schema(description = "鏂囦欢缂栧彿")
+ private String fileNo;
+
+ @Schema(description = "鏄惁鏄柊鏍囧噯, 0鍚�,1鏄�")
+ private Integer isNewStandard;
+
+ @Schema(description = "鏂版爣鍑嗗悕绉�")
+ private String newMethodName;
+
+ @Schema(description = "鏂版爣鍑嗗彿")
+ private String newStandardNo;
+
+ @Schema(description = "鏌ユ柊璁板綍鏉ユ簮, 0,鏍囧噯缃�, 1濮旀墭鎯呮姤, 2鏍囧噯鏁�, 3鍏朵粬")
+ private Integer searchNewSource;
+
+ @Schema(description = "澶囨敞,0浣滃簾, 1鏇挎崲")
+ private Integer remark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..3093fed
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewArchived.java
@@ -0,0 +1,62 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "鏍囧噯鏌ユ柊瀛樻。琛�")
+public class ProcessMethodSearchNewArchived implements Serializable {
+
+ @TableId(value = "archived_id", type = IdType.AUTO)
+ private Integer archivedId;
+
+ @Schema(description = "瀛樻。鍚嶇О")
+ private String archivedName;
+
+ @Schema(description = "缂栧埗浜�")
+ private Integer writeUserId;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ private LocalDateTime writeTime;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鎵瑰噯鐘舵��,0 涓嶉�氳繃, 1 閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "鎵瑰噯淇℃伅")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @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..a503d88
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewBackups.java
@@ -0,0 +1,83 @@
+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.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "鏍囧噯鏌ユ柊澶囦唤琛�")
+public class ProcessMethodSearchNewBackups{
+
+ @TableId(value = "backups_id", type = IdType.AUTO)
+ private Integer backupsId;
+
+ @Schema(description = "瀛樻。id")
+ private Integer archivedId;
+
+ @Schema(description = "鏍囧噯鏂规硶楠岃瘉id")
+ private Integer verifyId;
+
+ @ExcelProperty(value = {"鏍囧噯鍚嶇О", "鏍囧噯鍚嶇О"}, index = 1)
+ @Schema(description = "鏍囧噯鍚嶇О")
+ private String methodName;
+
+ @ExcelProperty(value = {"鏍囧噯鍙�", "鏍囧噯鍙�"}, index = 2)
+ @Schema(description = "鏍囧噯鍙�")
+ private String standardNo;
+
+ @ExcelProperty(value = {"鏂囦欢缂栧彿", "鏂囦欢缂栧彿"}, index = 3)
+ @Schema(description = "鏂囦欢缂栧彿")
+ private String fileNo;
+
+ @Schema(description = "鏄惁鏄柊鏍囧噯, 0鍚�,1鏄�")
+ private Integer isNewStandard;
+
+ @ExcelProperty(value = {"鏂版爣鍑嗗悕绉�", "鏂版爣鍑嗗悕绉�"}, index = 5)
+ @Schema(description = "鏂版爣鍑嗗悕绉�")
+ private String newMethodName;
+
+ @ExcelProperty(value = {"鏂版爣鍑嗗彿", "鏂版爣鍑嗗彿"}, index =6)
+ @Schema(description = "鏂版爣鍑嗗彿")
+ private String newStandardNo;
+
+ @Schema(description = "鏌ユ柊璁板綍鏉ユ簮, 0,鏍囧噯缃�, 1濮旀墭鎯呮姤, 2鏍囧噯鏁�, 3鍏朵粬")
+ private Integer searchNewSource;
+
+ @Schema(description = "澶囨敞,0浣滃簾, 1鏇挎崲")
+ private Integer remark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..693471b
--- /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.v3.oas.annotations.media.Schema;
+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;
+
+ @Schema(description = "0鍙樻洿,1楠岃瘉")
+ private Integer operationType;
+
+ @Schema(description = "鏍囧噯鏂规硶")
+ private String methodName;
+
+ @Schema(description = "楠岃瘉鍘熷洜")
+ private String verifyReason;
+
+ @Schema(description = "涓昏鎶�鏈彉鍖�")
+ private String technologyChange;
+
+ @Schema(description = "(浜�)鏍囧噯瑕佹眰")
+ private String personRequirements;
+ @Schema(description = "(浜�)鍑嗗鎯呭喌")
+ private String personReadiness;
+ @Schema(description = "(浜�)鏄惁婊¤冻")
+ private Integer personIsSatisfied;
+ @Schema(description = "(浜�)澶囨敞")
+ private String personRemark;
+
+ @Schema(description = "(鏈�)鏍囧噯瑕佹眰")
+ private String machineRequirements;
+ @Schema(description = "(鏈�)鍑嗗鎯呭喌")
+ private String machineReadiness;
+ @Schema(description = "(鏈�)鏄惁婊¤冻")
+ private Integer machineIsSatisfied;
+ @Schema(description = "(鏈�)澶囨敞")
+ private String machineRemark;
+
+ @Schema(description = "(鏂�)鏍囧噯瑕佹眰")
+ private String materialRequirements;
+ @Schema(description = "(鏂�)鍑嗗鎯呭喌")
+ private String materialReadiness;
+ @Schema(description = "(鏂�)鏄惁婊¤冻")
+ private Integer materialIsSatisfied;
+ @Schema(description = "(鏂�)澶囨敞")
+ private String materialRemark;
+
+ @Schema(description = "(娉�)鏍囧噯瑕佹眰")
+ private String methodRequirements;
+ @Schema(description = "(娉�)鍑嗗鎯呭喌")
+ private String methodReadiness;
+ @Schema(description = "(娉�)鏄惁婊¤冻")
+ private Integer methodIsSatisfied;
+ @Schema(description = "(娉�)澶囨敞")
+ private String methodRemark;
+
+ @Schema(description = "(鐜�)鏍囧噯瑕佹眰")
+ private String environmentRequirements;
+ @Schema(description = "(鐜�)鍑嗗鎯呭喌")
+ private String environmentReadiness;
+ @Schema(description = "(鐜�)鏄惁婊¤冻")
+ private Integer environmentIsSatisfied;
+ @Schema(description = "(鐜�)澶囨敞")
+ private String environmentRemark;
+
+ @Schema(description = "(娴嬮噺婧簮鎬�)鏍囧噯瑕佹眰")
+ private String traceabilityRequirements;
+ @Schema(description = "(娴嬮噺婧簮鎬�)鍑嗗鎯呭喌")
+ private String traceabilityReadiness;
+ @Schema(description = "(娴嬮噺婧簮鎬�)鏄惁婊¤冻")
+ private Integer traceabilityIsSatisfied;
+ @Schema(description = "(娴嬮噺婧簮鎬�)澶囨敞")
+ private String traceabilityRemark;
+
+ @Schema(description = "(鏍峰搧绠$悊闇�姹�)鏍囧噯瑕佹眰")
+ private String managementRequirements;
+ @Schema(description = "(鏍峰搧绠$悊闇�姹�)鍑嗗鎯呭喌")
+ private String managementReadiness;
+ @Schema(description = "(鏍峰搧绠$悊闇�姹�)鏄惁婊¤冻")
+ private Integer managementIsSatisfied;
+ @Schema(description = "(鏍峰搧绠$悊闇�姹�)澶囨敞")
+ private String managementRemark;
+
+ @Schema(description = "(鍏朵粬)鏍囧噯瑕佹眰")
+ private String otherRequirements;
+ @Schema(description = "(鍏朵粬)鍑嗗鎯呭喌")
+ private String otherReadiness;
+ @Schema(description = "(鍏朵粬)鏄惁婊¤冻")
+ private Integer otherIsSatisfied;
+ @Schema(description = "(鍏朵粬)澶囨敞")
+ private String otherRemark;
+
+ @Schema(description = "纭鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime confirmDate;
+
+ @Schema(description = "纭浜哄憳")
+ private String confirmUser;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..1fb4d91
--- /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.v3.oas.annotations.media.Schema;
+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;
+ @Schema(description = "鏂规硶楠岃瘉id")
+ private Integer methodVerifyId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..8a05805
--- /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.v3.oas.annotations.media.Schema;
+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;
+
+ @Schema(description = "鏂规硶楠岃瘉id")
+ private Integer methodVerifyId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String machineName;
+
+ @Schema(description = "瑙勬牸鍨嬪彿")
+ private String machineSpecification;
+
+ @Schema(description = "绛栫暐鑼冨洿")
+ private String machineMeasuringRange;
+
+ @Schema(description = "鎵╁睍淇℃伅")
+ private String other;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..46b8dbe
--- /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.v3.oas.annotations.media.Schema;
+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;
+
+ @Schema(description = "鏂规硶楠岃瘉id")
+ private Integer methodVerifyId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..522c3df
--- /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.v3.oas.annotations.media.Schema;
+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;
+ @Schema(description = "鏂规硶楠岃瘉id")
+ private Integer methodVerifyId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鎸佹湁浜篿d")
+ private Integer userId;
+
+ @Schema(description = "鎸佹湁浜�")
+ private String userName;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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/ProcessOrderDevice.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessOrderDevice.java
new file mode 100644
index 0000000..3823fa7
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessOrderDevice.java
@@ -0,0 +1,68 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛�(7.1妫�楠屽鎵樺崟)
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:51:48
+ */
+@Getter
+@Setter
+@TableName("cnas_process_order_device")
+@Schema(description = "cnas璁惧浣跨敤璁板綍琛�(7.1妫�楠屽鎵樺崟)")
+public class ProcessOrderDevice implements Serializable {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ private Integer deviceId;
+
+ @Schema(description = "濮旀墭鍗昳d")
+ private Integer inspectionOrderId;
+
+ @Schema(description = "鏍峰搧缂栧彿")
+ private String sampleCode;
+
+ @Schema(description = "浣跨敤鍓�0浠h〃涓嶆甯�1浠h〃姝e父")
+ private Integer useBefore;
+
+ @Schema(description = "浣跨敤鍚�0浠h〃涓嶆甯�1浠h〃姝e父")
+ private Integer useAfter;
+
+ @Schema(description = "寮傚父鎯呭喌")
+ private String abnormal;
+
+ @Schema(description = "浣跨敤寮�濮嬫棩鏈�")
+ private LocalDateTime useStartDate;
+
+ @Schema(description = "浣跨敤浜篿d")
+ private Integer usePersonId;
+
+ @Schema(description = "浣跨敤浜�")
+ private String usePerson;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "浣跨敤缁撴潫鏃堕棿")
+ private LocalDateTime useEndDate;
+
+ @Schema(description = "璁惧鍚嶇О")
+ @TableField(select = false,exist = false)
+ private String deviceName;
+ @Schema(description = "璁惧缂栧彿")
+ @TableField(select = false,exist = false)
+ private String managementNumber;
+}
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..2996a4c
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessReport.java
@@ -0,0 +1,76 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃")
+public class ProcessReport implements Serializable {
+
+ @TableField(select = false,exist = false)
+ //瀵煎嚭搴忓彿
+ private Integer indexs;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "妫�楠屾姤鍛婄紪鍙�")
+ private String insReportCode;
+
+ @Schema(description = "椤垫暟")
+ private String pages;
+
+ @Schema(description = "鍙戦�佷唤鏁�")
+ private String number;
+
+ @Schema(description = "鍙戝線浣曞")
+ private String send;
+
+ @Schema(description = "鍙戦�佹柟寮�")
+ private String method;
+
+ @Schema(description = "鍙戦�佹棩鏈�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate sendTime;
+
+ @Schema(description = "鍙戦�佷汉")
+ private Integer sendUser;
+ @Schema(description = "绛炬敹浜�")
+ private String signatory;
+
+ @Schema(description = "澶囨敞")
+ 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;
+
+ @Schema(description = "濮旀墭鍗昳d")
+ private Integer inspectionOrderId;
+}
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..5c4f54c
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSample.java
@@ -0,0 +1,78 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "鏍峰搧鎺ユ敹")
+public class ProcessSample implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏍峰搧鍚嶇О")
+ private String sampleName;
+
+ @Schema(description = "鏍峰搧缂栧彿")
+ private String sampleCode;
+
+ @Schema(description = "鏉ユ牱鍗曚綅")
+ private String sampleSupplier;
+
+ @Schema(description = "鏍峰搧鏁伴噺")
+ private Integer num;
+
+ @Schema(description = "鏍峰搧鐘舵��")
+ 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;
+
+ @Schema(description = "濮旀墭鍗昳d")
+ private Integer inspectionOrderId;
+
+ @Schema(description = "鏀舵牱鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate receiveDate;
+
+ @Schema(description = "鐣欐牱鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate leaveDate;
+
+ @Schema(description = "閫�鏍风鏀�/澶勭悊鏃ユ湡")
+ @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/ProcessTotaldeal.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java
new file mode 100644
index 0000000..9bea483
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java
@@ -0,0 +1,62 @@
+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.v3.oas.annotations.media.Schema;
+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")
+@Schema(description = "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�昏〃(鍘嗗彶)")
+public class ProcessTotaldeal implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "瀹℃牳浜�")
+ private Integer examineUser;
+
+ @Schema(description = "瀹℃牳缁撴灉")
+ private String examineState;
+
+ @TableField(select = false, exist = false)
+ private String examineUserName;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer ratifyUser;
+
+ @Schema(description = "鎵瑰噯缁撴灉")
+ private String ratifyState;
+
+ @TableField(select = false, exist = false)
+ private String ratifyUserName;
+
+ @Schema(description = "鎻愪氦浜�")
+ private Integer submitUser;
+ @TableField(select = false, exist = false)
+ private String submitUserName;
+
+ @Schema(description = "鎻愪氦缁撴灉")
+ private String submitState;
+
+ @Schema(description = "鏈堜唤")
+ private String month;
+
+}
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..a56d3f8
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitor.java
@@ -0,0 +1,82 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Data
+@TableName("cnas_quality_monitor")
+@Schema(description = "璐ㄩ噺鐩戞帶璁″垝涓昏〃")
+public class QualityMonitor {
+
+ @TableId(type = IdType.AUTO)
+ private Integer qualityMonitorId;
+
+ @Schema(description = "璁″垝鍚嶇О")
+ private String monitorName;
+
+ @Schema(description = "璁″垝骞翠唤")
+ private String monitorYear;
+
+ @Schema(description = "澶栭敭锛氱敤鎴穒d锛堢紪鍒朵汉锛�")
+ private Integer writeUserId;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime writeTime;
+
+ @Schema(description = "澶栭敭锛氱敤鎴穒d锛堝鏍镐汉锛�")
+ private Integer examineUserId;
+
+ @Schema(description = "瀹℃牳鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime examineTime;
+
+ @Schema(description = "瀹℃牳鐘舵�� , 0 涓嶉�氳繃, 1閫氳繃")
+ private Integer examineStatus;
+
+ @Schema(description = "瀹℃牳鍐呭")
+ private String examineRemark;
+
+ @Schema(description = "澶栭敭锛氱敤鎴穒d锛堟壒鍑嗕汉锛�")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鎵瑰噯鐘舵��, 0 涓嶉�氳繃, 1閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "鎵瑰噯鍐呭")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..667aabe
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetails.java
@@ -0,0 +1,92 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Data
+@TableName("cnas_quality_monitor_details")
+@Schema(description = "璐ㄩ噺鐩戞帶璁″垝璇︽儏琛�")
+public class QualityMonitorDetails {
+
+ @TableId(type = IdType.AUTO)
+ private Integer qualityMonitorDetailsId;
+
+ @Schema(description = "鐩戞帶璁″垝id")
+ private Integer qualityMonitorId;
+
+ @Schema(description = "鐩戞帶鐩殑")
+ private String monitorPurpose;
+
+ @Schema(description = "璁″垝寮�灞曟椂闂�")
+ private String plannedTime;
+
+ @Schema(description = "鐩戞帶椤圭洰")
+ private String monitorProject;
+
+ @Schema(description = "鍙傚姞浜哄憳")
+ private String participant;
+
+ @Schema(description = "棰勭畻")
+ private String budget;
+
+ @Schema(description = "缁勭粐浜哄憳")
+ private String organization;
+
+ @Schema(description = "鐩戞帶鏂瑰紡")
+ private String monitorWay;
+
+ @Schema(description = "瀹屾垚鎶ュ憡鍦板潃")
+ private String finishReportUrl;
+
+ @Schema(description = "瀹屾垚鎶ュ憡缂栧啓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime writeTime;
+
+
+ @Schema(description = "瀹屾垚鎶ュ憡鎵瑰噯浜�")
+ private Integer ratifyUserId;
+
+ @Schema(description = "瀹屾垚鎶ュ憡鎵瑰噯鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "瀹屾垚鎶ュ憡鎵瑰噯鐘舵��, 0 涓嶉�氳繃, 1閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "瀹屾垚鎶ュ憡鎵瑰噯鍐呭")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..47a0666
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluate.java
@@ -0,0 +1,87 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Data
+@TableName("cnas_quality_monitor_details_evaluate")
+@Schema(description = "璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环琛�")
+public class QualityMonitorDetailsEvaluate {
+
+ @TableId(type = IdType.AUTO)
+ private Integer detailsEvaluateId;
+
+ @Schema(description = "鐩戞帶璁″垝璇︽儏id")
+ private Integer qualityMonitorDetailsId;
+
+ @Schema(description = "璇勫鐩殑")
+ private String reviewPurpose;
+
+ @Schema(description = "璇勫浜哄憳")
+ private String reviewUser;
+
+ @Schema(description = "璇勫鏃ユ湡")
+ private String reviewTime;
+
+ @Schema(description = "瀹炴柦鎯呭喌")
+ private String implementCondition;
+
+ @Schema(description = "瀹炴柦閮ㄩ棬")
+ private String implementDepartment;
+
+ @Schema(description = "瀹炴柦缁撴灉")
+ private String implementResult;
+
+ @Schema(description = "瀹炴柦鎶�鏈礋璐d汉")
+ private Integer implementUserId;
+
+ @Schema(description = "鎵瑰噯缁撹")
+ private String ratifyOpinion;
+
+ @Schema(description = "鎵瑰噯鎶�鏈礋璐d汉")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉�")
+ private Integer isFinish;
+
+ @Schema(description = "瀹炴柦鎶�鏈礋璐d汉鍚嶇О")
+ @TableField(exist = false,select = false)
+ private String implementName;
+
+ @Schema(description = "鎵瑰噯鎶�鏈礋璐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..d2ef6cf
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluateFile.java
@@ -0,0 +1,55 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_monitor_details_evaluate_file")
+@Schema(description = "璐ㄩ噺鐩戞帶璁″垝璇︽儏璇勪环闄勪欢琛�")
+public class QualityMonitorDetailsEvaluateFile {
+
+ @TableId(type = IdType.AUTO)
+ private Integer evaluateFileId;
+
+ @Schema(description = "璇勪环id")
+ private Integer detailsEvaluateId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..a29da16
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsRatify.java
@@ -0,0 +1,86 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戞帶璁″垝璇︽儏鎵瑰噯琛�
+ *
+ * @author zhuo
+ * @since 2024-11-06
+ */
+@Data
+@TableName("cnas_quality_monitor_details_ratify")
+@Schema(description = "璐ㄩ噺鐩戞帶璁″垝璇︽儏鎵瑰噯琛�")
+public class QualityMonitorDetailsRatify {
+
+ @TableId(type = IdType.AUTO)
+ private Integer detailsRatifyId;
+
+ @Schema(description = "鐩戞帶璁″垝璇︽儏id")
+ private Integer qualityMonitorDetailsId;
+
+ @Schema(description = "鐩戞帶椤圭洰")
+ private String monitorProject;
+
+ @Schema(description = "鐩戞帶鐩殑")
+ private String monitorPurpose;
+
+ @Schema(description = "鐩戞帶鏃堕棿")
+ private String monitorData;
+
+ @Schema(description = "鐩戞帶鏂规硶")
+ private String monitorMethod;
+
+ @Schema(description = "鍙傚姞浜哄憳")
+ private String participant;
+
+ @Schema(description = "杩囩▼鎺у埗")
+ private String processControl;
+
+ @Schema(description = "濡備綍璇勪环")
+ private String howEvaluate;
+
+ @Schema(description = "棰勭畻")
+ private String budget;
+
+ @Schema(description = "妫�娴嬮儴闂�")
+ private String inspectionDepartment;
+
+ @Schema(description = "鎵瑰噯鎰忚")
+ private String ratifyOpinion;
+
+ @Schema(description = "鎶�鏈礋璐d汉")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉�")
+ private Integer isFinish;
+
+ @Schema(description = "鎶�鏈礋璐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..78fd1d6
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySupervise.java
@@ -0,0 +1,79 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱涓昏〃
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise")
+@Schema(description = "璐ㄩ噺鐩戠潱涓昏〃")
+public class QualitySupervise {
+
+ @TableId(type = IdType.AUTO)
+ private Integer superviseId;
+
+ @Schema(description = "鐩戠潱鍚嶇О")
+ private String superviseName;
+
+ @Schema(description = "骞翠唤")
+ private String superviseYear;
+
+ @Schema(description = "鐩戠潱浜篿d(澶氫釜)")
+ private String recordUserIds;
+
+ @Schema(description = "澶栭敭锛氱敤鎴穒d锛堢紪鍒朵汉锛�")
+ private Integer writeUserId;
+
+ @Schema(description = "缂栧埗浜�")
+ private String writeUserName;
+
+ @Schema(description = "缂栧埗鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime writeTime;
+
+ @Schema(description = "澶栭敭锛氱敤鎴穒d锛堟壒鍑嗕汉锛�")
+ private Integer ratifyUserId;
+
+
+ @Schema(description = "鎵瑰噯浜�")
+ private String ratifyUserName;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鎵瑰噯鐘舵��, 0 涓嶉�氳繃, 1閫氳繃")
+ private Integer ratifyStatus;
+
+ @Schema(description = "鎵瑰噯鍐呭")
+ private String ratifyRemark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..3968983
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetails.java
@@ -0,0 +1,77 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise_details")
+@Schema(description = "璐ㄩ噺鐩戠潱璇︽儏琛�")
+public class QualitySuperviseDetails {
+
+ @TableId(type = IdType.AUTO)
+ private Integer superviseDetailsId;
+
+ @Schema(description = "鐩戠潱璁″垝id")
+ private Integer superviseId;
+
+ @Schema(description = "鐩戠潱鏃ユ湡")
+ private String superviseTime;
+
+ @Schema(description = "鐩戠潱鐩殑")
+ private String supervisePurpose;
+
+ @Schema(description = "鐩戠潱椤圭洰")
+ private String superviseProject;
+
+ @Schema(description = "琚洃鐫d汉id")
+ private Integer supervisedUserId;
+
+ @Schema(description = "琚洃鐫d汉")
+ private String supervisee;
+
+ @Schema(description = "鐩戠潱鍘熷洜")
+ private String superviseReason;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鐩戠潱鍛榠d")
+ private Integer recordUserId;
+
+ @Schema(description = "鐩戠潱鍛樺悕绉�")
+ private Integer recordUserName;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..2ecf175
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsAccording.java
@@ -0,0 +1,143 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏涓嶇鍚堥」鎺у埗琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise_details_according")
+@Schema(description = "璐ㄩ噺鐩戠潱璇︽儏涓嶇鍚堥」鎺у埗琛�")
+public class QualitySuperviseDetailsAccording {
+
+ @TableId(type = IdType.AUTO)
+ private Integer superviseDetailsAccordingId;
+
+ @Schema(description = "鐩戠潱璇︽儏id")
+ private Integer superviseDetailsId;
+
+ @Schema(description = "0鍙戠敓閮ㄩ棬")
+ private String occurrenceDepartment;
+
+ @Schema(description = "0閮ㄩ棬璐熻矗浜�")
+ private String headDepartment;
+
+ @Schema(description = "0鍙戠幇閫斿緞,0:绠$悊璇勫,1:鍐呴儴瀹℃牳,2:妫�娴嬭繃绋嬫帶鍒�,3:鍐呴儴璐ㄩ噺鎺у埗,4:鍐呴儴鐩戠潱,5:澶栭儴璇勫,6:澶栭儴鎶曡瘔,7:鍏朵粬")
+ private Integer findWay;
+
+ @Schema(description = "0涓嶇鍚堣褰曡鎯�")
+ private String recordDetail;
+
+ @Schema(description = "0涓嶅悎鏍艰褰曚緷鎹�")
+ private String recordAccording;
+
+ @Schema(description = "0鍙戠幇閮ㄩ棬")
+ private String foundDepartment;
+
+ @Schema(description = "0璁板綍浜篿d")
+ private Integer recordUserId;
+
+ @Schema(description = "0璁板綍浜�")
+ private String recordUserName;
+
+ @Schema(description = "0璁板綍鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate recordTime;
+
+ @Schema(description = "0琚洃鐫d汉id")
+ private Integer supervisedUserId;
+
+ @Schema(description = "0琚洃鐫d汉")
+ private String supervisedUserName;
+
+ @Schema(description = "0琚洃鐫f椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate supervisedTime;
+
+ @Schema(description = "1娓呴櫎涓嶇鍚堟帾鏂�")
+ private String eliminateMeasure;
+
+ @Schema(description = "1璐d换閮ㄩ棬")
+ private String responsibleDepartment;
+
+ @Schema(description = "1澶勭悊浜篿d")
+ private Integer actionsUserId;
+
+ @Schema(description = "1澶勭悊浜�")
+ private String actionsUserName;
+
+ @Schema(description = "1澶勭悊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate actionsTime;
+
+ @Schema(description = "2绾犳鎺柦鍐呭")
+ private String correctContent;
+
+ @Schema(description = "2鏄惁绾犳澶勭悊, 0鍚�, 1鏄�")
+ private Integer isCorrect;
+
+ @Schema(description = "2绾犳鎶�鏈礋璐d汉id")
+ private Integer correctUserId;
+
+ @Schema(description = "2绾犳鎶�鏈礋璐d汉")
+ private String correctUserName;
+
+ @Schema(description = "2绾犳濉啓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate correctTime;
+
+ @Schema(description = "3鏄惁閫氱煡瀹㈡埛, 0鍚�, 1鏄�")
+ private Integer notifyCustomer;
+
+ @Schema(description = "3鏄惁鎭㈠宸ヤ綔, 0鍚�, 1鏄�")
+ private Integer backToWork;
+
+ @Schema(description = "3璐ㄩ噺璐熻矗浜篿d")
+ private Integer qualityManagerUserId;
+
+ @Schema(description = "3璐ㄩ噺璐熻矗浜�")
+ private String qualityManagerUserName;
+
+ @Schema(description = "3璐ㄩ噺璐熻矗浜哄~鍐欐椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate qualityManagerTime;
+
+ @Schema(description = "鏄惁缁撴潫,0: 鏈粨鏉�, 1:缁撴潫")
+ private Integer isFinish;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer approverUserId;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @Schema(description = "娴佺▼, 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..d8cf576
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrect.java
@@ -0,0 +1,130 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏绾犳澶勭悊琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise_details_correct")
+@Schema(description = "璐ㄩ噺鐩戠潱璇︽儏绾犳澶勭悊琛�")
+public class QualitySuperviseDetailsCorrect {
+
+ @TableId(type = IdType.AUTO)
+ private Integer superviseDetailsCorrectId;
+
+ @Schema(description = "鐩戠潱璇︽儏id")
+ private Integer superviseDetailsId;
+
+ @Schema(description = "浜哄憳鍩硅璇︽儏Id")
+ private Integer personTrainingDetailedId;
+
+ @Schema(description = "0涓嶅悎鏍兼弿杩�")
+ private String raiseResult;
+
+ @Schema(description = "0vde涓撳鍙戠幇")
+ private String vdeRaiseResult;
+
+ @Schema(description = "0鎻愬嚭閮ㄩ棬")
+ private String raiseDepartment;
+
+ @Schema(description = "0鎻愬嚭浜篿d")
+ private Integer raiseUserId;
+
+ @Schema(description = "0鎻愬嚭浜�")
+ private String raiseUserName;
+
+ @Schema(description = "0鎻愬嚭鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate raiseTime;
+
+ @Schema(description = "1鍘熷洜鍒嗘瀽")
+ private String causeResult;
+
+ @Schema(description = "1鍘熷洜鍒嗘瀽璐d换閮ㄩ棬")
+ private String causeDepartment;
+
+ @Schema(description = "1鍘熷洜鍒嗘瀽浜篿d")
+ private Integer causeUserId;
+
+ @Schema(description = "1鍘熷洜鍒嗘瀽浜�")
+ private String causeUserName;
+
+ @Schema(description = "1鍘熷洜鍒嗘瀽鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate causeTime;
+
+ @Schema(description = "2绾犳鎺柦")
+ private String correctResult;
+
+ @Schema(description = "2鎻愬嚭閮ㄩ棬纭")
+ private String raiseDepartmentAffirm;
+
+ @Schema(description = "2绾犳璐d换閮ㄩ棬")
+ private String correctDepartment;
+
+ @Schema(description = "2绾犳浜篿d")
+ private Integer correctUserId;
+
+ @Schema(description = "2绾犳浜�")
+ private String correctUserName;
+
+ @Schema(description = "2绾犳鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate correctTime;
+
+ @Schema(description = "3楠岃瘉缁撴灉")
+ private String validationResult;
+
+ @Schema(description = "3楠岃瘉閮ㄩ棬")
+ private String validationDepartment;
+
+ @Schema(description = "3楠岃瘉浜篿d")
+ private Integer validationUserId;
+
+ @Schema(description = "3楠岃瘉浜�")
+ private String validationUserName;
+
+ @Schema(description = "3楠岃瘉鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate validationTime;
+
+ @Schema(description = "鏄惁缁撴潫, 0: 鏈粨鏉�, 1:宸茬粨鏉�")
+ private Integer isFinish;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private Integer approverUserId;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @Schema(description = "娴佺▼, 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..57ef54f
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrectFile.java
@@ -0,0 +1,55 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏绾犳鎺柦闄勪欢琛�
+ *
+ * @author zhuo
+ * @since 2024-11-09
+ */
+@Data
+@TableName("cnas_quality_supervise_details_correct_file")
+@Schema(description = "璐ㄩ噺鐩戠潱璇︽儏绾犳鎺柦闄勪欢琛�")
+public class QualitySuperviseDetailsCorrectFile {
+
+ @TableId(type = IdType.AUTO)
+ private Integer superviseDetailsCorrectFileId;
+
+ @Schema(description = "鐩戠潱璇︽儏绾犳鎺柦id")
+ private Integer superviseDetailsCorrectId;
+
+ @Schema(description = "绫诲瀷:1鍥剧墖/2鏂囦欢")
+ private Integer type;
+
+ @Schema(description = "闄勪欢璺緞")
+ private String fileUrl;
+
+ @Schema(description = "闄勪欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @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..40c9a13
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsRecord.java
@@ -0,0 +1,117 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 璐ㄩ噺鐩戠潱璇︽儏璁板綍琛�
+ *
+ * @author zhuo
+ * @since 2024-11-07
+ */
+@Data
+@TableName("cnas_quality_supervise_details_record")
+@Schema(description = "璐ㄩ噺鐩戠潱璇︽儏璁板綍琛�")
+public class QualitySuperviseDetailsRecord {
+
+ @TableId(type = IdType.AUTO)
+ private Integer superviseDetailsRecordId;
+
+ @Schema(description = "鐩戠潱璇︽儏id")
+ private Integer superviseDetailsId;
+
+ @Schema(description = "妫�娴嬩汉鍛�")
+ private String testMember;
+
+ @Schema(description = "鐩戠潱鍛�")
+ private String supervisor;
+
+ @Schema(description = "妫�娴嬮」鐩�")
+ private String testItem;
+
+ @Schema(description = "鏍峰搧缂栧彿")
+ private String sampleNumber;
+
+ @Schema(description = "妫�娴嬫棩鏈�")
+ private String testDate;
+
+ @Schema(description = "妫�娴嬭繃绋�")
+ private String testingProcess;
+
+ @Schema(description = "鎯呭喌璁板綍")
+ private String caseReload;
+
+ @Schema(description = "浜哄憳")
+ private String personnel;
+
+ @Schema(description = "浠櫒璁惧")
+ private String device;
+
+ @Schema(description = "鐜")
+ private String environment;
+
+ @Schema(description = "鏍峰搧閲囬泦")
+ private String sampleCollection;
+
+ @Schema(description = "鏍峰搧鍑嗗")
+ private String samplePreparation;
+
+ @Schema(description = "妫�娴嬫柟娉�")
+ private String detectionMethod;
+
+ @Schema(description = "妫�娴嬭褰�")
+ private String inspectionRecord;
+
+ @Schema(description = "妫�娴嬫姤鍛�")
+ private String examiningReport;
+
+ @Schema(description = "鐩戠潱鎯呭喌璇勪环")
+ private String supervisionEvaluation;
+
+ @Schema(description = "涓嶅悎鏍煎鐞嗘剰瑙�")
+ private String handlingAdvice;
+
+ @Schema(description = "鎵瑰噯缁撹")
+ private String ratifyOpinion;
+
+ @Schema(description = "鎵瑰噯鎶�鏈礋璐d汉")
+ private Integer ratifyUserId;
+
+ @Schema(description = "鎵瑰噯鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDateTime ratifyTime;
+
+ @Schema(description = "鏄惁绗﹀悎,0 涓嶇鍚�, 1绗﹀悎")
+ private Integer isAccording;
+
+ @Schema(description = "鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉�")
+ private Integer isFinish;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鎵瑰噯鎶�鏈礋璐d汉")
+ @TableField(exist = false,select = false)
+ private String ratifyUserName;
+
+}
+
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseManagementReview.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseManagementReview.java
new file mode 100644
index 0000000..fda7af3
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseManagementReview.java
@@ -0,0 +1,62 @@
+package com.ruoyi.process.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 璐ㄩ噺鐩戠潱绠$悊璇勫杈撳叆鏉愭枡
+ * </p>
+ *
+ * @author
+ * @since 2025-05-07 10:46:11
+ */
+@Getter
+@Setter
+@TableName("cnas_quality_supervise_management_review")
+@Schema(description = "璐ㄩ噺鐩戠潱绠$悊璇勫杈撳叆鏉愭枡")
+public class QualitySuperviseManagementReview implements Serializable {
+
+ @TableId(value = "management_review_id", type = IdType.AUTO)
+ private Integer managementReviewId;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String fileName;
+
+ @Schema(description = "璁″垝鍐呭")
+ private String implementationContent;
+
+ @Schema(description = "鍔ㄦ�佸唴瀹�")
+ private String dynamicContent;
+
+ @Schema(description = "鐩戠潱浜�")
+ private String supervisor;
+
+ @Schema(description = "璐ㄩ噺璇勫鏃ユ湡")
+ private LocalDate superviseDate;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
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..e48493f
--- /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..618417a
--- /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 jakarta.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..92b6593
--- /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 jakarta.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..d40fef9
--- /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 jakarta.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..18f18c9
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessDealService.java
@@ -0,0 +1,19 @@
+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> {
+}
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..7b5ef04
--- /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 jakarta.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..3aa46ce
--- /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 jakarta.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..3433a14
--- /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 jakarta.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/ProcessOrderDeviceService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessOrderDeviceService.java
new file mode 100644
index 0000000..949f455
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessOrderDeviceService.java
@@ -0,0 +1,19 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.process.pojo.ProcessOrderDevice;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛�(7.1妫�楠屽鎵樺崟) 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:51:48
+ */
+public interface ProcessOrderDeviceService extends IService<ProcessOrderDevice> {
+
+ IPage<ProcessOrderDevice> deviceRecordPage(Integer deviceId, Page page, String sampleCode, String managementNumber);
+}
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..731f955
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessReportService.java
@@ -0,0 +1,26 @@
+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.ProcessReportDto;
+import com.ruoyi.process.pojo.ProcessReport;
+
+import jakarta.servlet.http.HttpServletResponse;
+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<ProcessReportDto> pageProcessReport(Page page, ProcessReportDto processReport);
+
+ void exportProcessReport(ProcessReportDto dto, HttpServletResponse response);
+}
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..ad64577
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessSampleService.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.ProcessSample;
+
+import jakarta.servlet.http.HttpServletResponse;
+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);
+
+ void exportProcessSample(ProcessSample processSample, HttpServletResponse response);
+}
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..e792768
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotaldealService.java
@@ -0,0 +1,32 @@
+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 jakarta.servlet.http.HttpServletResponse;
+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);
+
+ int addProcessTotaldeal(String month);
+
+ void exportProcessTotaldeal(Integer id, HttpServletResponse response);
+}
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..29662c5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java
@@ -0,0 +1,161 @@
+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.QualityMonitorDetailsDto;
+import com.ruoyi.process.dto.QualityMonitorDto;
+import com.ruoyi.process.pojo.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.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<QualityMonitorDetailsDto> 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 qualityMonitorDetailsId
+ * @param file
+ * @return
+ */
+ boolean uploadEvaluateFile(Integer qualityMonitorDetailsId, MultipartFile file);
+
+ /**
+ * 鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃
+ * @return
+ */
+ List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer qualityMonitorDetailsId);
+
+
+ /**
+ * 瀵煎嚭鐩戞帶璇勪环
+ * @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/QualitySuperviseManagementReviewService.java b/cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseManagementReviewService.java
new file mode 100644
index 0000000..dd9e1fb
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseManagementReviewService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.process.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璐ㄩ噺鐩戠潱绠$悊璇勫杈撳叆鏉愭枡 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-05-07 10:46:11
+ */
+public interface QualitySuperviseManagementReviewService extends IService<QualitySuperviseManagementReview> {
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @param page
+ * @param managementReview
+ * @return
+ */
+ IPage<QualitySuperviseManagementReview> pageManagementReview(Page page, QualitySuperviseManagementReview managementReview);
+
+ /**
+ * 瀵煎嚭
+ * @param managementReviewId
+ * @param response
+ */
+ void exportManagementReview(Integer managementReviewId, HttpServletResponse response);
+}
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..9f67987
--- /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 jakarta.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..5ec8689
--- /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..0da882b
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
@@ -0,0 +1,232 @@
+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 jakarta.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();
+ inputStream.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..3bf8cd5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java
@@ -0,0 +1,439 @@
+package com.ruoyi.process.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+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.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.InsOrderDeviceRecordDto;
+import com.ruoyi.inspect.mapper.InsProductResultMapper;
+import com.ruoyi.inspect.mapper.InsSampleMapper;
+import com.ruoyi.inspect.pojo.*;
+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.mapper.ProcessOrderDeviceMapper;
+import com.ruoyi.process.mapper.ProcessSampleMapper;
+import com.ruoyi.process.pojo.*;
+import com.ruoyi.process.service.*;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.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.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <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 InsSampleMapper insSampleMapper;
+ @Resource
+ private InsReportService insReportService;
+ @Value("${wordUrl}")
+ private String wordUrl;
+ @Resource
+ private ProcessReportService processReportService;
+ @Resource
+ private ProcessOrderDeviceMapper processOrderDeviceMapper;
+ @Resource
+ private InsProductResultMapper insProductResultMapper;
+ @Resource
+ private ProcessOrderDeviceService processOrderDeviceService;
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private ProcessSampleService processSampleService;
+ @Resource
+ private ProcessSampleMapper processSampleMapper;
+ @Resource
+ private ProcessDealService processDealService;
+
+
+ /**
+ * 妫�楠屽鎵樺崟鍒嗛〉鏌ヨ
+ * @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());
+ }
+ /*鏂板7.8鎶ュ憡缁撴灉*/
+ ProcessReport processReport = new ProcessReport();
+ processReport.setInspectionOrderId(inspectionOrder.getInsOrderId());
+ processReport.setInsReportCode(inspectionOrder.getEntrustCode());//鎶ュ憡缂栧彿=濮旀墭缂栧彿
+ //椤垫暟
+ try {
+ com.aspose.words.Document doc = new com.aspose.words.Document(path);
+ processReport.setPages(doc.getPageCount()+"");
+ } catch (Exception e) {
+ }
+ processReport.setNumber("1");//鍙戦�佷唤鏁伴粯璁�1
+ processReport.setSend(inspectionOrder.getCommissionUnit());//鍙戝線浣曞=濮旀墭鍗曚綅
+ processReport.setMethod(inspectionOrder.getSend()==1?"鑷彇":"鍏朵粬");//鍙戦�佹柟寮�
+ processReport.setSendTime(insReport.getRatifyTime().toLocalDate());//鍙戦�佹棩鏈�
+ processReport.setSendUser(64);//鍙戦�佷汉鍥哄畾
+ processReport.setSignatory(inspectionOrder.getCommissionUser());//绛炬敹浜�=濮旀墭浜�
+ processReportService.save(processReport);
+ /*鏂板7.1濮旀墭鍗曞搴旂殑璁惧浣跨敤璁板綍*/
+ addDeviceRecord(inspectionOrder,insReport.getWriteUserId());
+ /*鏂板7.4鏍峰搧鎺ユ敹*/
+ List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getInsOrderId, inspectionOrder.getInsOrderId()));
+ if (insSamples.size()>0){
+ List<ProcessSample> processSamples = new ArrayList<>();
+ for (InsSample insSample : insSamples) {
+ ProcessSample processSample = new ProcessSample();
+ processSample.setReceiveDate(inspectionOrder.getSampleData());//鏀舵牱鏃ユ湡=棰嗘牱鏃ユ湡
+ processSample.setSampleCode(insSample.getSampleCode());//鏍峰搧缂栧彿
+ processSample.setSampleName(insSample.getSample());//鏍峰搧鍚嶇О
+ processSample.setNum(1);//鏍峰搧鏁伴噺=1
+ processSample.setSampleSupplier(inspectionOrder.getCommissionUnit());//鏉ユ牱鍗曚綅
+ LocalDate plusMonths = inspectionOrder.getSampleData() == null ? null : inspectionOrder.getSampleData().plusMonths(1);
+ processSample.setLeaveDate(plusMonths);//鐣欐牱鏃ユ湡=鏀舵牱鏃ユ湡寰�鍚庡欢涓�涓湀
+ processSample.setSampleState(inspectionOrder.getSampleStatus());//鏍峰搧鐘舵��
+ processSample.setDealTime(plusMonths);//閫�鏍锋棩鏈�=鐣欐牱鏃ユ湡
+ processSample.setInspectionOrderId(inspectionOrder.getInspectionOrderId());//濮旀墭鍗昳d
+ processSamples.add(processSample);
+ }
+ processSampleService.saveBatch(processSamples);
+ }
+ return true;
+ }
+
+ private synchronized void addDeviceRecord(InspectionOrder inspectionOrder,Integer userId) {
+ // 鏌ヨ璁惧浣跨敤璁板綍鏌ヨ璇ヨ鍗曠殑浣跨敤璁板綍
+ Set<String> recordCodeset = processOrderDeviceMapper.selectDeviceNumber(inspectionOrder.getInspectionOrderId());
+ // 鑾峰彇璁㈠崟璁惧缂栧彿
+ List<InsProductResult> resultList = insProductResultMapper.selectResultByOrderId(inspectionOrder.getInsOrderId());
+ Set<String> deviceCodeSet = new HashSet<>();
+ for (InsProductResult result : resultList) {
+ // 娣诲姞璁惧缂栧彿
+ List<JSONObject> jsonObjects = JSON.parseArray(result.getEquipValue(), JSONObject.class);
+ for (JSONObject jsonObject : jsonObjects) {
+ if (!"".equals(jsonObject.get("v") + "")) {
+ List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�");
+ deviceCodeSet.addAll(v);
+ }
+ }
+ }
+ // 1.鍒ゆ柇鏄惁鏈夋病鏈夋坊鍔犵殑浣跨敤璁板綍
+ Set<String> orderDeviceNumbers = getDeviceDifference(deviceCodeSet, recordCodeset);
+ // 娣诲姞浣跨敤璁板綍, 鏍规嵁缂栧彿鏌ヨ璁惧id
+ if (CollectionUtils.isNotEmpty(orderDeviceNumbers)) {
+ List<Integer> orderDeviceIds = processOrderDeviceMapper.selectDeviceIdsByNumbers(orderDeviceNumbers);
+ List<ProcessOrderDevice> collect = orderDeviceIds.stream().map(deviceId -> {
+ ProcessOrderDevice processOrderDevice = new ProcessOrderDevice();
+ processOrderDevice.setInspectionOrderId(inspectionOrder.getInspectionOrderId());
+ processOrderDevice.setDeviceId(deviceId);
+ processOrderDevice.setSampleCode(inspectionOrder.getEntrustCode());
+ processOrderDevice.setUseBefore(1);
+ processOrderDevice.setUseAfter(1);
+ processOrderDevice.setUsePerson(userMapper.selectById(userId).getName());//浣跨敤浜�
+ processOrderDevice.setUsePersonId(userId);//浣跨敤浜篿d
+ return processOrderDevice;
+ }).collect(Collectors.toList());
+ processOrderDeviceService.saveBatch(collect);
+ }
+ }
+
+ private static Set<String> getDeviceDifference(Set<String> number1, Set<String> number2) {
+ return number1.stream().filter(s1 -> number2.stream().noneMatch(s2 -> s1.equals(s2)))
+ .collect(Collectors.toSet());
+ }
+
+ /**
+ * 妫�楠屽鎵樺崟淇敼
+ * @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());
+
+ //淇敼7.9鎶ュ憡缁撴灉
+ ProcessReport processReport = processReportService.getOne(Wrappers.<ProcessReport>lambdaQuery().eq(ProcessReport::getInspectionOrderId, InspectionOrder.getInspectionOrderId()));
+ processReport.setInsReportCode(InspectionOrder.getEntrustCode());//鎶ュ憡缂栧彿=濮旀墭缂栧彿
+ processReportService.updateById(processReport);
+
+ return true;
+ }
+
+ /**
+ * 妫�楠屽鎵樺崟鍒犻櫎
+ * @param inspectionOrderId
+ * @return
+ */
+ @Override
+ public boolean delInspectionOrder(Integer inspectionOrderId) {
+ inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
+ .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId));
+ baseMapper.deleteById(inspectionOrderId);
+ //鍒犻櫎7.8鎶ュ憡
+ processReportService.remove(Wrappers.<ProcessReport>lambdaQuery()
+ .eq(ProcessReport::getInspectionOrderId, inspectionOrderId));
+ //鍒犻櫎瀵瑰簲鐨勮澶囦娇鐢ㄨ褰�
+ processOrderDeviceService.remove(Wrappers.<ProcessOrderDevice>lambdaQuery()
+ .eq(ProcessOrderDevice::getInspectionOrderId, inspectionOrderId));
+ //鍒犻櫎瀵瑰簲鐨�7.4鐨勬牱鍝佺敵璇�
+ List<ProcessSample> processSamples = processSampleMapper.selectList(Wrappers.<ProcessSample>lambdaQuery()
+ .eq(ProcessSample::getInspectionOrderId, inspectionOrderId));
+ if (processSamples.size()>0){
+ List<Integer> list = processSamples.stream().map(ProcessSample::getId).collect(Collectors.toList());
+ processDealService.remove(Wrappers.<ProcessDeal>lambdaQuery()
+ .in(ProcessDeal::getProcessSampleId,list));
+ }
+ //鍒犻櫎瀵瑰簲7.4鐨勬牱鍝佹帴鏀�
+ processSampleService.remove(Wrappers.<ProcessSample>lambdaQuery()
+ .eq(ProcessSample::getInspectionOrderId,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();
+ inputStream.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..6047c2a
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessComplainServiceImpl.java
@@ -0,0 +1,113 @@
+package com.ruoyi.process.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+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.basic.pojo.StandardTemplate;
+import com.ruoyi.common.numgen.NumberGenerator;
+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 jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.Date;
+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;
+
+ @Resource
+ private NumberGenerator<ProcessComplain> numberGenerator;
+
+
+ @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("鏍峰搧缂栧彿杈撳叆鏈夎");
+ }
+ //鎶曡瘔缂栧彿鐢熸垚
+ String giveCode = numberGenerator.generateNumberWithPrefix(3,
+ "JCZX-" + DateUtil.format(new Date(), "yyMMdd"),
+ ProcessComplain::getComplainNo);
+ 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..b884c65
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessDealServiceImpl.java
@@ -0,0 +1,36 @@
+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 jakarta.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 {
+
+}
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..a05ae6d
--- /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 jakarta.annotation.Resource;
+import jakarta.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..b257cff
--- /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 jakarta.annotation.Resource;
+import jakarta.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..b0438c0
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyServiceImpl.java
@@ -0,0 +1,455 @@
+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 jakarta.annotation.Resource;
+import jakarta.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();
+ inputStream.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/ProcessOrderDeviceServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessOrderDeviceServiceImpl.java
new file mode 100644
index 0000000..c92c389
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessOrderDeviceServiceImpl.java
@@ -0,0 +1,26 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.process.pojo.ProcessOrderDevice;
+import com.ruoyi.process.mapper.ProcessOrderDeviceMapper;
+import com.ruoyi.process.service.ProcessOrderDeviceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * cnas璁惧浣跨敤璁板綍琛�(7.1妫�楠屽鎵樺崟) 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:51:48
+ */
+@Service
+public class ProcessOrderDeviceServiceImpl extends ServiceImpl<ProcessOrderDeviceMapper, ProcessOrderDevice> implements ProcessOrderDeviceService {
+
+ @Override
+ public IPage<ProcessOrderDevice> deviceRecordPage(Integer deviceId, Page page, String sampleCode, String managementNumber) {
+ return baseMapper.deviceRecordPage(deviceId, page, sampleCode, managementNumber);
+ }
+}
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..e863d8f
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
@@ -0,0 +1,109 @@
+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.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.*;
+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.common.utils.SignatureImageUtil;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.process.dto.ProcessReportDto;
+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 jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+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("${file.path}")
+ private String imgUrl;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Override
+ public IPage<ProcessReportDto> pageProcessReport(Page page, ProcessReportDto processReport) {
+ IPage<ProcessReportDto> processReportIPage = processReportMapper.pageProcessReport(page, QueryWrappers.queryWrappers(processReport));
+
+ return processReportIPage;
+ }
+
+ @Override
+ public void exportProcessReport(ProcessReportDto dto, HttpServletResponse response) {
+ List<ProcessReportDto> processReports = processReportMapper.exportProcessReport();
+ for (ProcessReportDto processReport : processReports) {
+ // 鍙戦�佷汉鐢熸垚绛惧悕鍥剧墖
+ processReport.setSendUserRender(StringUtils.isNotBlank(processReport.getSendUserUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + processReport.getSendUserUrl()).create() : null);
+
+ // 绛炬敹浜虹敓鎴愬浘鐗�
+ processReport.setSignatoryRender(StringUtils.isNotBlank(processReport.getSignatory())
+ ? Pictures.ofStream(SignatureImageUtil.saveImageToFile(processReport.getSignatory())).create() : null);
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/report-deal.docx");
+ Configure configure = Configure.builder()
+ .bind("reportList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("reportList", processReports);
+ }});
+ 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();
+ inputStream.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
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..be55184
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessSampleServiceImpl.java
@@ -0,0 +1,70 @@
+package com.ruoyi.process.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.FilePictureRenderData;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.process.mapper.ProcessSampleMapper;
+import com.ruoyi.process.pojo.ProcessSample;
+import com.ruoyi.process.service.ProcessSampleService;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.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-12-12 05:02:49
+ */
+@Service
+public class ProcessSampleServiceImpl extends ServiceImpl<ProcessSampleMapper, ProcessSample> implements ProcessSampleService {
+
+ @Resource
+ private ProcessSampleMapper processSampleMapper;
+
+ @Override
+ public IPage<ProcessSample> pageProcessSample(Page page, ProcessSample processSample) {
+ return processSampleMapper.pageProcessSample(page, QueryWrappers.queryWrappers(processSample));
+ }
+
+ @Override
+ public void exportProcessSample(ProcessSample processSample, HttpServletResponse response) {
+ List<ProcessSample> processSampleList = pageProcessSample(new Page(-1, -1), processSample).getRecords();
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/sample-receive.docx");
+ Configure configure = Configure.builder()
+ .bind("sampleList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("sampleList", processSampleList);
+ }});
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
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..edd9efa
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java
@@ -0,0 +1,274 @@
+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.inspect.mapper.InsOrderMapper;
+import com.ruoyi.inspect.mapper.InsSampleMapper;
+import com.ruoyi.inspect.mapper.InsSampleReceiptMapper;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsSample;
+import com.ruoyi.inspect.pojo.InsSampleReceipt;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import org.apache.commons.lang3.StringUtils;
+import com.ruoyi.process.dto.ProcessDealDto;
+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.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.security.core.parameters.P;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.YearMonth;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * <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 ProcessDealService processDealService;
+
+ @Resource
+ private ProcessDealMapper processDealMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Resource
+ private InsOrderMapper insOrderMapper;
+
+ @Resource
+ private InsSampleMapper insSampleMapper;
+
+ @Resource
+ private InsSampleReceiptMapper insSampleReceiptMapper;
+
+ @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("宸叉彁浜�");
+ 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);
+ if (state.equals("涓嶉�氳繃")) {
+ processTotaldeal.setSubmitState("寰呮彁浜�");
+ }
+ 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);
+ if (state.equals("涓嶉�氳繃")) {
+ processTotaldeal.setExamineState(state);
+ processTotaldeal.setSubmitState("寰呮彁浜�");
+ }
+ return processTotaldealMapper.updateById(processTotaldeal);
+ }
+
+ @Override
+ public int addProcessTotaldeal(String month) {
+ //鏂板鎬昏〃锛堝悓涓�鏈堜唤澶嶇敤宸叉湁鎬昏〃锛�
+ ProcessTotaldeal processTotaldeal;
+ List<ProcessTotaldeal> processTotaldeals = processTotaldealMapper.selectList(Wrappers.<ProcessTotaldeal>lambdaQuery()
+ .eq(ProcessTotaldeal::getMonth, month));
+ if (processTotaldeals.size() <= 0) {
+ processTotaldeal = new ProcessTotaldeal();
+ processTotaldeal.setMonth(month);//鏈堜唤
+ processTotaldeal.setSubmitState("寰呮彁浜�");
+ processTotaldealMapper.insert(processTotaldeal);
+ } else {
+ processTotaldeal = processTotaldeals.get(0);
+ }
+ //1.鑾峰彇璇ユ湀浠界殑绗竴澶╁拰鏈�鍚庝竴澶�
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+ YearMonth yearMonth = YearMonth.parse(month, formatter);
+ LocalDateTime startTime = yearMonth.atDay(1).atStartOfDay();
+ LocalDateTime endTime = yearMonth.atEndOfMonth().atTime(LocalTime.MAX);
+ //2.璇ユ湀涓嬪崟鐨勫鎵樺崟锛堟帓闄ゅ師鏉愭枡锛宼ypeSource 涓虹┖瑙嗕负鎴愬搧锛�
+ List<InsOrder> orders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery()
+ .ge(InsOrder::getCreateTime, startTime)
+ .le(InsOrder::getCreateTime, endTime));
+ if (orders.isEmpty()) {
+ return 0;
+ }
+ //3.鍙繚鐣欏凡鐢熸垚鏍峰搧鎺ユ敹璁板綍鐨勫鎵橈紙宸插鏍稿彈鐞嗭級
+ List<Integer> orderIds = orders.stream().map(InsOrder::getId).collect(Collectors.toList());
+ List<InsSampleReceipt> receipts = insSampleReceiptMapper.selectList(Wrappers.<InsSampleReceipt>lambdaQuery()
+ .in(InsSampleReceipt::getInsOrderId, orderIds));
+ Set<Integer> receiptOrderIds = receipts.stream().map(InsSampleReceipt::getInsOrderId).collect(Collectors.toSet());
+ Map<Integer, InsOrder> orderMap = orders.stream()
+ .filter(order -> !Integer.valueOf(1).equals(order.getTypeSource()))
+ .filter(order -> receiptOrderIds.contains(order.getId()))
+ .collect(Collectors.toMap(InsOrder::getId, order -> order, (a, b) -> a));
+ if (orderMap.isEmpty()) {
+ return 0;
+ }
+ //4.濮旀墭瀵瑰簲鐨勬牱鍝�
+ List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+ .in(InsSample::getInsOrderId, orderMap.keySet()));
+ if (samples.isEmpty()) {
+ return 0;
+ }
+ //5.宸茶繘鍏ヤ换浣曞缃壒娆$殑鏍峰搧璺宠繃锛堣法鏈堜篃涓嶄細閲嶅甯﹀叆锛�
+ List<Integer> sampleIds = samples.stream().map(InsSample::getId).collect(Collectors.toList());
+ Set<Integer> dealtSampleIds = processDealService.list(Wrappers.<ProcessDeal>lambdaQuery()
+ .select(ProcessDeal::getInsSampleId)
+ .in(ProcessDeal::getInsSampleId, sampleIds))
+ .stream().map(ProcessDeal::getInsSampleId).filter(Objects::nonNull).collect(Collectors.toSet());
+ List<ProcessDeal> processDeals = new ArrayList<>();
+ for (InsSample insSample : samples) {
+ if (dealtSampleIds.contains(insSample.getId())) {
+ continue;
+ }
+ InsOrder order = orderMap.get(insSample.getInsOrderId());
+ ProcessDeal processDeal = new ProcessDeal();
+ //鏍峰搧鍚嶇О浼樺厛鍙栨姤鍛婂睍绀哄瓧娈�
+ processDeal.setSampleName(order != null && StringUtils.isNotBlank(order.getSampleView())
+ ? order.getSampleView() : insSample.getSample());
+ processDeal.setSampleCode(insSample.getSampleCode());//鏍峰搧缂栧彿
+ processDeal.setSampleSupplier(order == null ? null : order.getCompany());//渚涙牱鍗曚綅=濮旀墭鍗曚綅
+ processDeal.setNum(insSample.getQuantity() == null ? 1 : insSample.getQuantity());//鏍峰搧鏁伴噺
+ processDeal.setDealMethod(resolveDealMethod(order));//澶勭悊鏂瑰紡=涓嬪崟鏃堕�夋嫨鐨勬牱鍝佸缃�
+ processDeal.setDealTime(LocalDate.now());//鏃堕棿=褰撳墠鏃堕棿
+ processDeal.setTotaldealId(processTotaldeal.getId());//鎬昏〃id
+ processDeal.setInsSampleId(insSample.getId());//妫�楠屾牱鍝乮d
+ processDeals.add(processDeal);
+ }
+ if (!processDeals.isEmpty()) {
+ processDealService.saveBatch(processDeals);
+ }
+ return processDeals.size();
+ }
+
+ /**
+ * 澶勭悊鏂瑰紡锛氫笅鍗曟椂鐨勬牱鍝佸缃� 1濮旀墭鏂瑰彇鍥� 2妫�娴嬫柟澶勭疆锛涘巻鍙插崟鏃犺瀛楁鏃跺洖閫�鏃х殑澶勭悊鏂瑰紡瀛楁
+ */
+ private String resolveDealMethod(InsOrder order) {
+ if (order == null) {
+ return StringUtils.EMPTY;
+ }
+ if (Integer.valueOf(1).equals(order.getSampleDisposal())) {
+ return "濮旀墭鍗曚綅鍙栧洖";
+ }
+ if (Integer.valueOf(2).equals(order.getSampleDisposal())) {
+ return "瀹為獙瀹ゅ鐞�";
+ }
+ return Integer.valueOf(1).equals(order.getProcessing()) ? "瀹為獙瀹ゅ鐞�" : "濮旀墭鍗曚綅鍙栧洖";
+ }
+
+ @Override
+ public void exportProcessTotaldeal(Integer id, HttpServletResponse response) {
+ List<ProcessDealDto> sampleDealDtos = processDealMapper.selectDeal(id);
+ ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id);
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/sample-deal.docx");
+ Configure configure = Configure.builder()
+ .bind("sampleList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("sampleList", sampleDealDtos);
+ put("writeUrl",UserUtils.getFinalUserSignatureUrl(processTotaldeal.getSubmitUser()));//鎻愪氦浜�
+ put("examineUrl", UserUtils.getFinalUserSignatureUrl(processTotaldeal.getExamineUser()));//瀹℃牳浜�
+ put("ratifyUrl", UserUtils.getFinalUserSignatureUrl(processTotaldeal.getRatifyUser()));//鎵瑰噯浜�
+ }});
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
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..a559f4b
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java
@@ -0,0 +1,835 @@
+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.constant.MenuJumpPathConstants;
+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.device.pojo.DeviceExamineRecord;
+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.QualityMonitorDetailsDto;
+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 jakarta.annotation.Resource;
+import jakarta.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(MenuJumpPathConstants.QUALITY_MONITOR);
+ 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(MenuJumpPathConstants.QUALITY_MONITOR);
+ 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<QualityMonitorDetailsDto> 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();
+ inputStream.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(MenuJumpPathConstants.QUALITY_MONITOR);
+ 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);
+ }
+ });
+ }
+ // 娓呯┖鐘舵��
+ qualityMonitorDetailsRatifyService.update(Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate()
+ .eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId())
+ .set(QualityMonitorDetailsRatify::getIsFinish, null));
+ return true;
+ }
+
+ /**
+ * 鐩戞帶璁″垝璇︽儏鎵瑰噯鎰忚
+ * @param qualityMonitorDetailsRatify
+ * @return
+ */
+ @Override
+ public boolean addQualityMonitorRatifyOpinion(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
+ LambdaUpdateWrapper<QualityMonitorDetailsRatify> wrapper = Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate()
+ .eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId())
+ .set(QualityMonitorDetailsRatify::getRatifyOpinion, qualityMonitorDetailsRatify.getRatifyOpinion())
+ .set(QualityMonitorDetailsRatify::getIsFinish, qualityMonitorDetailsRatify.getIsFinish());
+ // 涓�0娓呴櫎瀹℃牳浜�
+ if (qualityMonitorDetailsRatify.getIsFinish().equals(0)) {
+ wrapper.set(QualityMonitorDetailsRatify::getRatifyUserId, null);
+ }
+
+ qualityMonitorDetailsRatifyService.update(wrapper);
+ 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();
+ inputStream.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(MenuJumpPathConstants.QUALITY_MONITOR);
+ 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(MenuJumpPathConstants.QUALITY_MONITOR);
+ 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 qualityMonitorDetailsId
+ * @param file
+ * @return
+ */
+ @Override
+ public boolean uploadEvaluateFile(Integer qualityMonitorDetailsId, MultipartFile file) {
+ if (qualityMonitorDetailsId == 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(qualityMonitorDetailsId);
+ 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 qualityMonitorDetailsId) {
+ return qualityMonitorDetailsEvaluateFileMapper.selectList(Wrappers.<QualityMonitorDetailsEvaluateFile>lambdaQuery()
+ .eq(QualityMonitorDetailsEvaluateFile::getDetailsEvaluateId, qualityMonitorDetailsId));
+ }
+
+
+ /**
+ * 瀵煎嚭鐩戞帶璇勪环
+ * @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() == null ? null : 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();
+ inputStream.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");
+ }
+ LocalDateTime now = LocalDateTime.now();
+ Integer userId =SecurityUtils.getUserId().intValue();
+ String contentType = file.getContentType();
+ 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));
+
+ // 鍒ゆ柇鏄惁鏄痯df
+ if (!contentType.contains("pdf")) {
+ wordInsertUrl(new HashMap<String, Object>() {{
+ put("writeUrl", UserUtils.getFinalUserSignatureUrl(userId));
+ put("writeDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(now)).create());
+ }}, wordUrl + "/" + pathName.replace("/word", wordUrl));
+ }
+
+ qualityMonitorDetailsService.update(Wrappers.<QualityMonitorDetails>lambdaUpdate()
+ .eq(QualityMonitorDetails::getQualityMonitorDetailsId, qualityMonitorDetailsId)
+ .set(QualityMonitorDetails::getFinishReportUrl, pathName)
+ .set(QualityMonitorDetails::getWriteTime, now));
+
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new ErrorException("鏂囦欢涓婁紶澶辫触");
+ }
+ }
+
+ /**
+ * 鎵瑰噯瀹屾垚鎶ュ憡
+ * @param qualityMonitorDetails
+ * @return
+ */
+ @Override
+ public boolean ratifyFinishReport(QualityMonitorDetails qualityMonitorDetails) {
+ LocalDateTime now = LocalDateTime.now();
+ 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, 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()) && !details.getFinishReportUrl().contains(".pdf")) {
+ wordInsertUrl(new HashMap<String, Object>() {{
+ put("ratifyUrl", UserUtils.getFinalUserSignatureUrl(userId));
+ put("ratifyDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(now)).create());
+ }}, 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/QualitySuperviseManagementReviewServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseManagementReviewServiceImpl.java
new file mode 100644
index 0000000..5b9a3f5
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseManagementReviewServiceImpl.java
@@ -0,0 +1,86 @@
+package com.ruoyi.process.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.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.utils.QueryWrappers;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.process.dto.QualitySuperviseDetailsCorrectDto;
+import com.ruoyi.process.pojo.QualitySuperviseDetailsCorrect;
+import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
+import com.ruoyi.process.mapper.QualitySuperviseManagementReviewMapper;
+import com.ruoyi.process.service.QualitySuperviseManagementReviewService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import jakarta.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 2025-05-07 10:46:11
+ */
+@Service
+public class QualitySuperviseManagementReviewServiceImpl extends ServiceImpl<QualitySuperviseManagementReviewMapper, QualitySuperviseManagementReview> implements QualitySuperviseManagementReviewService {
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @param page
+ * @param managementReview
+ * @return
+ */
+ @Override
+ public IPage<QualitySuperviseManagementReview> pageManagementReview(Page page, QualitySuperviseManagementReview managementReview) {
+ return baseMapper.pageManagementReview(page, QueryWrappers.queryWrappers(managementReview));
+ }
+
+ /**
+ * 瀵煎嚭
+ * @param managementReviewId
+ * @param response
+ */
+ @Override
+ public void exportManagementReview(Integer managementReviewId, HttpServletResponse response) {
+ QualitySuperviseManagementReview managementReview = baseMapper.selectById(managementReviewId);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/supervise-management-eview.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("managementReview", managementReview);
+ put("superviseDateStr", managementReview.getSuperviseDate() == null ? null : managementReview.getSuperviseDate().format(formatter));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ managementReview.getFileName(), "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
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..e4d082e
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
@@ -0,0 +1,1267 @@
+package com.ruoyi.process.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+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.CollectionUtils;
+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.constant.MenuJumpPathConstants;
+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.device.pojo.DeviceExamineRecord;
+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 jakarta.annotation.Resource;
+import jakarta.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.YearMonth;
+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(MenuJumpPathConstants.QUALITY_SUPERVISE);
+ 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) {
+ List<Map<String, String>> recordUser = baseMapper.getRecordUser(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();
+ inputStream.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));
+
+ // 鏌ヨ涓婁竴涓湀绗竴鏉$殑璁板綍淇℃伅, 鍒ゆ柇琚洃鐫d汉鍘诲彟澶栦竴涓�
+ if (detailsRecord == null) {
+ // 鏌ヨ璇︽儏淇℃伅
+ QualitySuperviseDetails qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
+ // 鏌ヨ涓婁竴涓湀绗竴鏉$殑璁板綍淇℃伅, 鍒ゆ柇琚洃鐫d汉鍘诲彟澶栦竴涓�
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M");
+ YearMonth yearMonth = YearMonth.parse(qualitySuperviseDetails.getSuperviseTime(), formatter);
+ YearMonth previousYearMonth = yearMonth.minusMonths(1);
+
+ LocalDate startDate = previousYearMonth.atDay(1);
+ LocalDate endDate = previousYearMonth.atEndOfMonth();
+
+ LocalDateTime startDateTime = startDate.atStartOfDay();
+ LocalDateTime endDateTime = endDate.atTime(23, 59, 59);
+
+ DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ // 鑾峰彇寮�濮嬫椂闂村拰缁撴潫鏃堕棿
+ String startDateTimeStr = startDateTime.format(outputFormatter);
+ String endDateTimeStr = endDateTime.format(outputFormatter);
+
+ QualitySuperviseDetailsRecord laseRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
+ .between(QualitySuperviseDetailsRecord::getCreateTime, startDateTimeStr, endDateTimeStr)
+ .isNotNull(QualitySuperviseDetailsRecord::getSupervisor)
+ .last("limit 1"));
+
+ String supervisor = null;
+
+ if (laseRecord != null) {
+ // 鏌ヨ璁″垝鑾峰彇鍙︿竴涓洃鐫e憳
+ QualitySupervise qualitySupervise = baseMapper.selectById(qualitySuperviseDetails.getSuperviseId());
+ if (StringUtils.isNotBlank(qualitySupervise.getRecordUserIds())) {
+ List<String> recordUserIds = StrUtil.split(qualitySupervise.getRecordUserIds(), ',');
+ List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery()
+ .in(User::getId, recordUserIds));
+ if (CollectionUtils.isNotEmpty(users) && users.size() == 2) {
+ // 鍒ゆ柇鏄惁涓�鏍�, 涓�鏍疯幏鍙栧彟澶栦竴涓�
+ if (users.get(0).getName().equals(laseRecord.getSupervisor())) {
+ supervisor = users.get(1).getName();
+ } else {
+ supervisor = users.get(0).getName();
+ }
+
+ }
+ }
+ }
+
+ detailsRecord = new QualitySuperviseDetailsRecord();
+ detailsRecord.setSuperviseDetailsId(superviseDetailsId);
+ detailsRecord.setTestMember(qualitySuperviseDetails.getSupervisee());
+ detailsRecord.setSupervisor(supervisor);
+
+ detailsRecord.setPersonnel(SecurityUtils.getLoginUser().getUser().getNickName() + "鏈夌浉搴旀娴嬪憳鐨勪笂宀楄瘉");
+ detailsRecord.setEnvironment("娓╁害锛�()鈩� 婀垮害锛�()%");
+ detailsRecord.setInspectionRecord("妫�娴嬩汉鍛�" + SecurityUtils.getLoginUser().getUser().getNickName() + "杩涜妫�娴嬭褰曪紝璁板綍鍐呭鐪熷疄鏈夋晥");
+ detailsRecord.setExaminingReport("鐢�" + SecurityUtils.getLoginUser().getUser().getNickName() + "鍑虹ず鐨勬娴嬫姤鍛婄鍚堣鑼冭姹�");
+ detailsRecord.setSupervisionEvaluation("妫�娴嬫寜鐓ц姹傝繘琛岋紝鍒ゅ畾涓烘弧鎰�");
+ detailsRecord.setHandlingAdvice("/");
+
+ }
+ // 娣诲姞鎵瑰噯浜哄悕绉�
+ if (detailsRecord.getRatifyUserId() != null) {
+ User user = userMapper.selectById(detailsRecord.getRatifyUserId());
+ detailsRecord.setRatifyUserName(user.getName());
+ }
+ return detailsRecord;
+ }
+
+ /**
+ * 鏂板鐩戠潱璁板綍淇℃伅
+ * @param qualitySuperviseDetailsRecord
+ * @return
+ */
+ @Override
+ public boolean addSuperviseDetailRecord(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
+ if (qualitySuperviseDetailsRecord.getSuperviseDetailsId() == null) {
+ throw new ErrorException("缂哄皯鐩戠潱璇︾粏淇℃伅id");
+ }
+ if (qualitySuperviseDetailsRecord.getSuperviseDetailsRecordId() == null) {
+ qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord);
+ } else {
+ qualitySuperviseDetailsRecordMapper.updateById(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(MenuJumpPathConstants.QUALITY_SUPERVISE);
+ 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);
+ }
+ });
+ }
+ // 娓呯┖鐘舵��
+ qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
+ .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsRecordId, qualitySuperviseDetailsRecord.getSuperviseDetailsRecordId())
+ .set(QualitySuperviseDetailsRecord::getIsFinish, null));
+
+ return true;
+ }
+
+ /**
+ * 鐩戠潱璁板綍鎵瑰噯
+ * @param qualitySuperviseDetailsRecord
+ * @return
+ */
+ @Override
+ public boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
+ if (qualitySuperviseDetailsRecord.getIsFinish() == null) {
+ throw new RuntimeException("缂哄皯璁板綍缁撴灉鐘舵��");
+ }
+
+ LambdaUpdateWrapper<QualitySuperviseDetailsRecord> wrapper = Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
+ .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, qualitySuperviseDetailsRecord.getSuperviseDetailsId())
+ .set(QualitySuperviseDetailsRecord::getRatifyOpinion, qualitySuperviseDetailsRecord.getRatifyOpinion())
+ .set(QualitySuperviseDetailsRecord::getIsAccording, qualitySuperviseDetailsRecord.getIsAccording())
+ .set(QualitySuperviseDetailsRecord::getIsFinish, qualitySuperviseDetailsRecord.getIsFinish());
+
+ // 涓�0娓呴櫎瀹℃牳浜�
+ if (qualitySuperviseDetailsRecord.getIsFinish().equals(0)) {
+ wrapper.set(QualitySuperviseDetailsRecord::getRatifyUserId, null)
+ .set(QualitySuperviseDetailsRecord::getRatifyTime, null);
+ } else {
+ wrapper.set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now());
+ }
+
+ qualitySuperviseDetailsRecordMapper.update(null, wrapper);
+
+
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭鐩戠潱璁板綍琛�
+ * @param superviseDetailsId
+ * @param response
+ */
+ @Override
+ public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response) {
+ QualitySuperviseDetailsRecord recordDto = qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId);
+
+ // 鏌ヨ妫�娴嬩汉鍛�
+ User tserUser = new User();
+ if (StringUtils.isNotBlank(recordDto.getTestMember())) {
+ tserUser = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, recordDto.getTestMember())
+ .last("limit 1"));
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-record.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ User finalTserUser = tserUser;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("supervision", recordDto);
+ put("testMemberUrl", UserUtils.getFinalUserSignatureUrl(finalTserUser.getId()));
+ put("supervisoruUrl", UserUtils.getFinalUserSignatureUrl(recordDto.getSupervisor()));
+ put("technicalDirectorUrl", UserUtils.getFinalUserSignatureUrl(recordDto.getRatifyUserId()));
+ 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();
+ inputStream.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());//琚洃鐫�
+
+ if (detailsAccording.getSuperviseDetailsAccordingId() == null) {
+ qualitySuperviseDetailsAccordingMapper.insert(detailsAccording);
+ } else {
+ qualitySuperviseDetailsAccordingMapper.updateById(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(MenuJumpPathConstants.QUALITY_SUPERVISE);
+ 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);
+ }
+ });
+ }
+
+ // 娓呯┖鐘舵��
+ qualitySuperviseDetailsAccordingMapper.update(null, Wrappers.<QualitySuperviseDetailsAccording>lambdaUpdate()
+ .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsAccordingId, detailsAccording.getSuperviseDetailsAccordingId())
+ .set(QualitySuperviseDetailsAccording::getIsFinish, null));
+
+ return true;
+ }
+
+ /**
+ * (瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+ * 鎵瑰噯瀹屾垚鍚庣粺涓�濉啓涓変釜娴佺▼浜篿d鍜岄儴闂�
+ * @param detailsAccording
+ * @return
+ */
+ @Override
+ public boolean approverEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
+ if (detailsAccording.getIsFinish() == null) {
+ throw new RuntimeException("缂哄皯鎵瑰噯鐘舵��");
+ }
+
+ QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
+ according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
+
+ if (detailsAccording.getIsFinish().equals(1)) {
+ // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+ 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());//璐ㄩ噺璐熻矗浜�
+ } else {
+ qualitySuperviseDetailsAccordingMapper.update(null, Wrappers.<QualitySuperviseDetailsAccording>lambdaUpdate()
+ .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsAccordingId, detailsAccording.getSuperviseDetailsAccordingId())
+ .set(QualitySuperviseDetailsAccording::getResponsibleDepartment, null)
+ .set(QualitySuperviseDetailsAccording::getActionsUserId, null)
+ .set(QualitySuperviseDetailsAccording::getActionsUserName, null)
+ .set(QualitySuperviseDetailsAccording::getCorrectUserId, null)
+ .set(QualitySuperviseDetailsAccording::getCorrectUserName, null)
+ .set(QualitySuperviseDetailsAccording::getQualityManagerUserId, null)
+ .set(QualitySuperviseDetailsAccording::getQualityManagerUserName, null)
+ .set(QualitySuperviseDetailsAccording::getApproverUserId, null));
+ }
+
+ according.setIsFinish(detailsAccording.getIsFinish());
+ 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);
+ superviseDetails.setSuperviseDetailsId(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();
+ inputStream.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());// 鎻愬嚭浜�
+ if (detailsCorrect.getSuperviseDetailsCorrectId() == null) {
+ qualitySuperviseDetailsCorrectMapper.insert(detailsCorrect);
+ } else {
+ qualitySuperviseDetailsCorrectMapper.updateById(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(MenuJumpPathConstants.QUALITY_SUPERVISE);
+ 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);
+ }
+ });
+ }
+
+ // 娓呯┖鐘舵��
+ qualitySuperviseDetailsCorrectMapper.update(null, Wrappers.<QualitySuperviseDetailsCorrect>lambdaUpdate()
+ .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsCorrectId, detailsCorrect.getSuperviseDetailsCorrectId())
+ .set(QualitySuperviseDetailsCorrect::getIsFinish, null));
+ return true;
+ }
+
+ /**
+ * (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊淇℃伅
+ * @return
+ */
+ @Override
+ public boolean approveEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
+ if (detailsCorrect.getIsFinish() == null) {
+ throw new RuntimeException("缂哄皯鎵瑰噯鐘舵��");
+ }
+
+ QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect();
+ // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+ User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+ String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
+ correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
+
+ if (detailsCorrect.getIsFinish().equals(1)) {
+ 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楠岃瘉浜�
+ } else {
+ qualitySuperviseDetailsCorrectMapper.update(null, Wrappers.<QualitySuperviseDetailsCorrect>lambdaUpdate()
+ .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsCorrectId, detailsCorrect.getSuperviseDetailsCorrectId())
+ .set(QualitySuperviseDetailsCorrect::getCauseDepartment, null)
+ .set(QualitySuperviseDetailsCorrect::getCauseUserId, null)
+ .set(QualitySuperviseDetailsCorrect::getCauseUserName, null)
+ .set(QualitySuperviseDetailsCorrect::getCorrectDepartment, null)
+ .set(QualitySuperviseDetailsCorrect::getCorrectUserId, null)
+ .set(QualitySuperviseDetailsCorrect::getCorrectUserName, null)
+ .set(QualitySuperviseDetailsCorrect::getValidationDepartment, null)
+ .set(QualitySuperviseDetailsCorrect::getValidationUserId, null)
+ .set(QualitySuperviseDetailsCorrect::getValidationUserName, null)
+ .set(QualitySuperviseDetailsCorrect::getApproverUserId, null)
+ );
+ }
+
+ correct.setIsFinish(detailsCorrect.getIsFinish());
+ 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();
+ detailsCorrect.setSuperviseDetailsId(superviseDetailsId);
+ }
+ 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();
+ inputStream.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..0d42e19
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java
@@ -0,0 +1,142 @@
+package com.ruoyi.process.task;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+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.mapper.QualitySuperviseDetailsRecordMapper;
+import com.ruoyi.process.mapper.QualitySuperviseManagementReviewMapper;
+import com.ruoyi.process.pojo.QualitySuperviseDetails;
+import com.ruoyi.process.pojo.QualitySuperviseDetailsRecord;
+import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import jakarta.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 璐ㄩ噺鐩戠潱濉啓鎻愰啋
+ */
+@Component
+public class QualitySuperviseSchedule {
+ @Resource
+ private QualitySuperviseDetailsMapper qualitySuperviseDetailsMapper;
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ @Resource
+ private QualitySuperviseManagementReviewMapper qualitySuperviseManagementReviewMapper;
+ @Resource
+ private QualitySuperviseDetailsRecordMapper qualitySuperviseDetailsRecordMapper;
+
+ /**
+ * 璐ㄩ噺鐩戠潱濉啓鎻愰啋
+ */
+// @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);
+ }
+ });
+ }
+ }
+
+
+ /**
+ * 姣忔湀28鍙疯嚜鍔ㄧ敓鎴愯川閲忕洃鐫f�荤粨
+ */
+// @Scheduled(cron = "0/5 * * * * *")
+ @Scheduled(cron = "0 0 9 28 * *") // 姣忔湀28鍙锋墽琛�
+ public void task2() {
+ LocalDateTime now = LocalDateTime.now();
+ // 鏌ヨ褰撴湀鐩戠潱璁″垝
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M");
+ String format = now.format(formatter);
+ List<QualitySuperviseDetails> qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.<QualitySuperviseDetails>lambdaQuery()
+ .eq(QualitySuperviseDetails::getSuperviseTime, format));
+
+ // 鏍规嵁瀹氭湡鐩戠潱鍜屽姩鎬佺洃鐫e尯鍒�
+ Map<String, List<QualitySuperviseDetails>> superviseReasonMap = qualitySuperviseDetails.stream().collect(Collectors.groupingBy(QualitySuperviseDetails::getSuperviseReason));
+
+ // 鑾峰彇褰撴湀鏃ユ湡
+ DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy骞碝M鏈�");
+ String format2 = now.format(formatter2);
+
+ // 鑾峰彇璁″垝鍐呭
+ String implementationSupervisee = "";
+ List<QualitySuperviseDetails> implementationList = superviseReasonMap.get("瀹氭湡鐩戠潱");
+ if (CollectionUtils.isNotEmpty(implementationList)) {
+ // 鑾峰彇瀹氭湡鐩戠潱浜哄憳淇℃伅
+ List<String> collect = implementationList.stream().map(QualitySuperviseDetails::getSupervisee).collect(Collectors.toList());
+ implementationSupervisee = CollUtil.join(collect, ",");
+ }
+ String implementationContent = "宸ヤ綔涓弗鏍兼寜鐓у勾搴﹁川閲忕洃鐫e伐浣滆鍒掕繘琛屾墽琛屻�倇}瀵箋}杩涜涓�娆″畾鏈熺洃鐫c�傚湪鐩戠潱杩囩▼涓紝娌℃湁鍙戠幇涓嶇鍚堢殑鐜拌薄銆傛楠屽憳鑳界啛缁冪殑鎸夌収瑙勫畾鐨勮姹傝繘琛岃澶囩殑鎿嶄綔锛屽浜庢爣鍑嗚兘鐔熻锛屾墍浣跨敤鐨勮澶囧潎鍦ㄦ牎鍑嗗懆鏈熷唴锛岃兘娓呮瀹屾暣鐨勭殑璁板綍鍘熷鏁版嵁骞跺嚭鍏锋姤鍛婏紱鍦ㄨ瘯楠岀幆澧冩柟闈紝鑳藉涓ユ牸鐨勬寜鐓ф爣鍑嗘墽琛屻��";
+ String formatImplementationContent = StrUtil.format(implementationContent, format2, implementationSupervisee);
+
+ //鑾峰彇鍔ㄦ�佸唴瀹�
+ String dynamicSupervisee = "";
+ List<QualitySuperviseDetails> dynamicList = superviseReasonMap.get("鍔ㄦ�佺洃鐫�");
+ if (CollectionUtils.isNotEmpty(dynamicList)) {
+ List<String> collect = dynamicList.stream()
+ .map(details -> StrUtil.format("瀵箋}鍔ㄦ�佺洃鐫�1娆″湪鐩戠潱杩囩▼涓�", details.getSupervisee())).collect(Collectors.toList());
+ dynamicSupervisee = CollUtil.join(collect, "锛�");
+ }
+ String dynamicContent = "鍦ㄤ繚璇佽川閲忕洃鐫h鍒掔殑鍚屾椂锛屼篃鍧氭寔鎸夌収棰嗗瑕佹眰鍔犲己涓嶅畾鏈熺洃鐫e姩浣溿�倇}浠絳}锛屾病鏈夊彂鐜颁笉绗﹀悎鐨勭幇璞°�傛楠屽憳鑳界啛缁冪殑鎸夌収瑙勫畾鐨勮姹傝繘琛岃澶囩殑鎿嶄綔锛屽浜庢爣鍑嗚兘鐔熻锛屾墍浣跨敤鐨勮澶囧潎鍦ㄦ牎鍑嗗懆鏈熷唴锛岃兘娓呮瀹屾暣鐨勭殑璁板綍鍘熷鏁版嵁骞跺嚭鍏锋姤鍛婏紱鍦ㄨ瘯楠岀幆澧冩柟闈紝鑳藉涓ユ牸鐨勬寜鐓ф爣鍑嗘墽琛屻��";
+ String formatdynamicContent = StrUtil.format(dynamicContent, format2, dynamicSupervisee);
+
+ // 鑾峰彇鐩戠潱鍛樹俊鎭�
+ QualitySuperviseDetails superviseDetails = qualitySuperviseDetails.get(0);
+ QualitySuperviseDetailsRecord detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
+ .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetails.getSuperviseDetailsId())
+ .last("limit 1"));
+ String supervisor = detailsRecord.getSupervisor();
+
+ // 鍒涘缓璇勫瀵硅薄
+ QualitySuperviseManagementReview managementReview = new QualitySuperviseManagementReview();
+ String yearDate = now.format(DateTimeFormatter.ofPattern("yyyy骞�"));
+ String monthDate = now.format(DateTimeFormatter.ofPattern("MM鏈�"));
+ managementReview.setFileName(StrUtil.format("{}绠$悊璇勫杈撳叆鏉愭枡锛坽}锛塤{}", yearDate, supervisor, monthDate));
+ managementReview.setImplementationContent(formatImplementationContent);
+ managementReview.setDynamicContent(formatdynamicContent);
+ managementReview.setSupervisor(supervisor);
+ managementReview.setSuperviseDate(LocalDate.now());
+ qualitySuperviseManagementReviewMapper.insert(managementReview);
+ }
+
+}
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..ba0c03f
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/InspectionOrderMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.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..037afa8
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessDealMapper.xml
@@ -0,0 +1,39 @@
+<?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>
+
+ <select id="selectDeal" resultType="com.ruoyi.process.dto.ProcessDealDto">
+ select ROW_NUMBER() OVER (ORDER BY id) AS indexs,
+ id,
+ sample_name,
+ sample_code,
+ sample_supplier,
+ num,
+ deal_method,
+ DATE_FORMAT(deal_time, '%Y-%m-%d') dealTimeStr
+ from cnas_process_deal
+ where totaldeal_id = #{id}
+ </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/ProcessOrderDeviceMapper.xml b/cnas-process/src/main/resources/mapper/ProcessOrderDeviceMapper.xml
new file mode 100644
index 0000000..4165595
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessOrderDeviceMapper.xml
@@ -0,0 +1,52 @@
+<?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.ProcessOrderDeviceMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessOrderDevice">
+ <id column="id" property="id" />
+ <result column="device_id" property="deviceId" />
+ <result column="inspection_order_id" property="inspectionOrderId" />
+ <result column="sample_code" property="sampleCode" />
+ <result column="use_before" property="useBefore" />
+ <result column="use_after" property="useAfter" />
+ <result column="abnormal" property="abnormal" />
+ <result column="use_start_date" property="useStartDate" />
+ <result column="use_person_id" property="usePersonId" />
+ <result column="use_person" property="usePerson" />
+ <result column="remark" property="remark" />
+ <result column="use_end_date" property="useEndDate" />
+ </resultMap>
+ <select id="selectDeviceNumber" resultType="java.lang.String">
+ select distinct d.management_number
+ from cnas_process_order_device cpod
+ left join device d on d.id = cpod.device_id
+ where cpod.inspection_order_id = #{inspectionOrderId}
+ </select>
+ <select id="selectDeviceIdsByNumbers" resultType="java.lang.Integer">
+ select id
+ from device
+ where management_number in
+ <foreach collection="deviceNumbers" index="index" open="(" separator="," close=")" item="val">
+ #{val}
+ </foreach>
+ </select>
+ <select id="deviceRecordPage" resultType="com.ruoyi.process.pojo.ProcessOrderDevice">
+ select cpod.*,
+ d.device_name,
+ d.management_number
+ from cnas_process_order_device cpod
+ left join device d on d.id = cpod.device_id
+ where 1=1
+ <if test="deviceId != null">
+ and dr.device_id = #{deviceId}
+ </if>
+ <if test="sampleCode != '' and sampleCode != null">
+ and dr.sample_code like concat('%', #{sampleCode}, '%')
+ </if>
+ <if test="managementNumber != '' and managementNumber != null">
+ and d.management_number like concat('%', #{managementNumber}, '%')
+ </if>
+ ORDER BY (cpod.use_start_date IS NULL) desc , cpod.use_start_date DESC
+ </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..62e82d0
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessReportMapper.xml
@@ -0,0 +1,37 @@
+<?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.dto.ProcessReportDto">
+ 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="exportProcessReport" resultType="com.ruoyi.process.dto.ProcessReportDto">
+ select ROW_NUMBER() OVER (ORDER BY cpr.id) AS indexs,
+ cpr.* ,
+ u1.signature_url sendUserUrl
+ from cnas_process_report cpr
+ left join user u1 on send_user=u1.id
+ </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..6ca612d
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessSampleMapper.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.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="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/ProcessTotaldealMapper.xml b/cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.xml
new file mode 100644
index 0000000..c6a1bda
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.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.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="examineUserName" property="examineUserName"/>
+ <result column="ratify_user" property="ratifyUser"/>
+ <result column="ratify_state" property="ratifyState"/>
+ <result column="ratifyUserName" property="ratifyUserName"/>
+ <result column="submit_user" property="submitUser"/>
+ <result column="submit_state" property="submitState"/>
+ <result column="submitUserName" property="submitUserName"/>
+ <result column="month" property="month"/>
+ </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..aa500be
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml
@@ -0,0 +1,40 @@
+<?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.dto.QualityMonitorDetailsDto">
+ select * from (
+ SELECT cqmd.*,
+ CASE
+ WHEN cqmder.is_finish = 1 THEN 3
+ WHEN cqmder.is_finish = 0 THEN 2
+ WHEN cqmder.quality_monitor_details_id IS NOT NULL THEN 1
+ ELSE 0 END details_ratify_status,
+ CASE
+ WHEN cqmd.ratify_status = 1 THEN 3
+ WHEN cqmd.ratify_status = 0 THEN 2
+ WHEN cqmd.finish_report_url IS NOT NULL THEN 1
+ ELSE 0 END report_status,
+ CASE
+ WHEN cqmde.is_finish = 1 THEN 3
+ WHEN cqmde.ratify_user_id IS NOT NULL THEN 2
+ WHEN cqmde.implement_user_id IS NOT NULL and cqmde.details_evaluate_id is not null THEN 1
+ ELSE 0 END evaluate_status
+ FROM cnas_quality_monitor_details cqmd
+ LEFT JOIN cnas_quality_monitor_details_evaluate cqmde
+ ON cqmd.quality_monitor_details_id = cqmde.quality_monitor_details_id
+ LEFT JOIN cnas_quality_monitor_details_ratify cqmder
+ ON cqmder.quality_monitor_details_id = cqmd.quality_monitor_details_id
+ order by cqmd.quality_monitor_details_id
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ order by quality_monitor_id, monitor_purpose, -- 鎻愬彇骞翠唤
+ CAST(SUBSTRING(planned_time, 1, 4) AS SIGNED) ASC,
+ -- 鎻愬彇鏈堜唤
+ CASE
+ WHEN planned_time LIKE '% - %' THEN 1
+ ELSE CAST(SUBSTRING_INDEX(SUBSTRING(planned_time, 6), '鏈�', 1) AS SIGNED)
+ END ASC
+ </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..0e8b619
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.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,
+ case
+ when cr.is_finish = 1 then 3
+ when cr.is_finish = 0 then 2
+ when cr.supervise_details_record_id is not null then 1
+ else 0
+ end record_status,
+ case
+ when ca.is_finish = 1 then 3
+ when ca.is_finish = 0 then 2
+ when ca.supervise_details_according_id is not null then 1
+ else 0
+ end according_status,
+ case
+ when cc.is_finish = 1 then 3
+ when cc.is_finish = 0 then 2
+ when cc.supervise_details_correct_id is not null then 1
+ else 0
+ end correct_status
+ 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/QualitySuperviseManagementReviewMapper.xml b/cnas-process/src/main/resources/mapper/QualitySuperviseManagementReviewMapper.xml
new file mode 100644
index 0000000..ff901d2
--- /dev/null
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseManagementReviewMapper.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.QualitySuperviseManagementReviewMapper">
+
+
+ <select id="pageManagementReview" resultType="com.ruoyi.process.pojo.QualitySuperviseManagementReview">
+ select *
+ from cnas_quality_supervise_management_review
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
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..32e08a2
--- /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..7f515a5
--- /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..7cc0d8b
--- /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..7030cf9
--- /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/supervise-management-eview.docx b/cnas-process/src/main/resources/static/supervise-management-eview.docx
new file mode 100644
index 0000000..7dcdc48
--- /dev/null
+++ b/cnas-process/src/main/resources/static/supervise-management-eview.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..24cab26
--- /dev/null
+++ b/cnas-process/src/main/resources/static/supervision-detail-record.docx
Binary files differ
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java
new file mode 100644
index 0000000..d2c3399
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java
@@ -0,0 +1,97 @@
+package com.ruoyi.require.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+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.require.excel.FeCalibrationScheduleExport;
+import com.ruoyi.require.pojo.FeCalibrationSchedule;
+import com.ruoyi.require.service.FeCalibrationScheduleService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 02:53:05
+ */
+@Tag(name = "閲忓�兼函婧愯鍒�")
+@RestController
+@RequestMapping("/feCalibrationSchedule")
+public class FeCalibrationScheduleController {
+
+ @Resource
+ private FeCalibrationScheduleService feCalibrationScheduleService;
+
+ @Operation(summary = "閲忓�兼函婧愯鍒掓煡璇�")
+ @GetMapping("/getPageCalibrationSchedule")
+ public Result<IPage<FeCalibrationSchedule>> getPageCalibrationSchedule(Page page, String instrumentName, String managementNumber) {
+ IPage<FeCalibrationSchedule> ipage = feCalibrationScheduleService.page(page,instrumentName, managementNumber);
+ return Result.success(ipage);
+ }
+
+ @Operation(summary = "閲忓�兼函婧愯鍒掓柊澧炵紪杈�")
+ @PostMapping("/addCalibrationSchedule")
+ public Result addCalibrationSchedule(@RequestBody FeCalibrationSchedule feCalibrationSchedule) {
+ return Result.success(feCalibrationScheduleService.saveOrUpdate(feCalibrationSchedule));
+ }
+
+ @Operation(summary = "閲忓�兼函婧愯鍒掑垹闄�")
+ @GetMapping("/removeCalibrationSchedule")
+ public Result removeCalibrationSchedule(Integer id) {
+ return Result.success(feCalibrationScheduleService.removeById(id));
+ }
+
+
+ @Operation(summary = "閲忓�兼函婧愯鍒掑鍑�")
+ @PostMapping("exportOfValueTraceabilityPlan")
+ public void exportOfValueTraceabilityPlan(String instrumentName, String managementNumber,
+ HttpServletResponse response) throws Exception {
+ IPage<FeCalibrationSchedule> data = feCalibrationScheduleService.page(new Page<>(1, -1),instrumentName, managementNumber);
+ List<FeCalibrationScheduleExport> studentList = JSONObject.parseArray(JSON.toJSONString(data.getRecords()), FeCalibrationScheduleExport.class);
+ 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(FeCalibrationScheduleExport.class)
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+ .sheet("sheet")
+ .doWrite(studentList);
+ }
+
+ @Operation(summary = "importOfValueTraceabilityPlan")
+ @PostMapping("/importOfValueTraceabilityPlan")
+ public void importOfValueTraceabilityPlan(MultipartFile file) throws IOException {
+ if (file.isEmpty()) {
+ return;
+ }
+ EasyExcel.read(file.getInputStream(), FeCalibrationScheduleExport.class, new PageReadListener<FeCalibrationScheduleExport>(dataList -> {
+ List<FeCalibrationSchedule> studentList = JSONObject.parseArray(JSON.toJSONString(dataList), FeCalibrationSchedule.class);
+ feCalibrationScheduleService.saveOrUpdateBatch(studentList);
+ })).sheet().doRead();
+ }
+
+
+// Equipment quantity traceability management
+ @Operation(summary = "閲忓�兼函婧愯鍒掑鍑簑ord")
+ @GetMapping("/exportWordOfValueTraceabilityPlan")
+ public void exportWordOfValueTraceabilityPlan(HttpServletResponse response) throws IOException {
+ feCalibrationScheduleService.exportWordOfValueTraceabilityPlan(response);
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeIlluminationController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeIlluminationController.java
new file mode 100644
index 0000000..6b3c453
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeIlluminationController.java
@@ -0,0 +1,88 @@
+package com.ruoyi.require.controller;
+
+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.ruoyi.common.core.domain.Result;
+import com.ruoyi.require.dto.FeIlluminationAddDto;
+import com.ruoyi.require.dto.FeIlluminationDto;
+import com.ruoyi.require.pojo.FeIllumination;
+import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
+import com.ruoyi.require.service.FeIlluminationDetectionAreaService;
+import com.ruoyi.require.service.FeIlluminationService;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:15:57
+ */
+@RestController
+@RequestMapping("/feIllumination")
+public class FeIlluminationController {
+
+ @Autowired
+ private FeIlluminationService feIlluminationService;
+
+ @Autowired
+ private FeIlluminationDetectionAreaService feIlluminationDetectionAreaService;
+
+ @PostMapping("addFeLightningProtection")
+ @Operation(summary = "璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鏂板/淇敼")
+ public Result<?> addFeLightningProtection(@RequestBody FeIlluminationAddDto feIlluminationAddDto) {
+ FeIllumination feIllumination = new FeIllumination();
+ BeanUtils.copyProperties(feIlluminationAddDto, feIllumination);
+ feIlluminationService.saveOrUpdate(feIllumination);
+ if (CollectionUtils.isNotEmpty(feIlluminationAddDto.getIlluminationDetectionAreaList())) {
+ feIlluminationAddDto.getIlluminationDetectionAreaList().forEach(i -> i.setIntensityIlluminationId(feIllumination.getIntensityIlluminationId()));
+ feIlluminationDetectionAreaService.saveOrUpdateBatch(feIlluminationAddDto.getIlluminationDetectionAreaList());
+ }
+ return Result.success();
+ }
+
+ @DeleteMapping("deleteFeLightningProtection")
+ @Operation(summary = "璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鍒犻櫎")
+ public Result<?> deleteFeLightningProtection(@RequestParam("intensityIlluminationId") Integer intensityIlluminationId) {
+ feIlluminationService.removeById(intensityIlluminationId);
+ return Result.success();
+ }
+
+ @GetMapping("getFeLightningProtection")
+ @Operation(summary = "鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鏌ヨ")
+ public Result<IPage<FeIlluminationDto>> getFeLightningProtection(Page page) {
+ IPage<FeIlluminationDto> page1 = feIlluminationService.getFeLightningProtection(page);
+ return Result.success(page1);
+ }
+
+ @DeleteMapping("deleteFeIlluminationDetectionArea")
+ @Operation(summary = "鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鍒犻櫎")
+ public Result<?> deleteFeIlluminationDetectionArea(@RequestParam("detectionAreaId") Integer detectionAreaId) {
+ return Result.success(feIlluminationDetectionAreaService.removeById(detectionAreaId));
+ }
+
+ @GetMapping("getFeIlluminationDetectionArea")
+ @Operation(summary = "鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鏍规嵁鐓у害璁板綍鏌ヨ")
+ public Result<?> getFeIlluminationDetectionArea(@RequestParam("intensityIlluminationId") Integer intensityIlluminationId) {
+ return Result.success(feIlluminationDetectionAreaService.list(Wrappers.<FeIlluminationDetectionArea>lambdaQuery()
+ .eq(FeIlluminationDetectionArea::getIntensityIlluminationId, intensityIlluminationId)));
+ }
+
+ /**
+ * 瀵煎嚭鐓у害璁板綍
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭鐓у害璁板綍")
+ @GetMapping("/exportFeIllumination")
+ public void exportFeIllumination(Integer intensityIlluminationId, HttpServletResponse response){
+ feIlluminationService.exportFeIllumination(intensityIlluminationId, response);
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeLightningProtectionController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeLightningProtectionController.java
new file mode 100644
index 0000000..e3aa189
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeLightningProtectionController.java
@@ -0,0 +1,80 @@
+package com.ruoyi.require.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.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.FileSaveUtil;
+import com.ruoyi.require.excel.FeLightningProtectionExcel;
+import com.ruoyi.require.pojo.FeLightningProtection;
+import com.ruoyi.require.service.FeLightningProtectionService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:36
+ */
+@Tag(name = "璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴�")
+@RestController
+@RequestMapping("/feLightningProtection")
+public class FeLightningProtectionController {
+
+ @Autowired
+ private FeLightningProtectionService feLightningProtectionService;
+
+ @PostMapping("addLightningProtectionDetection")
+ @Operation(summary = "璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴嬫柊澧�/淇敼")
+ public Result<?> addLightningProtectionDetection(FeLightningProtection feLightningProtection,
+ @RequestPart(value = "file", required = false) MultipartFile file) {
+ if (ObjectUtils.isNotEmpty(file)) {
+ String s = FileSaveUtil.uploadWordFile(file);
+ feLightningProtection.setSystemFileName(s);
+ feLightningProtection.setFileName(file.getOriginalFilename());
+ }
+ feLightningProtectionService.saveOrUpdate(feLightningProtection);
+ return Result.success();
+ }
+
+ @DeleteMapping("deleteLightningProtectionDetection")
+ @Operation(summary = "璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴嬪垹闄�")
+ public Result<?> deleteFeLightningProtection(@RequestParam("lightningProtectionId") Integer lightningProtectionId) {
+ feLightningProtectionService.removeById(lightningProtectionId);
+ return Result.success();
+ }
+
+ @GetMapping("getLightningProtectionDetection")
+ @Operation(summary = "璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴嬫煡璇�")
+ public Result<IPage<FeLightningProtection>> getFeLightningProtection(Page page) {
+ IPage<FeLightningProtection> page1 = feLightningProtectionService.page(page);
+ return Result.success(page1);
+ }
+
+ @Operation(summary = "璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴嬪鍑�")
+ @GetMapping("exportOfLightningProtectionDetection")
+ public void exportOfLightningProtectionDetection(HttpServletResponse response) throws Exception {
+ List<FeLightningProtectionExcel> ipage = feLightningProtectionService.exportOfLightningProtectionDetection();
+ 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(FeLightningProtectionExcel.class)
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+ .sheet("sheet")
+ .doWrite(ipage);
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FePowerStableController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FePowerStableController.java
new file mode 100644
index 0000000..e057abb
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FePowerStableController.java
@@ -0,0 +1,99 @@
+package com.ruoyi.require.controller;
+
+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.ruoyi.common.core.domain.Result;
+import com.ruoyi.require.dto.FePowerStableAddDto;
+import com.ruoyi.require.dto.FePowerStableDto;
+import com.ruoyi.require.pojo.FeMeasuredQuantity;
+import com.ruoyi.require.pojo.FePowerStable;
+import com.ruoyi.require.service.FeMeasuredQuantityService;
+import com.ruoyi.require.service.FePowerStableService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:52
+ */
+@Tag(name = "璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�")
+@RestController
+@RequestMapping("/fePowerStable")
+public class FePowerStableController {
+
+ @Autowired
+ private FeMeasuredQuantityService feMeasuredQuantityService;
+
+ @Autowired
+ private FePowerStableService fePowerStableService;
+
+ @PostMapping("addLaboratoryFacilityPowerStable")
+ @Operation(summary = "鐢垫簮绋冲畾鎬ф柊澧�/淇敼")
+ public Result<?> addLaboratoryFacilityPowerStable(@RequestBody FePowerStableAddDto fePowerStableAddDto) {
+ FePowerStable fePowerStable = new FePowerStable();
+ BeanUtils.copyProperties(fePowerStableAddDto, fePowerStable);
+ fePowerStableService.saveOrUpdate(fePowerStable);
+ if (CollectionUtils.isNotEmpty(fePowerStableAddDto.getFeMeasuredQuantityList())) {
+ fePowerStableAddDto.getFeMeasuredQuantityList().forEach(i -> i.setPowerStableId(fePowerStable.getPowerStableId()));
+ feMeasuredQuantityService.saveOrUpdateBatch(fePowerStableAddDto.getFeMeasuredQuantityList());
+ }
+ return Result.success();
+ }
+
+ @DeleteMapping("deleteLaboratoryFacilityPowerStable")
+ @Operation(summary = "鐢垫簮绋冲畾鎬у垹闄�")
+ public Result<FePowerStable> deleteLaboratoryFacilityPowerStable(@RequestParam("powerStableId") Integer powerStableId) {
+ fePowerStableService.removeById(powerStableId);
+ feMeasuredQuantityService.remove(Wrappers.<FeMeasuredQuantity>lambdaQuery()
+ .eq(FeMeasuredQuantity::getPowerStableId, powerStableId));
+ return Result.success();
+ }
+
+ @GetMapping("getLaboratoryFacilityPowerStablePage")
+ @Operation(summary = "鐢垫簮绋冲畾鎬ф煡璇�")
+ public Result<IPage<FePowerStableDto>> getLaboratoryFacilityPowerStablePage(
+ Page page) {
+ IPage<FePowerStableDto> page1 = fePowerStableService.getLaboratoryFacilityPowerStablePage(page);
+ return Result.success(page1);
+ }
+
+ @Operation(summary = "閫夋嫨璁惧鍚庢煡璇㈡渶鏂拌澶囩紪鍙凤紝鏍″噯鏃ユ湡")
+ @GetMapping("getCalibrationDate")
+ public Result<?> getCalibrationDate(@RequestParam("deviceId") Integer deviceId) {
+ return Result.success(fePowerStableService.getCalibrationDate(deviceId));
+ }
+
+ @DeleteMapping("deleteFeMeasuredQuantity")
+ @Operation(summary = "鐢垫簮绋冲畾鎬�-娴嬪畾閲� 鍒犻櫎")
+ public Result<?> deleteFeMeasuredQuantity(@RequestParam("measuredQuantityId") Integer measuredQuantityId) {
+ return Result.success(feMeasuredQuantityService.removeById(measuredQuantityId));
+ }
+
+ @GetMapping("getFeMeasuredQuantityService")
+ @Operation(summary = "鐢垫簮绋冲畾鎬�-娴嬪畾閲� 鏍规嵁鐢垫簮绋冲畾鎬ф煡璇�")
+ public Result<?> getFeMeasuredQuantityService(@RequestParam("powerStableId") Integer powerStableId) {
+ return Result.success(feMeasuredQuantityService.list(Wrappers.<FeMeasuredQuantity>lambdaQuery()
+ .eq(FeMeasuredQuantity::getPowerStableId, powerStableId)));
+ }
+
+ /**
+ * 瀵煎嚭鐢垫簮绋冲畾鎬�
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭鐢垫簮绋冲畾鎬�")
+ @GetMapping("/exportFePowerStable")
+ public void exportFePowerStable(Integer powerStableId, HttpServletResponse response){
+ fePowerStableService.exportFePowerStable(powerStableId, response);
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java
new file mode 100644
index 0000000..923fc72
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java
@@ -0,0 +1,88 @@
+package com.ruoyi.require.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.require.dto.AcceptanceDto;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceService;
+import com.ruoyi.require.vo.AcceptanceVo;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:29:41
+ */
+@Tag(name = "鏍囧噯鐗╄川楠屾敹")
+@RestController
+@RequestMapping("/feStandardSubstanceAcceptance")
+public class FeStandardSubstanceAcceptanceController {
+
+ @Autowired
+ private FeStandardSubstanceAcceptanceInspectionService inspectionService;
+ @Resource
+ private FeStandardSubstanceAcceptanceService feStandardSubstanceAcceptanceService;
+
+ @Operation(summary = "鏂板")
+ @PostMapping("/addAcceptance")
+ @Transactional
+ public Result addAcceptance(@RequestBody AcceptanceDto dto) {
+ feStandardSubstanceAcceptanceService.addAcceptance(dto);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏍囧噯鐗╄川楠屾敹鏌ヨ")
+ @GetMapping("/getPageAcceptance")
+ public Result<IPage<AcceptanceVo>> getPageAcceptance(Page page, String name) {
+ IPage<AcceptanceVo> ipage = feStandardSubstanceAcceptanceService.getPageAcceptance(page, name);
+ return Result.success(ipage);
+ }
+
+ @Operation(summary = "鏍囧噯鐗╄川楠屾敹鍒犻櫎")
+ @GetMapping("/deleteAcceptance/{id}")
+ public Result deleteAcceptance(@PathVariable("id") Integer id) {
+ return Result.success(feStandardSubstanceAcceptanceService.deleteAcceptance(id));
+ }
+
+ @Operation(summary = "缂栬緫")
+ @PostMapping("/updateAcceptance")
+ public Result updateAcceptance(@RequestBody AcceptanceDto acceptanceDto) {
+ feStandardSubstanceAcceptanceService.updateById(acceptanceDto.getAcceptance());
+ for (FeStandardSubstanceAcceptanceInspection v : acceptanceDto.getList()) {
+ if (v.getId()== null) {
+ inspectionService.save(v);
+ }else {
+ inspectionService.updateById(v);
+ }
+ }
+ return Result.success();
+ }
+
+
+ @Operation(summary = "鏍囧噯鐗╄川楠屾敹鏌ヨ")
+ @GetMapping("/getAcceptanceDetails")
+ public Result getAcceptanceDetails(Integer id) {
+ return Result.success(feStandardSubstanceAcceptanceService.getAcceptanceDetails(id));
+ }
+
+ @Operation(summary = "瀵煎嚭鏍囧噯鐗╄川楠屾敹")
+ @GetMapping("/exportFeStandardSubstanceAcceptance")
+ public Result exportFeStandardSubstanceAcceptance(HttpServletResponse response) {
+ feStandardSubstanceAcceptanceService.exportFeStandardSubstanceAcceptance(response);
+ return Result.success();
+ }
+
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java
new file mode 100644
index 0000000..d860fea
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java
@@ -0,0 +1,93 @@
+package com.ruoyi.require.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+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.require.excel.FeStandardSubstanceExcel;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.service.FeStandardSubstanceService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:58:59
+ */
+@Tag(name = "鏍囧噯鐗╄川娓呭崟")
+@RestController
+@RequestMapping("/feStandardSubstance")
+public class FeStandardSubstanceController {
+
+
+ @Resource
+ private FeStandardSubstanceService feStandardSubstanceService;
+
+ @Operation(summary = "鏍囧噯鐗╄川娓呭崟鏌ヨ")
+ @GetMapping("/getPageStandardSubstance")
+ public Result<IPage<FeStandardSubstance>> getPageStandardSubstance(Page page, FeStandardSubstance feStandardSubstance) {
+ IPage<FeStandardSubstance> ipage = feStandardSubstanceService.page(page, feStandardSubstance);
+ return Result.success(ipage);
+ }
+
+ @Operation(summary = "鏍囧噯鐗╄川娓呭崟鏂板缂栬緫")
+ @PostMapping("/addStandardSubstance")
+ public Result addStandardSubstance(@RequestBody FeStandardSubstance feStandardSubstance) {
+ return Result.success(feStandardSubstanceService.saveOrUpdate(feStandardSubstance));
+ }
+
+ @Operation(summary = "鏍囧噯鐗╄川娓呭崟鍒犻櫎")
+ @DeleteMapping("/removeStandardSubstance")
+ public Result removeStandardSubstance(Integer id) {
+ return Result.success(feStandardSubstanceService.removeById(id));
+ }
+
+ @Operation(summary = "鏍囧噯鐗╄川娓呭崟鏌ヨ鎵�鏈�")
+ @GetMapping("/getStandardSubstanceAll")
+ public Result<List<FeStandardSubstance>> getStandardSubstanceAll( ) {
+ return Result.success(feStandardSubstanceService.list());
+ }
+
+ @Operation(summary = "鏍囧噯鐗╄川娓呭崟瀵煎嚭")
+ @GetMapping("exportOfStandardSubstanceList")
+ public void exportOfStandardSubstanceList(FeStandardSubstance feStandardSubstance,
+ HttpServletResponse response) throws Exception {
+ IPage<FeStandardSubstance> ipage = feStandardSubstanceService.page(new Page<>(1, -1), feStandardSubstance);
+ List<FeStandardSubstanceExcel> studentList = JSONObject.parseArray(JSON.toJSONString(ipage.getRecords()), FeStandardSubstanceExcel.class);
+ 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(FeStandardSubstanceExcel.class)
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+ .sheet("sheet")
+ .doWrite(studentList);
+ }
+
+ @Operation(summary = "涓嬭浇鏍囧噯鐗╄川瀵煎叆妯℃澘")
+ @GetMapping("/importTemplate")
+ public void importTemplate(HttpServletResponse response) {
+ feStandardSubstanceService.downloadImportTemplate(response);
+ }
+
+ @Operation(summary = "瀵煎叆鏍囧噯鐗╄川娓呭崟")
+ @PostMapping("/importStandardSubstance")
+ public Result importStandardSubstance(MultipartFile file) {
+ return Result.success(feStandardSubstanceService.importStandardSubstance(file));
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java
new file mode 100644
index 0000000..fef8599
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java
@@ -0,0 +1,60 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstanceRecord;
+import com.ruoyi.require.service.FeStandardSubstanceRecordService;
+import com.ruoyi.require.vo.SubstanceRecordVo;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 01:49:11
+ */
+@Tag(name = "鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍")
+@RestController
+@RequestMapping("/feStandardSubstanceRecord")
+public class FeStandardSubstanceRecordController {
+
+ @Resource
+ private FeStandardSubstanceRecordService feStandardSubstanceRecordService;
+
+ @Operation(summary = "鏍囧噯鐗╄川娓呭崟鍊熺敤")
+ @PostMapping("/borrowSubstance")
+ @Transactional
+ public Result borrowSubstance(@RequestBody FeStandardSubstanceRecord record) {
+ feStandardSubstanceRecordService.borrowSubstance(record);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏍囧噯鐗╄川娓呭崟褰掕繕")
+ @PostMapping("/returnSubstance")
+ @Transactional
+ public Result returnSubstance(@RequestBody FeStandardSubstanceRecord record) {
+ feStandardSubstanceRecordService.returnSubstance(record);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏍囧噯鐗╄川娓呭崟棰嗙敤鏌ヨ")
+ @PostMapping("/getSubstanceRecord")
+ public Result getSubstanceRecord(Integer id) {
+ return Result.success(feStandardSubstanceRecordService.getSubstanceRecord(id));
+ }
+
+ @Operation(summary = "鍒嗛〉鏌ヨ")
+ @GetMapping("/getPageSubstanceRecord")
+ public Result<IPage<SubstanceRecordVo>> getPageSubstanceRecord(Page page, SubstanceRecordVo vo) {
+ IPage<SubstanceRecordVo> ipage = feStandardSubstanceRecordService.getPage(page,vo);
+ return Result.success(ipage);
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeTempHumDateController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeTempHumDateController.java
new file mode 100644
index 0000000..85596b0
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeTempHumDateController.java
@@ -0,0 +1,118 @@
+package com.ruoyi.require.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.require.dto.FeTempHumDateDto;
+import com.ruoyi.require.dto.FeTempHumRecordDto;
+import com.ruoyi.require.pojo.FeTempHumDate;
+import com.ruoyi.require.pojo.FeTempHumRecord;
+import com.ruoyi.require.service.FeTempHumDateService;
+import com.ruoyi.require.service.FeTempHumRecordService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴� 鍖哄煙 -鐖� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 11:02:18
+ */
+@Tag(name = "娓╂箍搴﹁褰�")
+@RestController
+@RequestMapping("/feTempHumDate")
+public class FeTempHumDateController {
+
+ @Autowired
+ private FeTempHumDateService feTempHumDateService;
+
+ @Autowired
+ private FeTempHumRecordService feTempHumRecordService;
+
+ @PostMapping("addFeTempHumDate")
+ @Operation(summary = "璇曢獙鍖哄煙-鏂板/淇敼")
+ public Result<?> addFeTempHumDate(@RequestBody FeTempHumDate feTempHumDate) {
+ feTempHumDateService.saveOrUpdate(feTempHumDate);
+ return Result.success();
+ }
+
+ @DeleteMapping("deleteFeTempHumDate")
+ @Operation(summary = "璇曢獙鍖哄煙-鍒犻櫎")
+ public Result<?> deleteFeTempHumDate(
+ @RequestParam("dateId") Integer dateId) {
+ feTempHumDateService.removeById(dateId);
+ return Result.success();
+ }
+
+ @GetMapping("getFeTempHumDate")
+ @Operation(summary = "璇曢獙鍖哄煙-鏌ヨ")
+ public Result<IPage<FeTempHumDateDto>> getFeTempHumDate(Page page, FeTempHumDateDto feTempHumDateDto) {
+ IPage<FeTempHumDateDto> page1 = feTempHumDateService.getFeTempHumDate(page, feTempHumDateDto);
+ return Result.success(page1);
+ }
+
+ @PostMapping("addFeTempHumRecord")
+ @Operation(summary = "娓╂箍搴﹁褰曟柊澧�/淇敼")
+ public Result<FeTempHumRecord> addFeTempHumRecord(@RequestBody FeTempHumRecord feTempHumRecord) {
+ if (feTempHumRecord.getTempHumId() == null) {
+ feTempHumRecordService.save(feTempHumRecord);
+ } else {
+ feTempHumRecordService.update(Wrappers.<FeTempHumRecord>lambdaUpdate()
+ .eq(FeTempHumRecord::getTempHumId, feTempHumRecord.getTempHumId())
+ .set(FeTempHumRecord::getMorningTestTime, feTempHumRecord.getMorningTestTime())
+ .set(FeTempHumRecord::getMorningTemp, feTempHumRecord.getMorningTemp())
+ .set(FeTempHumRecord::getMorningHum, feTempHumRecord.getMorningHum())
+ .set(FeTempHumRecord::getMorningRecorderId, feTempHumRecord.getMorningRecorderId())
+ .set(FeTempHumRecord::getAfternoonTime, feTempHumRecord.getAfternoonTime())
+ .set(FeTempHumRecord::getAfternoonTemp, feTempHumRecord.getAfternoonTemp())
+ .set(FeTempHumRecord::getAfternoonHum, feTempHumRecord.getAfternoonHum())
+ .set(FeTempHumRecord::getAfternoonRecorderId, feTempHumRecord.getAfternoonRecorderId())
+ );
+ }
+ return Result.success();
+ }
+
+ @DeleteMapping("deleteFeTempHumRecord")
+ @Operation(summary = "娓╂箍搴﹁褰曞垹闄�")
+ public Result<?> deleteFeTempHumRecord(
+ @RequestParam("tempHumId") Integer tempHumId) {
+ feTempHumRecordService.removeById(tempHumId);
+ return Result.success();
+ }
+
+ @GetMapping("getFeTempHumRecordPage")
+ @Operation(summary = "娓╂箍搴﹁褰曟煡璇�")
+ public Result<IPage<FeTempHumRecordDto>> getFeTempHumRecordPage(Page page, Integer dateId) {
+ IPage<FeTempHumRecordDto> page1 = feTempHumRecordService.getFeTempHumRecordPage(page, dateId);
+ return Result.success(page1);
+ }
+
+ /**
+ * 娓╂箍搴﹁褰曞鍑�
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭")
+ @GetMapping("/exportTemperatureAndHumidityRecords")
+ public void exportTemperatureAndHumidityRecords(Integer dateId, HttpServletResponse response){
+ feTempHumDateService.exportTemperatureAndHumidityRecords(dateId, response);
+ }
+
+ /**
+ * 娓╂箍搴︾‘璁�
+ * @param feTempHumDate
+ * @return
+ */
+ @Operation(summary = "娓╂箍搴︾‘璁�")
+ @PostMapping("affirmFeTempHumDate")
+ public Result<?> affirmFeTempHumDate(@RequestBody FeTempHumDate feTempHumDate) {
+ feTempHumDateService.affirmFeTempHumDate(feTempHumDate);
+ return Result.success();
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ForeignRegisterController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ForeignRegisterController.java
new file mode 100644
index 0000000..f041cdd
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ForeignRegisterController.java
@@ -0,0 +1,96 @@
+package com.ruoyi.require.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.require.dto.ForeignRegisterDto;
+import com.ruoyi.require.pojo.ForeignRegister;
+import com.ruoyi.require.service.ForeignRegisterService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 澶栨潵浜哄憳鐧昏 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 07:17:35
+ */
+@Tag(name = "澶栨潵浜哄憳鐧昏")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/foreignRegister")
+public class ForeignRegisterController {
+
+ private ForeignRegisterService foreignRegisterService;
+
+ /**
+ * 澶栨潵浜哄憳鐧昏鍒嗛〉鏌ヨ
+ * @param page
+ * @param foreignRegister
+ * @return
+ */
+ @Operation(summary = "澶栨潵浜哄憳鐧昏鍒嗛〉鏌ヨ")
+ @GetMapping("/pageForeignRegister")
+ public Result<IPage<ForeignRegisterDto>> pageForeignRegister(Page page,ForeignRegisterDto foreignRegister) throws Exception {
+ return Result.success(foreignRegisterService.pageForeignRegister(page, foreignRegister));
+ }
+
+ /**
+ * 澶栨潵浜哄憳鐧昏鏂板
+ * @return
+ */
+ @Operation(summary = "澶栨潵浜哄憳鐧昏鏂板")
+ @PostMapping("/addForeignRegister")
+ public Result addForeignRegister(@RequestBody ForeignRegister foreignRegister){
+ return Result.success(foreignRegisterService.save(foreignRegister));
+ }
+
+ /**
+ * 澶栨潵浜哄憳鐧昏淇敼
+ * @return
+ */
+ @Operation(summary = "澶栨潵浜哄憳鐧昏淇敼")
+ @PostMapping("/updateForeignRegister")
+ public Result updateForeignRegister(@RequestBody ForeignRegister foreignRegister){
+ return Result.success(foreignRegisterService.updateById(foreignRegister));
+ }
+
+ /**
+ * 澶栨潵浜哄憳鐧昏鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "澶栨潵浜哄憳鐧昏鍒犻櫎")
+ @DeleteMapping("/delForeignRegister")
+ public Result delForeignRegister(Integer registerId){
+ return Result.success(foreignRegisterService.removeById(registerId));
+ }
+
+ /**
+ * 澶栨潵浜哄憳鐧昏鏌ョ湅璇︽儏
+ * @return
+ */
+ @Operation(summary = "澶栨潵浜哄憳鐧昏鏌ョ湅璇︽儏")
+ @GetMapping("/getForeignRegisterOne")
+ public Result<ForeignRegister> getForeignRegisterOne(Integer registerId){
+ return Result.success(foreignRegisterService.getById(registerId));
+ }
+
+ /**
+ * 瀵煎嚭澶栨潵浜哄憳鐧昏
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭澶栨潵浜哄憳鐧昏")
+ @GetMapping("/exportForeignRegister")
+ public void exportForeignRegister(ForeignRegisterDto foreignRegister, HttpServletResponse response){
+ foreignRegisterService.exportForeignRegister(foreignRegister, response);
+ }
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/InternalWastesController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/InternalWastesController.java
new file mode 100644
index 0000000..8e0efd2
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/InternalWastesController.java
@@ -0,0 +1,96 @@
+package com.ruoyi.require.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.require.dto.InternalWastesDto;
+import com.ruoyi.require.pojo.InternalWastes;
+import com.ruoyi.require.service.InternalWastesService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 06:39:27
+ */
+@Tag(name = "瀹夊叏鍐呭姟涓夊簾鐧昏")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/internalWastes")
+public class InternalWastesController {
+
+ private InternalWastesService internalWastesService;
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalWastes
+ * @return
+ */
+ @Operation(summary = "瀹夊叏鍐呭姟涓夊簾澶勭悊鍒嗛〉鏌ヨ")
+ @GetMapping("/pageInternalWastes")
+ public Result<IPage<InternalWastesDto>> pageInternalWastes(Page page,InternalWastes internalWastes) throws Exception {
+ return Result.success(internalWastesService.pageInternalWastes(page, internalWastes));
+ }
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊鏂板
+ * @return
+ */
+ @Operation(summary = "瀹夊叏鍐呭姟涓夊簾澶勭悊鏂板")
+ @PostMapping("/addInternalWastes")
+ public Result addInternalWastes(@RequestBody InternalWastesDto internalWastes){
+ return Result.success(internalWastesService.addInternalWastes(internalWastes));
+ }
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊淇敼
+ * @return
+ */
+ @Operation(summary = "瀹夊叏鍐呭姟涓夊簾澶勭悊淇敼")
+ @PostMapping("/updateInternalWastes")
+ public Result updateInternalWastes(@RequestBody InternalWastesDto internalWastes){
+ return Result.success(internalWastesService.updateInternalWastes(internalWastes));
+ }
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊鍒犻櫎
+ * @return
+ */
+ @Operation(summary = "瀹夊叏鍐呭姟涓夊簾澶勭悊鍒犻櫎")
+ @DeleteMapping("/delInternalWastes")
+ public Result delInternalWastes(Integer wastesId){
+ return Result.success(internalWastesService.delInternalWastes(wastesId));
+ }
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊鏌ョ湅璇︽儏
+ * @return
+ */
+ @Operation(summary = "瀹夊叏鍐呭姟涓夊簾澶勭悊鏌ョ湅璇︽儏")
+ @GetMapping("/getInternalWastesOne")
+ public Result<InternalWastesDto> getInternalWastesOne(Integer wastesId){
+ return Result.success(internalWastesService.getInternalWastesOne(wastesId));
+ }
+
+ /**
+ * 瀵煎嚭涓夊簾澶勭悊
+ * @return
+ */
+ @Operation(summary = "瀵煎嚭涓夊簾澶勭悊")
+ @GetMapping("/exportInternalWastes")
+ public void exportInternalWastes(Integer wastesId, HttpServletResponse response){
+ internalWastesService.exportInternalWastes(wastesId, response);
+ }
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java
new file mode 100644
index 0000000..3bcb819
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java
@@ -0,0 +1,75 @@
+package com.ruoyi.require.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.require.pojo.ProcurementSuppliesContents;
+import com.ruoyi.require.service.ProcurementSuppliesContentsService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Tag(name = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鍏徃鍒楄〃")
+@RestController
+@RequestMapping("/procurementSuppliesContents")
+@AllArgsConstructor
+public class ProcurementSuppliesContentsController {
+
+ private ProcurementSuppliesContentsService procurementSuppliesService;
+
+ @Operation(summary = "鏌ヨ鐩綍鍒楄〃")
+ @GetMapping("/directoryListing")
+ public Result directoryListing() {
+ return Result.success(procurementSuppliesService.directoryListing());
+ }
+
+ @Operation(summary = "鏍规嵁id鏌ヨ")
+ @GetMapping("/selectProcurementSuppliesContentById")
+ public Result selectProcurementSuppliesContentById(Integer id) {
+ return Result.success(procurementSuppliesService.getById(id));
+ }
+
+ @Operation(summary = "娣诲姞瀛愯妭鐐�")
+ @PostMapping("/addProcurementSuppliesContents")
+ public Result addProcurementSuppliesContents(@RequestBody ProcurementSuppliesContents procurementSupplies) {
+ procurementSupplies.setUpdateTime(LocalDateTime.now());
+ procurementSuppliesService.save(procurementSupplies);
+ return Result.success(procurementSupplies.getId());
+ }
+
+ @Operation(summary = "鏇存柊瀛愯妭鐐�")
+ @PostMapping("/updateProcurementSuppliesContents")
+ public Result updateProcurementSuppliesContents(@RequestBody ProcurementSuppliesContents procurementSupplies) {
+ return Result.success(procurementSuppliesService.updateById(procurementSupplies));
+ }
+
+ @Operation(summary = "鍒犻櫎瀛愯妭鐐�")
+ @DeleteMapping("/deleteProcurementSuppliesContentById")
+ public Result deleteProcurementSuppliesContentById(Integer id) {
+ List<ProcurementSuppliesContents> list = procurementSuppliesService.list(new LambdaQueryWrapper<ProcurementSuppliesContents>()
+ .eq(ProcurementSuppliesContents::getParentId, id));
+ if(list.size() > 0) {
+ throw new ErrorException("璇ヨ妭鐐瑰惈鏈夊瓙鑺傜偣,璇峰厛鍒犻櫎瀛愯妭鐐�");
+ }
+ procurementSuppliesService.removeById(id);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏌ヨ鎵�鏈夎妭鐐�")
+ @GetMapping("/getNodeNames")
+ public Result getNodeNames() {
+ return Result.success(procurementSuppliesService.getNodeNames());
+ }
+
+ @Operation(summary = "鑾峰彇鎵�鏈変汉鍛�")
+ @GetMapping("/getUserList")
+ public Result getUserList() {
+ return Result.success(procurementSuppliesService.getUserList());
+ }
+
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java
new file mode 100644
index 0000000..96c6860
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java
@@ -0,0 +1,49 @@
+package com.ruoyi.require.controller;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
+import com.ruoyi.require.service.ProcurementSuppliesExpendsService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 03:47:19
+ */
+@Tag(name = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鑰楁潗娑堣��")
+@RestController
+@RequestMapping("/procurementSuppliesExpends")
+public class ProcurementSuppliesExpendsController {
+ @Autowired
+ private ProcurementSuppliesExpendsService procurementSuppliesExpendsService;
+
+ @Operation(summary = "鏌ヨ鎵�鏈夎褰�")
+ @GetMapping("/procurementSuppliesExpendlist")
+ public Result procurementSuppliesExpendlist(Long procurementSuppliesListId) {
+ return Result.success(procurementSuppliesExpendsService.selectAll(procurementSuppliesListId));
+ }
+
+ @Operation(summary = "鏂板娑堣�楄褰�")
+ @PostMapping("/addProcurementSuppliesExpends")
+ public Result addProcurementSuppliesExpends(@RequestBody ProcurementSuppliesExpendDto dto) throws ServiceException {
+ Integer added = procurementSuppliesExpendsService.addExpends(dto);
+
+ if ( added == 0) {
+ throw new RuntimeException("褰撳墠搴撳瓨涓嶈冻");
+ }
+ return Result.success(added);
+ }
+
+ @Operation(summary = "鍒犻櫎娑堣�楄褰�")
+ @DeleteMapping("/deleteProcurementSuppliesExpends")
+ public Result deleteProcurementSuppliesExpends(Long expendId) throws ServiceException {
+ return Result.success(procurementSuppliesExpendsService.deleteExpends(expendId));
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java
new file mode 100644
index 0000000..f355e3f
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java
@@ -0,0 +1,93 @@
+package com.ruoyi.require.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.core.domain.entity.User;
+import com.ruoyi.require.dto.ProcurementSuppliesListDto;
+import com.ruoyi.require.mapper.ProcurementSuppliesListMapper;
+import com.ruoyi.require.mapper.SupplierManagementMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesList;
+import com.ruoyi.require.pojo.SupplierManagement;
+import com.ruoyi.require.service.ProcurementSuppliesListService;
+import com.ruoyi.system.mapper.UserMapper;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏈嶅姟涓庝緵搴斿晢 鑰楁潗鍒楄〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 04:04:32
+ */
+@Tag(name = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鑰楁潗")
+@RestController
+@RequestMapping("/procurementSuppliesList")
+public class ProcurementSuppliesListController {
+ @Autowired
+ private ProcurementSuppliesListService procurementSuppliesListService;
+
+ @Autowired
+ private ProcurementSuppliesListMapper listMapper;
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @Autowired
+ private SupplierManagementMapper supplierManagementMapper;
+
+ @Operation(summary = "鍒嗛〉鏌ヨ")
+ @GetMapping("/procurementSuppliesList")
+ public Result<IPage<ProcurementSuppliesListDto>> procurementSuppliesList(Page page, ProcurementSuppliesListDto list) {
+ return Result.success(procurementSuppliesListService.selectList(page, list));
+ }
+
+ @Operation(summary = "鏍规嵁id鏌ヨ鑰楁潗")
+ @GetMapping("/selectProcurementSuppliesListById")
+ public Result selectProcurementSuppliesListById(Integer id) {
+ ProcurementSuppliesList procurementSuppliesStore = listMapper.selectById(id);
+ ProcurementSuppliesListDto dto = new ProcurementSuppliesListDto();
+ BeanUtils.copyProperties(procurementSuppliesStore, dto);
+
+ User user = userMapper.selectById(procurementSuppliesStore.getPersonInCharge());
+ User updateUser = userMapper.selectById(procurementSuppliesStore.getUpdateUser());
+ SupplierManagement supplierManagement = supplierManagementMapper.selectById(procurementSuppliesStore.getSupplier());
+
+ dto.setPersonInChargeName(user.getName());
+ dto.setUpdateUserName(updateUser.getName());
+ dto.setSupplierName(supplierManagement.getSupplierName());
+ return Result.success(dto);
+ }
+
+ @Operation(summary = "鏂板鑰楁潗")
+ @PostMapping("/addProcurementSuppliesList")
+ public Result addProcurementSuppliesList(@RequestBody ProcurementSuppliesListDto dto) {
+ return Result.success(procurementSuppliesListService.addProcurementSuppliesList(dto));
+ }
+
+ @Operation(summary = "缂栬緫鑰楁潗")
+ @PostMapping("/updateProcurementSuppliesList")
+ public Result updateProcurementSuppliesList(@RequestBody ProcurementSuppliesListDto dto) {
+ return Result.success(procurementSuppliesListService.updateProcurementSuppliesList(dto));
+ }
+
+ @Operation(summary = "鍒犻櫎鑰楁潗")
+ @DeleteMapping("/deleteProcurementSuppliesList")
+ public Result deleteProcurementSuppliesList(Long id) {
+ return Result.success(listMapper.deleteById(id));
+ }
+
+ @Operation(summary = "瀵煎嚭鑰楁潗鍒楄〃")
+ @GetMapping("/exportProcurementSuppliesList")
+ public void exportProcurementSuppliesList(Integer parentId ,HttpServletResponse response) throws Exception {
+ procurementSuppliesListService.exportProcurementSuppliesList(parentId,response);
+
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java
new file mode 100644
index 0000000..a91dcc9
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java
@@ -0,0 +1,80 @@
+package com.ruoyi.require.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.require.dto.StoreDto;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+import com.ruoyi.require.service.ProcurementSuppliesConsumablesService;
+import com.ruoyi.require.service.ProcurementSuppliesStoreService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Tag(name = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鑰楁潗鍏ュ簱")
+@RestController
+@RequestMapping("/procurementSuppliesStore")
+@AllArgsConstructor
+public class ProcurementSuppliesStoreController {
+
+ private ProcurementSuppliesStoreService storeService;
+
+ private ProcurementSuppliesConsumablesService consumablesService;
+
+
+ @Operation(summary = "鑰楁潗鍏ュ簱鍒嗛〉鏌ヨ")
+ @GetMapping("/storeList")
+ public Result storeList(Page page,StoreDto storeDto) throws Exception {
+ return Result.success(storeService.selectStoreList(page, storeDto));
+ }
+
+ @Operation(summary = "娣诲姞鑰楁潗鍏ュ簱鍒楄〃")
+ @PostMapping("/addStore")
+ public Result addStore(@RequestBody Map<String,Object> map) {
+ storeService.addStore(map);
+ return Result.success();
+ }
+
+ @Operation(summary = "鍒犻櫎鑰楁潗鍏ュ簱")
+ @DeleteMapping("/deleteStore")
+ public Result deleteStore(@RequestParam("id") Integer id,@RequestParam("consumablesId") Integer consumablesId) {
+ storeService.deleteStore(id,consumablesId);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏇存柊鑰楁潗鍏ュ簱")
+ @PostMapping("/updateStore")
+ public Result updateStore(@RequestBody Map<String,Object> map) {
+ storeService.updateStore(map);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏍规嵁id鏌ヨ鑰楁潗鍏ュ簱")
+ @GetMapping("/selectStoreById")
+ public Result selectStore(Integer id) {
+ HashMap<String, Object> map = new HashMap<>();
+ ProcurementSuppliesStore procurementSuppliesStore = storeService.getById(id);
+ List<ProcurementSuppliesConsumables> list = consumablesService.list(new LambdaQueryWrapper<ProcurementSuppliesConsumables>()
+ .eq(ProcurementSuppliesConsumables::getStoreId, id));
+ map.put("store", procurementSuppliesStore);
+ map.put("consumables", list);
+ return Result.success(map);
+ }
+
+ @Operation(summary = "瀵煎嚭Excel")
+ @GetMapping("/exportExcel")
+ public void exportExcel(Integer parentId, HttpServletResponse response) throws IOException {
+ storeService.exportExcel(parentId, response);
+ }
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/SupplierManagementController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/SupplierManagementController.java
new file mode 100644
index 0000000..216a5ab
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/SupplierManagementController.java
@@ -0,0 +1,91 @@
+package com.ruoyi.require.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.SecurityUtils;
+import com.ruoyi.require.pojo.SupplierManagement;
+import com.ruoyi.require.service.ProcurementSuppliesContentsService;
+import com.ruoyi.require.service.SupplierManagementService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:46:45
+ */
+@Tag(name = "渚涘簲鍟嗙鐞�")
+@RestController
+@RequestMapping("/supplierManagement")
+@AllArgsConstructor
+public class SupplierManagementController {
+
+ @Autowired
+ private SupplierManagementService supplierManagementService;
+
+ @Autowired
+ private ProcurementSuppliesContentsService procurementSuppliesContentsService;
+
+
+ @Operation(summary = "鏌ヨ渚涙柟鍚嶅綍")
+ @GetMapping("/selectSupplierManagementByParentId/{parentId}")
+ public Result<List<SupplierManagement>> selectSupplierManagementByParentId(@PathVariable Integer parentId) throws Exception {
+ return Result.success(supplierManagementService.selectSupplierManagementByParentId(parentId));
+ }
+
+
+ @Operation(summary = "鍒嗛〉鏌ヨ鍚堟牸渚涙柟鍚嶅綍")
+ @GetMapping("/selectQualifiedSupplierManagementPage")
+ public Result<IPage<SupplierManagement>> selectQualifiedSupplierManagement(SupplierManagement supplierManagement, Page page) throws Exception {
+ return Result.success(supplierManagementService.selectQualifiedSupplierManagement(page, supplierManagement));
+ }
+
+ @Operation(summary = "鏍规嵁ID鏌ヨ渚涘簲鍟�")
+ @GetMapping("/selectQualifiedSupplierManagementById/{supplierManagementId}")
+ public Result<List<SupplierManagement>> selectQualifiedSupplierManagementById(@PathVariable Integer supplierManagementId) throws Exception {
+ return Result.success(supplierManagementService.selectQualifiedSupplierManagementById(supplierManagementId));
+ }
+
+ @Operation(summary = "鏂板渚涘簲鍟�")
+ @PostMapping("/addSupplierManagement")
+ public Result addSupplierManagement(@RequestBody SupplierManagement supplierManagement) {
+ return Result.success(supplierManagementService.save(supplierManagement));
+ }
+
+ @Operation(summary = "淇敼渚涘簲鍟�")
+ @PostMapping("/updateSupplierManagement")
+ public Result updateSupplierManagement(@RequestBody SupplierManagement supplierManagement) {
+ supplierManagement.setUpdateUser(SecurityUtils.getUserId().intValue());
+ return Result.success(supplierManagementService.updateById(supplierManagement));
+ }
+
+ @Operation(summary = "鍒犻櫎渚涘簲鍟�")
+ @DeleteMapping("/delSupplierManagement")
+ public Result delSupplierManagement(Integer supplierManagementId) {
+ return Result.success(supplierManagementService.removeById(supplierManagementId));
+ }
+
+ @Operation(summary = "瀵煎嚭渚涘簲鍟�")
+ @PostMapping("/exportSupplierManagement/{parentId}")
+ public void exportSupplierManagement(@PathVariable Integer parentId, HttpServletResponse response) throws Exception {
+ supplierManagementService.exportSupplierManagement(parentId, response);
+ }
+
+ @Operation(summary = "鏌ヨ鍏ㄩ儴渚涙柟鍚嶅綍")
+ @GetMapping("/selectSupplierManagementAll")
+ public Result<List<SupplierManagement>> selectSupplierManagementAll() throws Exception {
+ return Result.success(supplierManagementService.selectSupplierManagementAll());
+ }
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java
new file mode 100644
index 0000000..31e90fa
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java
@@ -0,0 +1,77 @@
+package com.ruoyi.require.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.require.pojo.SuppliersDirectoryContents;
+import com.ruoyi.require.service.SuppliersDirectoryContentsService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-17 06:14:51
+ */
+@Tag(name = "渚涘簲鍟嗙鐞嗘爲")
+@RestController
+@RequestMapping("/suppliersDirectoryContents")
+public class SuppliersDirectoryContentsController {
+
+ @Autowired
+ private SuppliersDirectoryContentsService suppliersDirectoryContentsService;
+
+ @Operation(summary = "鏌ヨ鐩綍鍒楄〃")
+ @GetMapping("/suppliersDirectoryContentsListing")
+ public Result suppliersDirectoryContentsListing() {
+ return Result.success(suppliersDirectoryContentsService.directoryListing());
+
+ }
+
+ @Operation(summary = "鏍规嵁id鏌ヨ")
+ @GetMapping("/selectSuppliersDirectoryContentsById")
+ public Result selectSuppliersDirectoryContentsById(Integer id) {
+ return Result.success(suppliersDirectoryContentsService.getById(id));
+ }
+
+ @Operation(summary = "娣诲姞瀛愯妭鐐�")
+ @PostMapping("/addSuppliersDirectoryContents")
+ public Result addSuppliersDirectoryContents(@RequestBody SuppliersDirectoryContents suppliersDirectoryContents ) {
+ suppliersDirectoryContents.setUpdateTime(LocalDateTime.now());
+ suppliersDirectoryContentsService.save(suppliersDirectoryContents);
+ return Result.success(suppliersDirectoryContents.getId());
+ }
+
+ @Operation(summary = "鏇存柊瀛愯妭鐐�")
+ @PostMapping("/updateSuppliersDirectoryContents")
+ public Result updateSuppliersDirectoryContents(@RequestBody SuppliersDirectoryContents suppliersDirectoryContents) {
+ return Result.success(suppliersDirectoryContentsService.updateById(suppliersDirectoryContents));
+ }
+
+ @Operation(summary = "鍒犻櫎瀛愯妭鐐�")
+ @DeleteMapping("/deleteSuppliersDirectoryContentsById")
+ public Result deleteSuppliersDirectoryContentsById(Integer id) {
+ List<SuppliersDirectoryContents> list = suppliersDirectoryContentsService.list(new LambdaQueryWrapper<SuppliersDirectoryContents>()
+ .eq(SuppliersDirectoryContents::getParentId, id));
+ if(list.size() > 0) {
+ throw new ErrorException("璇ヨ妭鐐瑰惈鏈夊瓙鑺傜偣,璇峰厛鍒犻櫎瀛愯妭鐐�");
+ }
+ suppliersDirectoryContentsService.removeById(id);
+ return Result.success();
+ }
+
+ @Operation(summary = "鏌ヨ鎵�鏈夎妭鐐�")
+ @GetMapping("/getSuppliersDirectoryContentsNodeNames")
+ public Result getSuppliersDirectoryContentsNodeNames() {
+ return Result.success(suppliersDirectoryContentsService.getSuppliersDirectoryContentsNodeNames());
+ }
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java
new file mode 100644
index 0000000..a369361
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AcceptanceDto {
+
+ private FeStandardSubstanceAcceptance acceptance;
+
+ private List<FeStandardSubstanceAcceptanceInspection> list;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationAddDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationAddDto.java
new file mode 100644
index 0000000..8bea73c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationAddDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FeIllumination;
+import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FeIlluminationAddDto extends FeIllumination {
+
+ @Schema(description = "璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩�")
+ private List<FeIlluminationDetectionArea> illuminationDetectionAreaList;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationDto.java
new file mode 100644
index 0000000..2b3ec9c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FeIllumination;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class FeIlluminationDto extends FeIllumination {
+ @Schema(description = "妫�娴嬭��")
+ private String checkerUser;
+
+ @Schema(description = "鏍告煡浜�")
+ private String testerUser;
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "璁惧缂栧彿")
+ private String managementNumber;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationExportDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationExportDto.java
new file mode 100644
index 0000000..3853805
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationExportDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FeIllumination;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/28
+ */
+@Data
+public class FeIlluminationExportDto extends FeIllumination {
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "璁惧缂栧彿")
+ private String managementNumber;
+
+ @Schema(description = "鏍″噯鏃ユ湡")
+ private String calibrationDateString;
+
+ @Schema(description = "涓嬫鏍″噯鏃ユ湡")
+ private String nextCalibrationDateString;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableAddDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableAddDto.java
new file mode 100644
index 0000000..b449811
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableAddDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FeMeasuredQuantity;
+import com.ruoyi.require.pojo.FePowerStable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FePowerStableAddDto extends FePowerStable {
+
+ @Schema(description = "璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�-娴嬪畾閲�")
+ private List<FeMeasuredQuantity> feMeasuredQuantityList;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableDto.java
new file mode 100644
index 0000000..2c547c8
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FePowerStable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class FePowerStableDto extends FePowerStable {
+
+ @Schema(description = "妫�娴嬭��")
+ private String checkerUser;
+
+ @Schema(description = "鏍告煡浜�")
+ private String testerUser;
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "璁惧缂栧彿")
+ private String managementNumber;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableExportDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableExportDto.java
new file mode 100644
index 0000000..88d843f
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableExportDto.java
@@ -0,0 +1,30 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FePowerStable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/28
+ */
+@Data
+public class FePowerStableExportDto extends FePowerStable {
+
+ @Schema(description = "娴嬭瘯鏃ユ湡")
+ private String testDateString;
+
+ @Schema(description = "璁惧鍚嶇О")
+ private String deviceName;
+
+ @Schema(description = "璁惧缂栧彿")
+ private String managementNumber;
+
+ @Schema(description = "鏍″噯鏃ユ湡")
+ private String calibrationDateString;
+
+ @Schema(description = "涓嬫鏍″噯鏃ユ湡")
+ private String nextCalibrationDateString;
+
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumDateDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumDateDto.java
new file mode 100644
index 0000000..358543f
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumDateDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FeTempHumDate;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class FeTempHumDateDto extends FeTempHumDate {
+
+ @Schema(description = "鍒涘缓浜�")
+ private String createName;
+
+ @Schema(description = "璁板綍鍛�")
+ private String registrarUserName;
+
+ @Schema(description = "娓╁害鍖洪棿")
+ private String temperatureSection;
+
+ @Schema(description = "婀垮害鍖洪棿")
+ private String humiditySection;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumRecordDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumRecordDto.java
new file mode 100644
index 0000000..cf64329
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumRecordDto.java
@@ -0,0 +1,64 @@
+package com.ruoyi.require.dto;
+
+import com.deepoove.poi.data.PictureRenderData;
+import com.ruoyi.require.pojo.FeTempHumRecord;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class FeTempHumRecordDto extends FeTempHumRecord {
+
+ @Schema(description = "涓嬪崍璁板綍鍛樺悕绉�")
+ private String afternoonRecorderUser;
+
+ @Schema(description = "涓婂崍璁板綍鍛樺悕绉�")
+ private String morningRecorderUser;
+
+ @Schema(description = "妫�娴嬪ぉ")
+ private Integer month;
+
+ @Schema(description = "涓嬪崍鏃堕棿")
+ private String afternoonTimeStr;
+
+ @Schema(description = "涓婂崍-鏃堕棿")
+ private String morningTestTimeStr;
+
+ @Schema(description = "妫�娴嬪ぉ")
+ private Integer monthDay;
+
+ @Schema(description = "鐧昏鍛�")
+ private Integer registrarUserId;
+
+ @Schema(description = "璇曢獙鍖哄煙鍚嶇О")
+ private String testAreaName;
+
+ @Schema(description = "涓婂崍璁板綍鍛樼鍚嶅湴鍧�")
+ private String morningRecorderUrl;
+
+ @Schema(description = "涓嬪崍璁板綍鍛樼鍚嶅湴鍧�")
+ private String afternoonRecorderUrl;
+
+
+ @Schema(description = "涓婂崍璁板綍鍛樼鍚嶅湴鍧�")
+ private PictureRenderData morningRecorderUrlRender;
+
+ @Schema(description = "涓嬪崍璁板綍鍛樼鍚嶅湴鍧�")
+ private PictureRenderData afternoonRecorderUrlRender;
+
+
+ @Schema(description = "鏈�楂樻俯搴�")
+ private Double temperatureHighest;
+
+ @Schema(description = "鏈�浣庢俯搴�")
+ private Double temperatureLowest;
+
+ @Schema(description = "鏈�楂樻箍搴�")
+ private Double humidityHighest;
+
+ @Schema(description = "鏈�浣庢箍搴�")
+ private Double humidityLowest;
+
+ @Schema(description = "鏄惁鏄枒闂暟鎹�")
+ private Integer isIssue;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/ForeignRegisterDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/ForeignRegisterDto.java
new file mode 100644
index 0000000..eef9be5
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/ForeignRegisterDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.require.dto;
+
+import com.deepoove.poi.data.PictureRenderData;
+import com.ruoyi.require.pojo.ForeignRegister;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/19
+ */
+@Data
+public class ForeignRegisterDto extends ForeignRegister {
+
+ @Schema(description = "寮�濮嬫椂闂�")
+ private String beginDate;
+
+ @Schema(description = "缁撴潫鏃堕棿")
+ private String endDate;
+
+ @Schema(description = "闄悓浜哄憳绛惧悕")
+ private PictureRenderData accompanyingRender;
+
+ @Schema(description = "鎵瑰噯浜哄憳绛惧悕")
+ private PictureRenderData approveRender;
+
+ @Schema(description = "闄悓浜哄憳绛惧悕鍦板潃")
+ private String accompanyingUrl;
+
+ @Schema(description = "闄悓浜哄憳绛惧悕鍦板潃")
+ private String approveUrl;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/InternalWastesDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/InternalWastesDto.java
new file mode 100644
index 0000000..dea1bdd
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/InternalWastesDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.InternalWastes;
+import com.ruoyi.require.pojo.InternalWastesDetail;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/19
+ */
+@Data
+public class InternalWastesDto extends InternalWastes {
+
+ @Schema(description = "涓夊簾鐧昏璇︽儏")
+ private List<InternalWastesDetail> wastesDetailList;
+
+ @Schema(description = "鍒涘缓浜�")
+ private String createUserName;
+
+ @Schema(description = "淇敼浜�")
+ private String updateUserName;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java
new file mode 100644
index 0000000..6022164
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java
@@ -0,0 +1,11 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
+import lombok.Data;
+
+@Data
+public class ProcurementSuppliesExpendDto extends ProcurementSuppliesExpends {
+ private String listName; // 椤圭洰鑰楁潗鍚嶇О
+ private String enterUserName; // 褰曞叆浜哄悕绉�
+ private String updateUserName; // 鏇存柊浜哄悕绉�
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesListDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesListDto.java
new file mode 100644
index 0000000..1e70361
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesListDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.require.pojo.ProcurementSuppliesList;
+import lombok.Data;
+
+@Data
+public class ProcurementSuppliesListDto extends ProcurementSuppliesList {
+ @ExcelProperty("鍙傝�冧緵搴斿晢")
+ private String supplierName; // 渚涘簲鍟嗗悕绉�
+ @ExcelProperty("鏇存柊浜�")
+ private String updateUserName; // 鏇存柊浜哄悕绉�
+ @ExcelProperty("璐熻矗浜�")
+ private String personInChargeName; // 璐熻矗浜哄悕绉�
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java
new file mode 100644
index 0000000..818c205
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+import lombok.Data;
+
+@Data
+public class StoreDto extends ProcurementSuppliesStore {
+
+
+ private String consumablesName;
+
+ private Integer storeNumber;
+
+ private Double totalPrice;
+
+ private String registrantName;
+
+ private String storageUserName;
+
+ private Integer consumablesId;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/SupplierManagementDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/SupplierManagementDto.java
new file mode 100644
index 0000000..321017f
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/SupplierManagementDto.java
@@ -0,0 +1,67 @@
+package com.ruoyi.require.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@ExcelIgnoreUnannotated
+public class SupplierManagementDto {
+
+ @Schema(description = "渚涘簲鍟�")
+ @ExcelProperty("渚涘簲鍟�")
+ private String supplierName;
+
+ @Schema(description = "缂栧彿")
+ @ExcelProperty("缂栧彿")
+ private String supplierRef;
+
+ @Schema(description = "渚涘簲鍟嗙墿鍝佹湇鍔″悕绉�")
+ @ExcelProperty("渚涘簲鍟嗙墿鍝佹湇鍔″悕绉�")
+ private String supplierItemServiceName;
+
+ @Schema(description = "閭紪")
+ @ExcelProperty("閭紪")
+ private String postalCode;
+
+ @Schema(description = "鍦板潃")
+ @ExcelProperty("鍦板潃")
+ private String adress;
+
+ @Schema(description = "鑱旂郴浜�")
+ @ExcelProperty("鑱旂郴浜�")
+ private String contacts;
+
+ @Schema(description = "鑱旂郴鐢佃瘽")
+ @ExcelProperty("鑱旂郴鐢佃瘽")
+ private String phone;
+
+ @Schema(description = "鎴峰悕")
+ @ExcelProperty("鎴峰悕")
+ private String householdName;
+
+ @Schema(description = "浼犵湡")
+ @ExcelProperty("浼犵湡")
+ private String fax;
+
+ @Schema(description = "寮�鎴疯")
+ @ExcelProperty("寮�鎴疯")
+ private String openingName;
+
+ @Schema(description = "缃戝潃")
+ @ExcelProperty("缃戝潃")
+ private String website;
+
+ @Schema(description = "璐﹀彿")
+ @ExcelProperty("璐﹀彿")
+ private String accountName;
+
+ @Schema(description = "email")
+ @ExcelProperty("email")
+ private String email;
+
+ @Schema(description = "澶囨敞")
+ @ExcelProperty("澶囨敞")
+ private String remarks;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java b/cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java
new file mode 100644
index 0000000..5048365
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java
@@ -0,0 +1,36 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class FeCalibrationScheduleExport {
+ @ExcelProperty("浠櫒鍚嶇О")
+ private String instrumentName;
+
+ @ExcelProperty("瑙勬牸鍨嬪彿")
+ private String model;
+
+ @ExcelProperty("绠$悊缂栧彿")
+ private Integer managementNumber;
+
+ @ExcelProperty("鎶�鏈寚鏍�")
+ private String technicalIndicators;
+
+ @ExcelProperty("妫�瀹氬懆鏈�")
+ private String verificationCyde;
+
+ @ExcelProperty("妫�瀹氬崟浣�")
+ private String verificationUnit;
+
+ @ExcelProperty("鏈�杩戞瀹氭椂闂�")
+ private LocalDateTime recentlyTime;
+
+ @ExcelProperty("璁″垝涓嬫妫�瀹氭椂闂�")
+ private LocalDateTime nextTime;
+
+ @ExcelProperty("澶囨敞")
+ private String remark;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java b/cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java
new file mode 100644
index 0000000..b47e79a
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class FeLightningProtectionExcel {
+ @ExcelProperty("鍘熸枃浠跺悕")
+ private String fileName;
+
+ @ExcelProperty("妫�娴嬫棩鏈�")
+ private String detectionDate;
+
+ @ExcelProperty("鏈夋晥鏈�")
+ private String termValidity;
+
+ @ExcelProperty("妫�娴嬪崟浣�")
+ private String detectionUnit;
+
+ @ExcelProperty("鍒涘缓鏃堕棿")
+ private String createTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java b/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java
new file mode 100644
index 0000000..2f0691c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java
@@ -0,0 +1,54 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class FeStandardSubstanceExcel {
+ @ExcelProperty("鏍囧噯鐗╄川鍚嶇О")
+ private String name;
+
+ @ExcelProperty("瑙勬牸鍨嬪彿")
+ private String model;
+
+ @ExcelProperty("鐢熶骇鍘傚")
+ private String factoryManufacturer;
+
+ @ExcelProperty("鍑哄満缂栧彿")
+ private String factoryNum;
+
+ @ExcelProperty("绠$悊缂栧彿")
+ private String manageNum;
+
+ @ExcelProperty("涓嶇‘瀹氬害")
+ private String uncertainty;
+
+ @ExcelProperty("鏁伴噺")
+ private Long quantity;
+
+ @ExcelProperty("璐疆鏃ユ湡")
+ private LocalDateTime acquisitionDate;
+
+ @ExcelProperty("鏈夋晥鏈�")
+ private LocalDateTime effectiveDate;
+
+ @ExcelProperty("鏂囨。缂栧彿")
+ private String fileNum;
+
+ @ExcelProperty("瀛樻斁浣嶇疆")
+ private String position;
+
+ @ExcelProperty("鍊熻皟鐘舵��")
+ private Integer state;
+
+ @ExcelProperty("澶囨敞")
+ private String remark;
+
+ @ExcelProperty("鍒涘缓浜�")
+ private String createUser;
+
+ @ExcelProperty("鍒涘缓鏃ユ湡")
+ private LocalDateTime createTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceImport.java b/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceImport.java
new file mode 100644
index 0000000..1588fd8
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceImport.java
@@ -0,0 +1,46 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+@Data
+@ColumnWidth(22)
+public class FeStandardSubstanceImport {
+
+ @ExcelProperty("鏍囧噯鐗╄川鍚嶇О*")
+ private String name;
+
+ @ExcelProperty("瑙勬牸鍨嬪彿*")
+ private String model;
+
+ @ExcelProperty("鐢熶骇鍘傚*")
+ private String factoryManufacturer;
+
+ @ExcelProperty("鍑哄巶缂栧彿*")
+ private String factoryNum;
+
+ @ExcelProperty("绠$悊缂栧彿*")
+ private String manageNum;
+
+ @ExcelProperty("涓嶇‘瀹氬害*")
+ private String uncertainty;
+
+ @ExcelProperty("鏁伴噺*")
+ private String quantity;
+
+ @ExcelProperty("璐疆鏃ユ湡*(yyyy-MM-dd)")
+ private String acquisitionDate;
+
+ @ExcelProperty("鏈夋晥鏈�*(yyyy-MM-dd)")
+ private String effectiveDate;
+
+ @ExcelProperty("妗f缂栧彿*")
+ private String fileNum;
+
+ @ExcelProperty("瀛樻斁浣嶇疆*")
+ private String position;
+
+ @ExcelProperty("澶囨敞")
+ private String remark;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java b/cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java
new file mode 100644
index 0000000..d0d7b88
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java
@@ -0,0 +1,37 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class StoreExcel {
+ @ExcelProperty("鍏ュ簱鍗曞彿")
+ private String oddNumbers;
+
+ @ExcelProperty("鑰楁潗鍚嶇О")
+ private String consumablesName;
+
+ @ExcelProperty("鍏ュ簱鏁伴噺")
+ private Integer storeNumber;
+
+ @ExcelProperty("鍏ュ簱鎬讳环")
+ private Double totalPrice;
+
+ @ExcelProperty("鍏ュ簱浜�")
+ private String storageUserName;
+
+ @ExcelProperty("鍏ュ簱鏃ユ湡")
+ private LocalDate storageTime;
+
+ @ExcelProperty("璇存槑")
+ private String remark;
+
+ @ExcelProperty("鐧昏浜�")
+ private String registrantName;
+
+ @ExcelProperty("鐧昏鏃ユ湡")
+ private LocalDate registrantTime;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java
new file mode 100644
index 0000000..9452260
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.CollectLaboratory;
+
+/**
+ * 娓╂箍搴﹂噰闆嗗疄楠屽缁戝畾
+ *
+ * @author zhuo
+ * @since 2024-12-18
+ */
+public interface CollectLaboratoryMapper extends BaseMapper<CollectLaboratory> {
+
+}
+
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java
new file mode 100644
index 0000000..957f967
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.CollectTemperatureHumidity;
+
+/**
+ * 娓╂箍搴﹂噰闆嗕俊鎭�
+ *
+ * @author zhuo
+ * @since 2024-12-18
+ */
+public interface CollectTemperatureHumidityMapper extends BaseMapper<CollectTemperatureHumidity> {
+
+}
+
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java
new file mode 100644
index 0000000..0194659
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.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.require.pojo.FeCalibrationSchedule;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 02:53:05
+ */
+public interface FeCalibrationScheduleMapper extends BaseMapper<FeCalibrationSchedule> {
+
+ IPage<FeCalibrationSchedule> ipage(Page page, @Param("instrumentName") String instrumentName, @Param("managementNumber") String managementNumber);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationDetectionAreaMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationDetectionAreaMapper.java
new file mode 100644
index 0000000..7dbbfd2
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationDetectionAreaMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:28
+ */
+public interface FeIlluminationDetectionAreaMapper extends BaseMapper<FeIlluminationDetectionArea> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationMapper.java
new file mode 100644
index 0000000..ec63cdc
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.require.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.require.dto.FeIlluminationDto;
+import com.ruoyi.require.dto.FeIlluminationExportDto;
+import com.ruoyi.require.pojo.FeIllumination;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:15:57
+ */
+public interface FeIlluminationMapper extends BaseMapper<FeIllumination> {
+
+ IPage<FeIlluminationDto> getFeLightningProtection(Page page);
+
+ /**
+ * 鏌ヨ鐓ф槑璁板綍
+ * @param intensityIlluminationId
+ * @return
+ */
+ FeIlluminationExportDto selectFeIllumination(Integer intensityIlluminationId);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeLightningProtectionMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeLightningProtectionMapper.java
new file mode 100644
index 0000000..995561e
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeLightningProtectionMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.excel.FeLightningProtectionExcel;
+import com.ruoyi.require.pojo.FeLightningProtection;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:36
+ */
+public interface FeLightningProtectionMapper extends BaseMapper<FeLightningProtection> {
+
+ List<FeLightningProtectionExcel> exportOfLightningProtectionDetection();
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeMeasuredQuantityMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeMeasuredQuantityMapper.java
new file mode 100644
index 0000000..86cca2d
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeMeasuredQuantityMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.FeMeasuredQuantity;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�-娴嬪畾閲� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:44
+ */
+public interface FeMeasuredQuantityMapper extends BaseMapper<FeMeasuredQuantity> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FePowerStableMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FePowerStableMapper.java
new file mode 100644
index 0000000..7f345bc
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FePowerStableMapper.java
@@ -0,0 +1,34 @@
+package com.ruoyi.require.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.require.dto.FePowerStableDto;
+import com.ruoyi.require.dto.FePowerStableExportDto;
+import com.ruoyi.require.pojo.FePowerStable;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:52
+ */
+public interface FePowerStableMapper extends BaseMapper<FePowerStable> {
+
+ IPage<FePowerStableDto> getLaboratoryFacilityPowerStablePage(Page page);
+
+ Map<String, Objects> getCalibrationDate(Integer deviceId);
+
+ /**
+ * 鏌ヨ鐢垫簮绋冲畾鎬�
+ * @param powerStableId
+ * @return
+ */
+ FePowerStableExportDto selectPowerStable(@Param("powerStableId") Integer powerStableId);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java
new file mode 100644
index 0000000..0eea361
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+
+/**
+ * <p>
+ * 楠屾敹寮�绠辫褰� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:30:09
+ */
+public interface FeStandardSubstanceAcceptanceInspectionMapper extends BaseMapper<FeStandardSubstanceAcceptanceInspection> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java
new file mode 100644
index 0000000..b43f56d
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.vo.AcceptanceVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:29:41
+ */
+public interface FeStandardSubstanceAcceptanceMapper extends BaseMapper<FeStandardSubstanceAcceptance> {
+
+
+ IPage<AcceptanceVo> getPageAcceptance(Page page, @Param("name")String name);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java
new file mode 100644
index 0000000..e544c4a
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstance;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:58:59
+ */
+public interface FeStandardSubstanceMapper extends BaseMapper<FeStandardSubstance> {
+
+ IPage<FeStandardSubstance> getPage(Page page,@Param("ew")FeStandardSubstance feStandardSubstance);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java
new file mode 100644
index 0000000..c12e23d
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstanceRecord;
+import com.ruoyi.require.vo.SubstanceRecordVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 01:49:11
+ */
+public interface FeStandardSubstanceRecordMapper extends BaseMapper<FeStandardSubstanceRecord> {
+
+
+ IPage<SubstanceRecordVo> getPage(Page page,@Param("ew") SubstanceRecordVo vo);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumDateMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumDateMapper.java
new file mode 100644
index 0000000..a3f00ac
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumDateMapper.java
@@ -0,0 +1,30 @@
+package com.ruoyi.require.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.require.dto.FeTempHumDateDto;
+import com.ruoyi.require.pojo.FeTempHumDate;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴� 鍖哄煙 -鐖� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 11:02:18
+ */
+public interface FeTempHumDateMapper extends BaseMapper<FeTempHumDate> {
+
+ IPage<FeTempHumDateDto> getFeTempHumDate(Page page, @Param("ew") QueryWrapper<FeTempHumDateDto> ew);
+
+ /**
+ * 鏌ヨ杩欎釜鏈堟槸鍚︽湁璇ュ疄楠屽鐨勪换鍔�
+ * @param laboratory 瀹為獙瀹�
+ * @param formattedDate 褰撳墠鏈堜唤
+ * @return 杩斿洖鏉℃暟
+ */
+ int selectFeTempHumDateIncludeFormattedDate(@Param("laboratory") String laboratory, @Param("formattedDate") String formattedDate);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumRecordMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumRecordMapper.java
new file mode 100644
index 0000000..e132e14
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumRecordMapper.java
@@ -0,0 +1,30 @@
+package com.ruoyi.require.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.require.dto.FeTempHumRecordDto;
+import com.ruoyi.require.pojo.FeTempHumRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:28:52
+ */
+public interface FeTempHumRecordMapper extends BaseMapper<FeTempHumRecord> {
+
+ IPage<FeTempHumRecordDto> getFeTempHumRecordPage(Page page, @Param("dateId") Integer dateId);
+
+ /**
+ * 鏌ヨ鏈夋棩鏈熶絾鏄湭濉啓鍚嶅瓧鐨�
+ * @return
+ */
+ List<FeTempHumRecordDto> selectNoaffirm(LocalDate date);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ForeignRegisterMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ForeignRegisterMapper.java
new file mode 100644
index 0000000..f81c973
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ForeignRegisterMapper.java
@@ -0,0 +1,39 @@
+package com.ruoyi.require.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.require.dto.ForeignRegisterDto;
+import com.ruoyi.require.pojo.ForeignRegister;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 澶栨潵浜哄憳鐧昏 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 07:17:35
+ */
+public interface ForeignRegisterMapper extends BaseMapper<ForeignRegister> {
+
+ /**
+ * 澶栨潵浜哄憳鐧昏鍒嗛〉鏌ヨ
+ * @return
+ */
+ IPage<ForeignRegisterDto> pageForeignRegister(Page page, @Param("ew") QueryWrapper<ForeignRegisterDto> ew,
+ @Param("beginDate") String beginDate,
+ @Param("endDate") String endDate);
+
+ /**
+ * 鏌ヨ澶栨潵浜哄憳鐧昏鍒楄〃
+ * @param foreignRegister
+ * @return
+ */
+ List<ForeignRegisterDto> getForeignRegisterList(@Param("ew") QueryWrapper<ForeignRegisterDto> ew,
+ @Param("beginDate") String beginDate,
+ @Param("endDate") String endDate);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesDetailMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesDetailMapper.java
new file mode 100644
index 0000000..58525cf
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesDetailMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.InternalWastesDetail;
+
+/**
+ * <p>
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏璇︽儏 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 06:39:54
+ */
+public interface InternalWastesDetailMapper extends BaseMapper<InternalWastesDetail> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesMapper.java
new file mode 100644
index 0000000..1d91e2b
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesMapper.java
@@ -0,0 +1,31 @@
+package com.ruoyi.require.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.require.dto.InternalWastesDto;
+import com.ruoyi.require.pojo.InternalWastes;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 06:39:27
+ */
+@Mapper
+public interface InternalWastesMapper extends BaseMapper<InternalWastes> {
+
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏鍒嗛〉鏌ヨ
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<InternalWastesDto> pageInternalWastes(Page page, @Param("ew") QueryWrapper<InternalWastes> ew);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java
new file mode 100644
index 0000000..8d9eddf
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ProcurementSuppliesConsumablesMapper extends BaseMapper<ProcurementSuppliesConsumables> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesContentsMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesContentsMapper.java
new file mode 100644
index 0000000..6f41af3
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesContentsMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesContents;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ProcurementSuppliesContentsMapper extends BaseMapper<ProcurementSuppliesContents> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java
new file mode 100644
index 0000000..217f106
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 03:47:19
+ */
+public interface ProcurementSuppliesExpendsMapper extends BaseMapper<ProcurementSuppliesExpends> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesListMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesListMapper.java
new file mode 100644
index 0000000..ad5ec8d
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesListMapper.java
@@ -0,0 +1,30 @@
+package com.ruoyi.require.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.require.dto.ProcurementSuppliesListDto;
+import com.ruoyi.require.pojo.ProcurementSuppliesList;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟涓庝緵搴斿晢 鑰楁潗鍒楄〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 04:04:32
+ */
+@Mapper
+public interface ProcurementSuppliesListMapper extends BaseMapper<ProcurementSuppliesList> {
+ IPage<ProcurementSuppliesList> selectProcurementSuppliesList(Page page, @Param("ew") ProcurementSuppliesListDto ew);
+
+ ProcurementSuppliesList selectProcurementSuppliesListForUpdate(@Param("id") Long id);
+
+ List<ProcurementSuppliesList> selectProcurementSuppliesListAll(@Param("ew") ProcurementSuppliesListDto ew);
+
+ List<ProcurementSuppliesList> selectProcurementSuppliesListByContentsId(@Param("id") Integer contentsId);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java
new file mode 100644
index 0000000..93b16ec
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.require.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.require.dto.StoreDto;
+import com.ruoyi.require.excel.StoreExcel;
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProcurementSuppliesStoreMapper extends BaseMapper<ProcurementSuppliesStore> {
+
+ IPage<StoreDto> selectStoreList(Page page, @Param("ew") QueryWrapper<StoreDto> ew);
+
+ /**
+ * 鍜屾爲鍏宠仈鐨勬潯浠讹紝锛岋紝鐩墠娌℃湁鍏宠仈鍏崇郴 WHERE s.contents_id = #{contentsId}
+ * @param contentsId
+ * @return
+ */
+ List<StoreExcel> exportExcel(Integer contentsId);
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/SupplierManagementMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/SupplierManagementMapper.java
new file mode 100644
index 0000000..d22d549
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/SupplierManagementMapper.java
@@ -0,0 +1,31 @@
+package com.ruoyi.require.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.require.pojo.SupplierManagement;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:46:45
+ */
+@Mapper
+public interface SupplierManagementMapper extends BaseMapper<SupplierManagement> {
+
+ IPage<SupplierManagement> pageSupplierManagement(Page page, @Param("ew") QueryWrapper<SupplierManagement> supplierManagementQueryWrapper);
+
+ IPage<SupplierManagement> selectQualifiedSupplierManagement(Page page, @Param("ew") QueryWrapper<SupplierManagement> supplierManagementQueryWrapper);
+
+ List<SupplierManagement> selectSupplierManagementAll(@Param("parentId") Integer parentId);
+
+ List<SupplierManagement> selectSupplierManagement(@Param("parentId")Integer parentId);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java
new file mode 100644
index 0000000..9ebedff
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.SuppliersDirectoryContents;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2024-12-17 06:14:51
+ */
+public interface SuppliersDirectoryContentsMapper extends BaseMapper<SuppliersDirectoryContents> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java
new file mode 100644
index 0000000..f95b5be
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java
@@ -0,0 +1,41 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 娓╂箍搴﹂噰闆嗗疄楠屽缁戝畾
+ *
+ * @author zhuo
+ * @since 2024-12-18
+ */
+@Data
+@TableName("collect_laboratory")
+public class CollectLaboratory {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "瀹為獙瀹�")
+ private String laboratory;
+
+ @Schema(description = "娓╂箍搴﹁澶囩紪鍙�")
+ private String deviceCode;
+
+ @Schema(description = "鏈�楂樻俯搴�")
+ private Double temperatureHighest;
+
+ @Schema(description = "鏈�浣庢俯搴�")
+ private Double temperatureLowest;
+
+ @Schema(description = "鏈�楂樻箍搴�")
+ private Double humidityHighest;
+
+ @Schema(description = "鏈�浣庢箍搴�")
+ private Double humidityLowest;
+
+}
+
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java
new file mode 100644
index 0000000..95b2f27
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java
@@ -0,0 +1,66 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 娓╂箍搴﹂噰闆嗕俊鎭�
+ *
+ * @author zhuo
+ * @since 2024-12-18
+ */
+@Data
+@TableName("collect_temperature_humidity")
+public class CollectTemperatureHumidity {
+
+ @TableId(type = IdType.AUTO)
+ private Integer superviseId;
+ //7801娓╁害
+ private Double code7801Temperature;
+ //7801婀垮害
+ private Double code7801Humidity;
+ //7802娓╁害
+ private Double code7802Temperature;
+ //7802婀垮害
+ private Double code7802Humidity;
+ //7803娓╁害
+ private Double code7803Temperature;
+ //7803婀垮害
+ private Double code7803Humidity;
+ //7804娓╁害
+ private Double code7804Temperature;
+ //7804婀垮害
+ private Double code7804Humidity;
+ //7805娓╁害
+ private Double code7805Temperature;
+ //7805婀垮害
+ private Double code7805Humidity;
+ //7806娓╁害
+ private Double code7806Temperature;
+ //7806婀垮害
+ private Double code7806Humidity;
+ //7807娓╁害
+ private Double code7807Temperature;
+ //7807婀垮害
+ private Double code7807Humidity;
+ //7808娓╁害
+ private Double code7808Temperature;
+ //7808婀垮害
+ private Double code7808Humidity;
+ //7809娓╁害
+ private Double code7809Temperature;
+ //7809婀垮害
+ private Double code7809Humidity;
+ //7810娓╁害
+ private Double code7810Temperature;
+ //7810婀垮害
+ private Double code7810Humidity;
+ //閲囬泦鏃堕棿
+ private Date collectTime;
+
+}
+
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java
new file mode 100644
index 0000000..47400c2
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java
@@ -0,0 +1,84 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浠櫒璁惧妫�瀹�/鏍″噯璁″垝琛�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 02:53:05
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_calibration_schedule")
+@Schema(description = "浠櫒璁惧妫�瀹�/鏍″噯璁″垝琛�")
+public class FeCalibrationSchedule implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "浠櫒鍚嶇О")
+ private String instrumentName;
+
+ @Schema(description = "瑙勬牸鍨嬪彿")
+ private String model;
+
+ @Schema(description = "绠$悊缂栧彿")
+ private String managementNumber;
+
+ @Schema(description = "鎶�鏈寚鏍�")
+ private String technicalIndicators;
+
+ @Schema(description = "妫�瀹氬懆鏈�")
+ private String verificationCyde;
+
+ @Schema(description = "妫�瀹氬崟浣�")
+ private String verificationUnit;
+
+ @Schema(description = "鏈�杩戞瀹氭椂闂�")
+ private LocalDateTime recentlyTime;
+
+ @Schema(description = "璁″垝涓嬫妫�瀹氭椂闂�")
+ private LocalDateTime nextTime;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "缂栧埗")
+ private String organization;
+
+ @Schema(description = "缂栧埗鏃ユ湡")
+ private LocalDateTime organizationDate;
+
+ @Schema(description = "鎵瑰噯")
+ private String approve;
+
+ @Schema(description = "鎵瑰噯鏃ユ湡")
+ private LocalDateTime approveDate;
+
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "搴忓彿id, 瀵煎嚭浣跨敤")
+ @TableField(exist = false, select = false)
+ private Integer index;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeIllumination.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeIllumination.java
new file mode 100644
index 0000000..cf4b277
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeIllumination.java
@@ -0,0 +1,61 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:15:57
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_illumination")
+@Schema(description = "璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�")
+public class FeIllumination implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "鐓у害璁板綍琛╥d")
+ @TableId(value = "intensity_illumination_id", type = IdType.AUTO)
+ private Integer intensityIlluminationId;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "缁撹")
+ private String conclusion;
+
+ @Schema(description = "妫�娴嬩汉")
+ private Integer testerId;
+
+ @Schema(description = "鏍告煡浜�")
+ private Integer checkerId;
+
+ @Schema(description = "妫�娴嬫棩鏈�")
+ private LocalDate testDate;
+
+ @Schema(description = "鏍″噯鏃ユ湡")
+ private LocalDateTime lastCalibrationDate;
+
+ @Schema(description = "涓嬫鏍″噯鏃ユ湡")
+ private LocalDateTime nextCalibrationDate;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeIlluminationDetectionArea.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeIlluminationDetectionArea.java
new file mode 100644
index 0000000..8d19979
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeIlluminationDetectionArea.java
@@ -0,0 +1,58 @@
+package com.ruoyi.require.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.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:28
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_illumination_detection_area")
+@Schema(description = "璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩�")
+public class FeIlluminationDetectionArea implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "妫�娴嬪尯鍩焛d")
+ @TableId(value = "detection_area_id", type = IdType.AUTO)
+ private Integer detectionAreaId;
+
+ @Schema(description = "妫�娴嬪尯鍩熷悕绉�")
+ private String detectionAreaLabel;
+
+ @Schema(description = "妫�娴嬪��-绗竴娆�")
+ private Integer valueOne;
+
+ @Schema(description = "妫�娴嬪��-绗簩娆�")
+ private Integer valueTwo;
+
+ @Schema(description = "妫�娴嬪��-绗笁娆�")
+ private Integer valueThree;
+
+ @Schema(description = "骞冲潎鍊�")
+ private Integer average;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鐓у害璁板綍琛╥d")
+ private Integer intensityIlluminationId;
+
+ // 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ @Schema(description = "搴忓彿(瀵煎嚭浣跨敤)")
+ private Integer index;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeLightningProtection.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeLightningProtection.java
new file mode 100644
index 0000000..c785b90
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeLightningProtection.java
@@ -0,0 +1,58 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:36
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_lightning_protection")
+@Schema(description = "璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴�")
+public class FeLightningProtection implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "lightning_protection_id", type = IdType.AUTO)
+ private Integer lightningProtectionId;
+
+ @Schema(description = "鍘熸枃浠跺悕")
+ private String fileName;
+
+ @Schema(description = "绯荤粺鐢熸垚鏂囦欢鍚�")
+ private String systemFileName;
+
+ @Schema(description = "妫�娴嬫棩鏈�")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate detectionDate;
+
+ @Schema(description = "鏈夋晥鏈�")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate termValidity;
+
+ @Schema(description = "妫�娴嬪崟浣�")
+ private String detectionUnit;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeMeasuredQuantity.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeMeasuredQuantity.java
new file mode 100644
index 0000000..27264a6
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeMeasuredQuantity.java
@@ -0,0 +1,53 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�-娴嬪畾閲�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:44
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_measured_quantity")
+@Schema(description = "璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�-娴嬪畾閲�")
+public class FeMeasuredQuantity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "涓婚敭id")
+ @TableId(value = "measured_quantity_id", type = IdType.AUTO)
+ private Integer measuredQuantityId;
+
+ @Schema(description = "娴嬪畾閲忓悕绉�")
+ private String measuredQuantityLabel;
+
+ @Schema(description = "鍊糀")
+ private String valueA;
+
+ @Schema(description = "鍊糂")
+ private String valueB;
+
+ @Schema(description = "鍊糃")
+ private String valueC;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鐢垫簮绋冲畾鎬d")
+ private Integer powerStableId;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FePowerStable.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FePowerStable.java
new file mode 100644
index 0000000..b29df57
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FePowerStable.java
@@ -0,0 +1,63 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:52
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_power_stable")
+@Schema(description = "璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�")
+public class FePowerStable implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "鐢垫簮绋冲畾鎬d")
+ @TableId(value = "power_stable_id", type = IdType.AUTO)
+ private Integer powerStableId;
+
+ @Schema(description = "娴嬭瘯鍦扮偣")
+ private String testLocation;
+
+ @Schema(description = "娴嬭瘯鏃ユ湡")
+ private LocalDate testDate;
+
+ @Schema(description = "璁惧id")
+ private Integer deviceId;
+
+ @Schema(description = "缁撹")
+ private String conclusion;
+
+ @Schema(description = "妫�娴嬭�卛d")
+ private Integer testerId;
+
+ @Schema(description = "鏍告煡浜篿d")
+ private Integer checkerId;
+
+ @Schema(description = "鏍″噯鏃ユ湡")
+ private LocalDateTime lastCalibrationDate;
+
+ @Schema(description = "涓嬫鏍″噯鏃ユ湡")
+ private LocalDateTime nextCalibrationDate;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java
new file mode 100644
index 0000000..3c01b66
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java
@@ -0,0 +1,80 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:58:59
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_standard_substance")
+@Schema(description = "鏍囧噯鐗╄川娓呭崟")
+public class FeStandardSubstance implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鏍囧噯鐗╄川鍚嶇О")
+ private String name;
+
+ @Schema(description = "瑙勬牸鍨嬪彿")
+ private String model;
+
+ @Schema(description = "鐢熶骇鍘傚")
+ private String factoryManufacturer;
+
+ @Schema(description = "鍑哄満缂栧彿")
+ private String factoryNum;
+
+ @Schema(description = "绠$悊缂栧彿")
+ private String manageNum;
+
+ @Schema(description = "涓嶇‘瀹氬害")
+ private String uncertainty;
+
+ @Schema(description = "鏁伴噺")
+ private Long quantity;
+
+ @Schema(description = "璐疆鏃ユ湡")
+ private LocalDateTime acquisitionDate;
+
+ @Schema(description = "鏈夋晥鏈�")
+ private LocalDateTime effectiveDate;
+
+ @Schema(description = "鏂囨。缂栧彿")
+ private String fileNum;
+
+ @Schema(description = "瀛樻斁浣嶇疆")
+ private String position;
+
+ @Schema(description = "鍊熻皟鐘舵�侊紙0:鏈�熻皟 1:宸插�熻皟锛�")
+ private Integer state;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java
new file mode 100644
index 0000000..7941564
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java
@@ -0,0 +1,90 @@
+package com.ruoyi.require.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:29:41
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_standard_substance_acceptance")
+@Schema(description = "鏍囧噯鐗╄川楠屾敹")
+public class FeStandardSubstanceAcceptance implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "娓呭崟id")
+ @ExcelProperty("娓呭崟id")
+ private Integer substanceId;
+
+ @Schema(description = "鍒拌揣鏃ユ湡")
+ @ExcelProperty("鍒拌揣鏃ユ湡")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate arriveDate;
+
+ @Schema(description = "缁翠慨鍗曚綅")
+ @ExcelProperty("缁翠慨鍗曚綅")
+ private String maintenanceUnit;
+
+ @Schema(description = "鍙傛暟")
+ @ExcelProperty("鍙傛暟")
+ private String perameters;
+
+ @Schema(description = "瀹夎璋冭瘯鎯呭喌")
+ @ExcelProperty("瀹夎璋冭瘯鎯呭喌")
+ private String installation;
+
+ @Schema(description = "楠屾敹鎯呭喌")
+ @ExcelProperty("楠屾敹鎯呭喌")
+ private String situation;
+
+ @Schema(description = "鎺ュ彈绛惧瓧")
+ @ExcelProperty("鎺ュ彈绛惧瓧")
+ private String signature;
+
+ @Schema(description = "鍘傚浠h〃")
+ @ExcelProperty("鍘傚浠h〃")
+ private String producer;
+
+ @Schema(description = "鎺ユ敹浜�")
+ @ExcelProperty("鎺ユ敹浜�")
+ private String recipient;
+
+ @Schema(description = "闄勪欢")
+ @ExcelProperty("闄勪欢")
+ private String file;
+
+ @ExcelIgnore
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @ExcelIgnore
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ExcelIgnore
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @ExcelIgnore
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java
new file mode 100644
index 0000000..20a0e51
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java
@@ -0,0 +1,47 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 楠屾敹寮�绠辫褰�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:30:09
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_standard_substance_acceptance_inspection")
+@Schema(description = "楠屾敹寮�绠辫褰�")
+public class FeStandardSubstanceAcceptanceInspection implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ private Integer acceptanceId;
+
+ private String name;
+
+ private Integer number;
+
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java
new file mode 100644
index 0000000..0a576cd
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java
@@ -0,0 +1,77 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 01:49:11
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_standard_substance_record")
+@Schema(description = "鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛�")
+public class FeStandardSubstanceRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鐗╄川id")
+ private Integer substanceId;
+
+ @Schema(description = "鍊熺敤-瀹屽ソ鎬�")
+ private String integrity;
+
+ @Schema(description = "鍊熺敤-鍊熺敤浜�")
+ private String borrowUser;
+
+ @Schema(description = "鍊熺敤-鑱旂郴鏂瑰紡")
+ private String phone;
+
+ @Schema(description = "鍊熺敤-鍊熷嚭鏃ユ湡")
+ private LocalDateTime borrowDate;
+
+ @Schema(description = "褰掕繕鏃ユ湡")
+ private LocalDateTime borrowReturnDate;
+
+ @Schema(description = "鍊熷嚭浜�")
+ private String lender;
+
+ @Schema(description = "褰掕繕-妫�鏌ヤ汉")
+ private String rummager;
+
+ @Schema(description = "0锛氬�熺敤 1:褰掕繕")
+ private String status;
+
+ @Schema(description = "褰掕繕浜�")
+ private String returnedPerson;
+
+ @Schema(description = "褰掕繕-鏃ユ湡")
+ private LocalDateTime returnDate;
+
+ @Schema(description = "褰掕繕-瀹屽ソ鎬�")
+ private String returnIntegrity;
+
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumDate.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumDate.java
new file mode 100644
index 0000000..8a4f6f7
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumDate.java
@@ -0,0 +1,55 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴� 鍖哄煙 -鐖�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 11:02:18
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_temp_hum_date")
+@Schema(description = "璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴� 鍖哄煙 -鐖�")
+public class FeTempHumDate {
+
+ @Schema(description = "涓婚敭ID")
+ @TableId(value = "date_id", type = IdType.AUTO)
+ private Integer dateId;
+
+ @Schema(description = "鏈堝害鏃堕棿")
+ private String monthDate;
+
+ @Schema(description = "璇曢獙鍖哄煙鍚嶇О")
+ private String testAreaName;
+
+ @Schema(description = "澧炶ˉ淇℃伅")
+ private String subjoin;
+
+ @Schema(description = "鐧昏鍛�")
+ private Integer registrarUserId;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumRecord.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumRecord.java
new file mode 100644
index 0000000..91678c2
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumRecord.java
@@ -0,0 +1,66 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalTime;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:28:52
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_temp_hum_record")
+@Schema(description = "璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰�")
+public class FeTempHumRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "娓╂箍搴﹁褰�")
+ @TableId(value = "temp_hum_id", type = IdType.AUTO)
+ private Integer tempHumId;
+
+ @Schema(description = "璁板綍鏃ユ湡")
+ private LocalDate recordDate;
+
+ @Schema(description = "涓婂崍-鏃堕棿")
+ private LocalTime morningTestTime;
+
+ @Schema(description = "涓婂崍娓╁害")
+ private String morningTemp;
+
+ @Schema(description = "涓婂崍婀垮害")
+ private String morningHum;
+
+ @Schema(description = "涓婂崍璁板綍鍛�")
+ private Integer morningRecorderId;
+
+ @Schema(description = "涓嬪崍鏃堕棿")
+ private LocalTime afternoonTime;
+
+ @Schema(description = "涓嬪崍娓╁害")
+ private String afternoonTemp;
+
+ @Schema(description = "涓嬪崍婀垮害")
+ private String afternoonHum;
+
+ @Schema(description = "涓嬪崍璁板綍鍛�")
+ private Integer afternoonRecorderId;
+
+ @Schema(description = "澶囨敞")
+ private String note;
+
+ @Schema(description = "娓╁害寰幆涓昏〃id")
+ private Integer dateId;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ForeignRegister.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ForeignRegister.java
new file mode 100644
index 0000000..dd4df87
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ForeignRegister.java
@@ -0,0 +1,73 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 澶栨潵浜哄憳鐧昏
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 07:17:35
+ */
+@Data
+@TableName("cnas_foreign_register")
+@Schema(description = "澶栨潵浜哄憳鐧昏")
+public class ForeignRegister {
+
+ @TableId(value = "register_id", type = IdType.AUTO)
+ private Integer registerId;
+
+ @Schema(description = "鐧昏濡傛湡")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate registerDate;
+
+ @Schema(description = "杩涘叆鍖哄煙")
+ private String area;
+
+ @Schema(description = "杩涘叆浜哄憳")
+ private String personnel;
+
+ @Schema(description = "杩涘叆鍘熷洜")
+ private String reason;
+
+ @Schema(description = "闄悓浜哄憳id")
+ private Integer accompanyingId;
+
+ @Schema(description = "闄悓浜哄憳")
+ private String accompanyingName;
+
+ @Schema(description = "鎵瑰噯浜篿d")
+ private Integer approveId;
+
+ @Schema(description = "鎵瑰噯浜�")
+ private String approveName;
+
+ @Schema(description = "淇濆瘑鍙婂叾浠栨儏鍐�")
+ private String confidentiality;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastes.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastes.java
new file mode 100644
index 0000000..ed42035
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastes.java
@@ -0,0 +1,43 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 06:39:27
+ */
+@Data
+@TableName("cnas_internal_wastes")
+@Schema(description = "瀹夊叏鍐呭姟涓夊簾鐧昏")
+public class InternalWastes {
+
+ @TableId(value = "wastes_id", type = IdType.AUTO)
+ private Integer wastesId;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastesDetail.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastesDetail.java
new file mode 100644
index 0000000..8bf41fd
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastesDetail.java
@@ -0,0 +1,65 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏璇︽儏
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 06:39:54
+ */
+@Data
+@TableName("cnas_internal_wastes_detail")
+@Schema(description = "瀹夊叏鍐呭姟涓夊簾鐧昏璇︽儏")
+public class InternalWastesDetail {
+
+ @TableId(value = "wastes_detail_id", type = IdType.AUTO)
+ private Integer wastesDetailId;
+
+ @Schema(description = "涓昏〃id")
+ private Integer wastesId;
+
+ @Schema(description = "鍚嶇О")
+ private String designation;
+
+ @Schema(description = "浣撶Н")
+ private String volume;
+
+ @Schema(description = "閫佸鐞嗘棩鏈�")
+ private String deliveryDate;
+
+ @Schema(description = "绉讳氦浜�")
+ private String transferPeople;
+
+ @Schema(description = "鎺ユ敹浜�")
+ private String acceptor;
+
+ @Schema(description = "鎺ユ敹鍗曚綅")
+ private String receivingUnit;
+
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @Schema(description = "淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ // 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ private Integer index;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java
new file mode 100644
index 0000000..6655104
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java
@@ -0,0 +1,49 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@TableName("procurement_supplies_consumables")
+@Schema(description = "鑰楁潗閲囪喘鏄庣粏琛�")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ProcurementSuppliesConsumables {
+
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鑰楁潗涓昏〃id")
+ private Integer storeId;
+
+ @Schema(description = "鑰楁潗鍚嶇О")
+ private String consumablesName;
+
+ @Schema(description = "鍗曚环")
+ private Double unitPrice;
+
+ @Schema(description = "鍏ュ簱鏁伴噺")
+ private Integer storeNumber;
+
+ @Schema(description = "鎬讳环")
+ private Double totalPrice;
+
+ @Schema(description = "璐у彿")
+ private String itemNumber;
+
+ @Schema(description = "绫诲埆")
+ private String type;
+
+ @Schema(description = "瑙勬牸")
+ private String specifications;
+
+ @Schema(description = "鍙傝�冧緵搴斿晢")
+ private String supplier;
+
+ @Schema(description = "璁¢噺鍗曚綅")
+ private String unit;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesContents.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesContents.java
new file mode 100644
index 0000000..ccbd2ed
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesContents.java
@@ -0,0 +1,41 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@TableName("procurement_supplies_contents")
+@Schema(description = "鏈嶅姟鍜屼緵搴斿搧閲囪喘琛�")
+public class ProcurementSuppliesContents {
+
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鑺傜偣鍚嶇О")
+ private String nodeName;
+
+ @Schema(description = "浠e彿")
+ private String code;
+
+
+ @Schema(description = "鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鐖惰妭鐐�")
+ private Integer parentId;
+
+ @TableField(exist = false)
+ private List<ProcurementSuppliesContents> children;
+
+
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java
new file mode 100644
index 0000000..fc65f4d
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java
@@ -0,0 +1,52 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 03:47:19
+ */
+@Getter
+@Setter
+@TableName("procurement_supplies_expends")
+@Schema(description = "")
+public class ProcurementSuppliesExpends implements Serializable {
+
+
+ @Schema(description = "涓昏〃Id")
+ @TableId(value = "expend_id", type = IdType.AUTO)
+ private Long expendId;
+
+ @Schema(description = "鑰楁潗Id")
+ private Long listId;
+
+ @Schema(description = "娑堣�楁暟閲�")
+ private Integer amount;
+
+ @Schema(description = "褰曞叆浜篿d")
+ private Integer enterUserId;
+
+ @Schema(description = "鏇存柊浜篿d")
+ private Integer updateUserId;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesList.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesList.java
new file mode 100644
index 0000000..d105e7b
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesList.java
@@ -0,0 +1,100 @@
+package com.ruoyi.require.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏈嶅姟涓庝緵搴斿晢 鑰楁潗鍒楄〃
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 04:04:32
+ */
+@Getter
+@Setter
+@TableName("procurement_supplies_list")
+@Schema(description = "鏈嶅姟涓庝緵搴斿晢 鑰楁潗鍒楄〃")
+public class ProcurementSuppliesList implements Serializable {
+
+
+ @TableId(value = "id", type = IdType.AUTO)
+ @Schema(description = "缂栧彿")
+ @ExcelProperty("缂栧彿")
+ private Long id;
+
+ @Schema(description = "鐩綍id")
+ private Long contentsId;
+
+ @Schema(description = "鑰楁潗绫诲瀷")
+ @ExcelProperty("绫诲埆")
+ private String consumablesType;
+
+ @Schema(description = "璐у彿")
+ @ExcelProperty("璐у彿")
+ private String itemNumber;
+
+ @Schema(description = "鑰楁潗鍚嶇О")
+ @ExcelProperty("鍚嶇О")
+ private String consumablesName;
+
+ @Schema(description = "瑙勬牸")
+ @ExcelProperty("瑙勬牸")
+ private String specifications;
+
+ @Schema(description = "璁¢噺鍗曚綅")
+ @ExcelProperty("璁¢噺鍗曚綅")
+ private String unit;
+
+ @Schema(description = "鍙傝�冧环鏍�")
+ private BigDecimal referencePrice;
+
+ @Schema(description = "瀛樻斁浣嶇疆")
+ private Integer contentId;
+
+ @Schema(description = "璐熻矗浜�")
+ private Integer personInCharge;
+
+ @Schema(description = "搴撳瓨涓婇檺")
+ private Integer upperLimit;
+
+ @Schema(description = "搴撳瓨涓嬮檺")
+ @ExcelProperty("搴撳瓨涓嬮檺")
+ private Integer lowerLimit;
+
+ @Schema(description = "渚涘簲鍟�")
+ private Integer supplier;
+
+ @Schema(description = "鑰楁潗鍥炬爣")
+ private String consumablesIcon;
+
+ @Schema(description = "鑰楁潗闄勪欢")
+ private String attachment;
+
+ @Schema(description = "澶囨敞")
+ @ExcelProperty("澶囨敞")
+ private String remark;
+
+ @TableField(fill = FieldFill.INSERT)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "褰撳墠搴撳瓨鏁伴噺")
+ @ExcelProperty("褰撳墠搴撳瓨")
+ private Integer currentAmount;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java
new file mode 100644
index 0000000..643f00b
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java
@@ -0,0 +1,51 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+@Data
+@TableName("procurement_supplies_store")
+@Schema(description = "鑰楁潗鍏ュ簱琛�")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ProcurementSuppliesStore implements Serializable {
+
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鐩綍id")
+ private Integer contentsId;
+
+ @Schema(description = "鍏ュ簱鍗曞彿")
+ private String oddNumbers;
+
+ @Schema(description = "鍏ュ簱搴撳瓨")
+ private String inventory;
+
+ @Schema(description = "鍏ュ簱鎬婚噾棰�")
+ private Double totalAmount;
+
+ @Schema(description = "鍏ュ簱浜�")
+ private Integer storageUser;
+
+ @Schema(description = "鍏ュ簱鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private LocalDate storageTime;
+
+ @Schema(description = "鍏ュ簱璇存槑")
+ private String remark;
+
+ @Schema(description = "鐧昏浜�")
+ private Integer registrant;
+
+ @Schema(description = "鐧昏鏃堕棿")
+ private LocalDate registrantTime;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/SupplierManagement.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/SupplierManagement.java
new file mode 100644
index 0000000..c060854
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/SupplierManagement.java
@@ -0,0 +1,109 @@
+package com.ruoyi.require.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:46:45
+ */
+@Getter
+@Setter
+@TableName("cnas_supplier_management")
+@Schema(description = "")
+public class SupplierManagement implements Serializable {
+
+
+ @Schema(description = "涓昏〃Id")
+ @TableId(value = "supplier_management_id", type = IdType.AUTO)
+ private Integer supplierManagementId;
+
+ @Schema(description = "渚涘簲鍟�")
+ @ExcelProperty("渚涘簲鍟�")
+ private String supplierName;
+
+ @Schema(description = "缂栧彿")
+ @ExcelProperty("缂栧彿")
+ private String supplierRef;
+
+ @Schema(description = "渚涘簲鍟嗙墿鍝佹湇鍔″悕绉�")
+ @ExcelProperty("渚涘簲鍟嗙墿鍝佹湇鍔″悕绉�")
+ private String supplierItemServiceName;
+
+ @Schema(description = "閭紪")
+ @ExcelProperty("閭紪")
+ private String postalCode;
+
+ @Schema(description = "鍦板潃")
+ @ExcelProperty("鍦板潃")
+ private String adress;
+
+ @Schema(description = "logo")
+ private String logo;
+
+ @Schema(description = "鑱旂郴浜�")
+ @ExcelProperty("鑱旂郴浜�")
+ private String contacts;
+
+ @Schema(description = "鑱旂郴鐢佃瘽")
+ @ExcelProperty("鑱旂郴鐢佃瘽")
+ private String phone;
+
+ @Schema(description = "鎴峰悕")
+ @ExcelProperty("鎴峰悕")
+ private String householdName;
+
+ @Schema(description = "浼犵湡")
+ @ExcelProperty("浼犵湡")
+ private String fax;
+
+ @Schema(description = "寮�鎴疯")
+ @ExcelProperty("寮�鎴疯")
+ private String openingName;
+
+ @Schema(description = "缃戝潃")
+ @ExcelProperty("缃戝潃")
+ private String website;
+
+ @Schema(description = "璐﹀彿")
+ @ExcelProperty("璐﹀彿")
+ private String accountName;
+
+ @Schema(description = "email")
+ @ExcelProperty("email")
+ private String email;
+
+ @Schema(description = "澶囨敞")
+ @ExcelProperty("澶囨敞")
+ private String remarks;
+
+ @Schema(description = "闄勪欢")
+ private String enclosure;
+
+ @Schema(description = "鐘舵��")
+ private String status;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鐖秈d")
+ private Integer parentId;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java
new file mode 100644
index 0000000..fe22453
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java
@@ -0,0 +1,51 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍
+ * </p>
+ *
+ * @author
+ * @since 2024-12-17 06:14:51
+ */
+@Getter
+@Setter
+@TableName("suppliers_directory_contents")
+@Schema(description = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍")
+public class SuppliersDirectoryContents implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "鑺傜偣鍚嶇О")
+ private String nodeName;
+
+ @Schema(description = "浠e彿")
+ private String code;
+
+ @Schema(description = "鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @Schema(description = "鐖惰妭鐐�")
+ private Integer parentId;
+
+
+ @TableField(exist = false)
+ private List<SuppliersDirectoryContents> children;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java
new file mode 100644
index 0000000..d942099
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.require.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.require.pojo.FeCalibrationSchedule;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 02:53:05
+ */
+public interface FeCalibrationScheduleService extends IService<FeCalibrationSchedule> {
+
+
+ IPage<FeCalibrationSchedule> page(Page page,String instrumentName, String managementNumber);
+
+ /**
+ * 閲忓�兼函婧愯鍒掑鍑簑ord
+ *
+ * @param response 鍝嶅簲娣诲姞word
+ */
+ void exportWordOfValueTraceabilityPlan(HttpServletResponse response);
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationDetectionAreaService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationDetectionAreaService.java
new file mode 100644
index 0000000..a94cdf9
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationDetectionAreaService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:28
+ */
+public interface FeIlluminationDetectionAreaService extends IService<FeIlluminationDetectionArea> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationService.java
new file mode 100644
index 0000000..3ce0d63
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.require.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.require.dto.FeIlluminationDto;
+import com.ruoyi.require.pojo.FeIllumination;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:15:57
+ */
+public interface FeIlluminationService extends IService<FeIllumination> {
+
+ IPage<FeIlluminationDto> getFeLightningProtection(Page page);
+
+ /**
+ * 瀵煎嚭鐓у害璁板綍
+ * @param intensityIlluminationId
+ * @param response
+ */
+ void exportFeIllumination(Integer intensityIlluminationId, HttpServletResponse response);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeLightningProtectionService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeLightningProtectionService.java
new file mode 100644
index 0000000..8e82dbf
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeLightningProtectionService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.excel.FeLightningProtectionExcel;
+import com.ruoyi.require.pojo.FeLightningProtection;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:36
+ */
+public interface FeLightningProtectionService extends IService<FeLightningProtection> {
+
+ List<FeLightningProtectionExcel> exportOfLightningProtectionDetection();
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeMeasuredQuantityService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeMeasuredQuantityService.java
new file mode 100644
index 0000000..be296f4
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeMeasuredQuantityService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.FeMeasuredQuantity;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�-娴嬪畾閲� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:44
+ */
+public interface FeMeasuredQuantityService extends IService<FeMeasuredQuantity> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FePowerStableService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FePowerStableService.java
new file mode 100644
index 0000000..c6a0064
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FePowerStableService.java
@@ -0,0 +1,33 @@
+package com.ruoyi.require.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.require.dto.FePowerStableDto;
+import com.ruoyi.require.pojo.FePowerStable;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:52
+ */
+public interface FePowerStableService extends IService<FePowerStable> {
+
+ IPage<FePowerStableDto> getLaboratoryFacilityPowerStablePage(Page page);
+
+ Map<String, Objects> getCalibrationDate(Integer deviceId);
+
+ /**
+ * 瀵煎嚭鐢垫簮绋冲畾鎬�
+ * @param powerStableId
+ * @param response
+ */
+ void exportFePowerStable(Integer powerStableId, HttpServletResponse response);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java
new file mode 100644
index 0000000..66bb307
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+
+/**
+ * <p>
+ * 楠屾敹寮�绠辫褰� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:30:09
+ */
+public interface FeStandardSubstanceAcceptanceInspectionService extends IService<FeStandardSubstanceAcceptanceInspection> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java
new file mode 100644
index 0000000..eb2c7fc
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java
@@ -0,0 +1,33 @@
+package com.ruoyi.require.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.require.dto.AcceptanceDto;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.vo.AcceptanceDetailsVo;
+import com.ruoyi.require.vo.AcceptanceVo;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:29:41
+ */
+public interface FeStandardSubstanceAcceptanceService extends IService<FeStandardSubstanceAcceptance> {
+
+
+ void addAcceptance(AcceptanceDto dto);
+
+ IPage<AcceptanceVo> getPageAcceptance(Page page, String name);
+
+ AcceptanceDetailsVo getAcceptanceDetails(Integer id);
+
+ Integer deleteAcceptance(Integer id);
+
+ void exportFeStandardSubstanceAcceptance(HttpServletResponse response);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java
new file mode 100644
index 0000000..4e52b9a
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java
@@ -0,0 +1,30 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstanceRecord;
+import com.ruoyi.require.vo.SubstanceRecordVo;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 01:49:11
+ */
+public interface FeStandardSubstanceRecordService extends IService<FeStandardSubstanceRecord> {
+
+
+ void borrowSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord);
+
+ void returnSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord);
+
+ List<FeStandardSubstanceRecord> getSubstanceRecord(Integer id);
+
+ IPage<SubstanceRecordVo> getPage(Page page, SubstanceRecordVo vo);
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java
new file mode 100644
index 0000000..bff0a20
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java
@@ -0,0 +1,26 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstance;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:58:59
+ */
+public interface FeStandardSubstanceService extends IService<FeStandardSubstance> {
+
+ IPage<FeStandardSubstance> page(Page page, FeStandardSubstance feStandardSubstance);
+
+ void downloadImportTemplate(HttpServletResponse response);
+
+ int importStandardSubstance(MultipartFile file);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumDateService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumDateService.java
new file mode 100644
index 0000000..8afd2e7
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumDateService.java
@@ -0,0 +1,30 @@
+package com.ruoyi.require.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.require.dto.FeTempHumDateDto;
+import com.ruoyi.require.pojo.FeTempHumDate;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴� 鍖哄煙 -鐖� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 11:02:18
+ */
+public interface FeTempHumDateService extends IService<FeTempHumDate> {
+
+ IPage<FeTempHumDateDto> getFeTempHumDate(Page page, FeTempHumDateDto feTempHumDateDto);
+
+ void exportTemperatureAndHumidityRecords(Integer dateId, HttpServletResponse response);
+
+ /**
+ * 娓╂箍搴︾‘璁�
+ * @param feTempHumDate
+ */
+ void affirmFeTempHumDate(FeTempHumDate feTempHumDate);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumRecordService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumRecordService.java
new file mode 100644
index 0000000..392bd66
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumRecordService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.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.require.dto.FeTempHumRecordDto;
+import com.ruoyi.require.pojo.FeTempHumRecord;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:28:52
+ */
+public interface FeTempHumRecordService extends IService<FeTempHumRecord> {
+
+ IPage<FeTempHumRecordDto> getFeTempHumRecordPage(Page page, Integer dateId);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ForeignRegisterService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ForeignRegisterService.java
new file mode 100644
index 0000000..e6341a0
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ForeignRegisterService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.require.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.require.dto.ForeignRegisterDto;
+import com.ruoyi.require.pojo.ForeignRegister;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 澶栨潵浜哄憳鐧昏 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 07:17:35
+ */
+public interface ForeignRegisterService extends IService<ForeignRegister> {
+
+ /**
+ * 澶栨潵浜哄憳鐧昏鍒嗛〉鏌ヨ
+ * @param page
+ * @param foreignRegister
+ * @return
+ */
+ IPage<ForeignRegisterDto> pageForeignRegister(Page page, ForeignRegisterDto foreignRegister);
+
+ /**
+ * 瀵煎嚭澶栨潵浜哄憳鐧昏
+ * @param foreignRegister
+ */
+ void exportForeignRegister(ForeignRegisterDto foreignRegister, HttpServletResponse response);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesDetailService.java b/cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesDetailService.java
new file mode 100644
index 0000000..9540ac5
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.InternalWastesDetail;
+
+/**
+ * <p>
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏璇︽儏 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 06:39:54
+ */
+public interface InternalWastesDetailService extends IService<InternalWastesDetail> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesService.java b/cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesService.java
new file mode 100644
index 0000000..180ec1e
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesService.java
@@ -0,0 +1,63 @@
+package com.ruoyi.require.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.require.dto.InternalWastesDto;
+import com.ruoyi.require.pojo.InternalWastes;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 06:39:27
+ */
+public interface InternalWastesService extends IService<InternalWastes> {
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalWastes
+ * @return
+ */
+ IPage<InternalWastesDto> pageInternalWastes(Page page, InternalWastes internalWastes);
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊鏂板
+ * @param internalWastes
+ * @return
+ */
+ boolean addInternalWastes(InternalWastesDto internalWastes);
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊淇敼
+ * @param internalWastes
+ * @return
+ */
+ boolean updateInternalWastes(InternalWastesDto internalWastes);
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊鍒犻櫎
+ * @param wastesId
+ * @return
+ */
+ boolean delInternalWastes(Integer wastesId);
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾澶勭悊鏌ョ湅璇︽儏
+ * @param wastesId
+ * @return
+ */
+ InternalWastesDto getInternalWastesOne(Integer wastesId);
+
+ /**
+ * 瀵煎嚭涓夊簾澶勭悊
+ * @param wastesId
+ * @param response
+ */
+ void exportInternalWastes(Integer wastesId, HttpServletResponse response);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java
new file mode 100644
index 0000000..ade7f0c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+
+public interface ProcurementSuppliesConsumablesService extends IService<ProcurementSuppliesConsumables> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesContentsService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesContentsService.java
new file mode 100644
index 0000000..930c1c5
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesContentsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.ProcurementSuppliesContents;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ProcurementSuppliesContentsService extends IService<ProcurementSuppliesContents> {
+
+ List<ProcurementSuppliesContents> directoryListing();
+
+ List<Map<String,Object>> getNodeNames();
+
+ List<Map<String,Object>> getUserList();
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java
new file mode 100644
index 0000000..12c852f
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
+import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 03:47:19
+ */
+public interface ProcurementSuppliesExpendsService extends IService<ProcurementSuppliesExpends> {
+ public List<ProcurementSuppliesExpendDto> selectAll(Long procurementSuppliesListId);
+ public Integer addExpends(ProcurementSuppliesExpendDto expendDto) throws ServiceException;
+ public Integer deleteExpends(Long id);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesListService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesListService.java
new file mode 100644
index 0000000..6a0a0de
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesListService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.require.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.require.dto.ProcurementSuppliesListDto;
+import com.ruoyi.require.pojo.ProcurementSuppliesList;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏈嶅姟涓庝緵搴斿晢 鑰楁潗鍒楄〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 04:04:32
+ */
+public interface ProcurementSuppliesListService extends IService<ProcurementSuppliesList> {
+ IPage<ProcurementSuppliesListDto> selectList(Page page, ProcurementSuppliesListDto list);
+
+ public Integer addProcurementSuppliesList(ProcurementSuppliesListDto dto);
+
+ public Integer updateProcurementSuppliesList(ProcurementSuppliesListDto dto);
+
+ void exportProcurementSuppliesList(Integer contentsId,HttpServletResponse response);
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java
new file mode 100644
index 0000000..e609e25
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.require.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.require.dto.StoreDto;
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Map;
+
+public interface ProcurementSuppliesStoreService extends IService<ProcurementSuppliesStore> {
+ void addStore(Map<String,Object> map);
+ void updateStore(Map<String,Object> map);
+
+ void deleteStore(Integer id, Integer consumablesId);
+ IPage<StoreDto> selectStoreList(Page page, StoreDto storeDto);
+
+ void exportExcel(Integer contentsId, HttpServletResponse response) throws IOException;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/SupplierManagementService.java b/cnas-require/src/main/java/com/ruoyi/require/service/SupplierManagementService.java
new file mode 100644
index 0000000..798f98c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/SupplierManagementService.java
@@ -0,0 +1,32 @@
+package com.ruoyi.require.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.require.pojo.SupplierManagement;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:46:45
+ */
+public interface SupplierManagementService extends IService<SupplierManagement> {
+
+ List<SupplierManagement> selectSupplierManagement(SupplierManagement supplierManagement);
+
+ void exportSupplierManagement(Integer parentId, HttpServletResponse response);
+
+ IPage<SupplierManagement> selectQualifiedSupplierManagement(Page page, SupplierManagement supplierManagement);
+
+ List<SupplierManagement> selectQualifiedSupplierManagementById(Integer supplierManagementId);
+
+ List<SupplierManagement> selectSupplierManagementByParentId(Integer parentId);
+
+ List<SupplierManagement> selectSupplierManagementAll();
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java b/cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java
new file mode 100644
index 0000000..b69d4ac
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.SuppliersDirectoryContents;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-12-17 06:14:51
+ */
+public interface SuppliersDirectoryContentsService extends IService<SuppliersDirectoryContents> {
+
+ ArrayList<SuppliersDirectoryContents> directoryListing();
+ List<Map<String, Object>> getSuppliersDirectoryContentsNodeNames();
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java
new file mode 100644
index 0000000..1b56257
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java
@@ -0,0 +1,76 @@
+package com.ruoyi.require.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.require.mapper.FeCalibrationScheduleMapper;
+import com.ruoyi.require.pojo.FeCalibrationSchedule;
+import com.ruoyi.require.service.FeCalibrationScheduleService;
+import org.springframework.stereotype.Service;
+
+import jakarta.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-11-13 02:53:05
+ */
+@Service
+public class FeCalibrationScheduleServiceImpl extends ServiceImpl<FeCalibrationScheduleMapper, FeCalibrationSchedule> implements FeCalibrationScheduleService {
+
+ @Override
+ public IPage<FeCalibrationSchedule> page(Page page, String instrumentName, String managementNumber) {
+ IPage<FeCalibrationSchedule> ipage = this.baseMapper.ipage(page,instrumentName, managementNumber);
+ return ipage;
+ }
+
+ @Override
+ public void exportWordOfValueTraceabilityPlan(HttpServletResponse response) {
+ List<FeCalibrationSchedule> feCalibrationSchedules = this.baseMapper.selectList(null);
+
+ int size = feCalibrationSchedules.size();
+ for (int i = 0; i < size; i++) {
+ FeCalibrationSchedule feCalibrationSchedule = feCalibrationSchedules.get(i);
+ feCalibrationSchedule.setIndex(i + 1);
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/value-traceability-plan.docx");
+ Configure configure = Configure.builder()
+ .bind("feCalibrationSchedule", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("feCalibrationSchedule", feCalibrationSchedules);
+ }}
+ );
+
+ 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();
+ inputStream.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationDetectionAreaServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationDetectionAreaServiceImpl.java
new file mode 100644
index 0000000..bca9ee3
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationDetectionAreaServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.FeIlluminationDetectionAreaMapper;
+import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
+import com.ruoyi.require.service.FeIlluminationDetectionAreaService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:28
+ */
+@Service
+public class FeIlluminationDetectionAreaServiceImpl extends ServiceImpl<FeIlluminationDetectionAreaMapper, FeIlluminationDetectionArea> implements FeIlluminationDetectionAreaService {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationServiceImpl.java
new file mode 100644
index 0000000..00511b3
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationServiceImpl.java
@@ -0,0 +1,124 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.require.dto.FeIlluminationDto;
+import com.ruoyi.require.dto.FeIlluminationExportDto;
+import com.ruoyi.require.mapper.FeIlluminationDetectionAreaMapper;
+import com.ruoyi.require.mapper.FeIlluminationMapper;
+import com.ruoyi.require.pojo.FeIllumination;
+import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
+import com.ruoyi.require.service.FeIlluminationService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:15:57
+ */
+@Service
+public class FeIlluminationServiceImpl extends ServiceImpl<FeIlluminationMapper, FeIllumination> implements FeIlluminationService {
+
+ @Resource
+ private FeIlluminationDetectionAreaMapper feIlluminationDetectionAreaMapper;
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+
+ @Override
+ public IPage<FeIlluminationDto> getFeLightningProtection(Page page) {
+ return baseMapper.getFeLightningProtection(page);
+ }
+
+ /**
+ * 瀵煎嚭鐓у害璁板綍
+ * @param intensityIlluminationId
+ * @param response
+ */
+ @Override
+ public void exportFeIllumination(Integer intensityIlluminationId, HttpServletResponse response) {
+ FeIlluminationExportDto illuminationExportDto = baseMapper.selectFeIllumination(intensityIlluminationId);
+ // 妫�娴嬩汉
+ String testerUrl = null;
+ if (illuminationExportDto.getTesterId() != null) {
+ testerUrl = userMapper.selectById(illuminationExportDto.getTesterId()).getSignatureUrl();
+ if (StringUtils.isBlank(testerUrl)) {
+ throw new ErrorException("鎵句笉鍒版娴嬩汉鐨勭鍚�");
+ }
+ }
+
+ // 鏍告煡浜�
+ String checkerUrl = null;
+ if (illuminationExportDto.getCheckerId() != null) {
+ checkerUrl = userMapper.selectById(illuminationExportDto.getCheckerId()).getSignatureUrl();
+ if (StringUtils.isBlank(checkerUrl)) {
+ throw new ErrorException("鎵句笉鍒版牳鏌ヤ汉鐨勭鍚�");
+ }
+ }
+
+ // 鏌ヨ璇︽儏
+ List<FeIlluminationDetectionArea> feIlluminationDetectionAreas = feIlluminationDetectionAreaMapper.selectList(Wrappers.<FeIlluminationDetectionArea>lambdaQuery()
+ .eq(FeIlluminationDetectionArea::getIntensityIlluminationId, intensityIlluminationId));
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/illumination.docx");
+ Configure configure = Configure.builder()
+ .bind("detectionAreaList", new HackLoopTableRenderPolicy())
+ .build();
+ String finalTesterUrl = testerUrl;
+ String finalCheckerUrl = checkerUrl;
+
+ // 鍒ゆ柇妫�娴嬫棩鏈熸槸鍚︿负绌�
+ LocalDateTime finalLocalDateTime = illuminationExportDto.getTestDate() == null ? null : illuminationExportDto.getTestDate().atStartOfDay();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("illumination", illuminationExportDto);
+ put("detectionAreaList", feIlluminationDetectionAreas);
+ put("testerUrl", StringUtils.isNotBlank(finalTesterUrl) ? Pictures.ofLocal(imgUrl + "/" + finalTesterUrl).create() : null);
+ put("checkerUrl", StringUtils.isNotBlank(finalCheckerUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCheckerUrl).create() : null);
+ put("testDateUrl", finalLocalDateTime != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(finalLocalDateTime)).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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeLightningProtectionServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeLightningProtectionServiceImpl.java
new file mode 100644
index 0000000..f17fa50
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeLightningProtectionServiceImpl.java
@@ -0,0 +1,27 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.excel.FeLightningProtectionExcel;
+import com.ruoyi.require.mapper.FeLightningProtectionMapper;
+import com.ruoyi.require.pojo.FeLightningProtection;
+import com.ruoyi.require.service.FeLightningProtectionService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:36
+ */
+@Service
+public class FeLightningProtectionServiceImpl extends ServiceImpl<FeLightningProtectionMapper, FeLightningProtection> implements FeLightningProtectionService {
+
+ @Override
+ public List<FeLightningProtectionExcel> exportOfLightningProtectionDetection() {
+ return baseMapper.exportOfLightningProtectionDetection();
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeMeasuredQuantityServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeMeasuredQuantityServiceImpl.java
new file mode 100644
index 0000000..5c784b3
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeMeasuredQuantityServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.FeMeasuredQuantityMapper;
+import com.ruoyi.require.pojo.FeMeasuredQuantity;
+import com.ruoyi.require.service.FeMeasuredQuantityService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬�-娴嬪畾閲� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:44
+ */
+@Service
+public class FeMeasuredQuantityServiceImpl extends ServiceImpl<FeMeasuredQuantityMapper, FeMeasuredQuantity> implements FeMeasuredQuantityService {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FePowerStableServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FePowerStableServiceImpl.java
new file mode 100644
index 0000000..4e66a09
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FePowerStableServiceImpl.java
@@ -0,0 +1,124 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.require.dto.FePowerStableDto;
+import com.ruoyi.require.dto.FePowerStableExportDto;
+import com.ruoyi.require.mapper.FeMeasuredQuantityMapper;
+import com.ruoyi.require.mapper.FePowerStableMapper;
+import com.ruoyi.require.pojo.FeMeasuredQuantity;
+import com.ruoyi.require.pojo.FePowerStable;
+import com.ruoyi.require.service.FePowerStableService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:16:52
+ */
+@Service
+public class FePowerStableServiceImpl extends ServiceImpl<FePowerStableMapper, FePowerStable> implements FePowerStableService {
+
+ @Resource
+ private FeMeasuredQuantityMapper feMeasuredQuantityMapper;
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public IPage<FePowerStableDto> getLaboratoryFacilityPowerStablePage(Page page) {
+ return baseMapper.getLaboratoryFacilityPowerStablePage(page);
+ }
+
+ @Override
+ public Map<String, Objects> getCalibrationDate(Integer deviceId) {
+ return baseMapper.getCalibrationDate(deviceId);
+ }
+
+ /**
+ * 瀵煎嚭鐢垫簮绋冲畾鎬�
+ * @param powerStableId
+ * @param response
+ */
+ @Override
+ public void exportFePowerStable(Integer powerStableId, HttpServletResponse response) {
+ FePowerStableExportDto powerStable = baseMapper.selectPowerStable(powerStableId);
+
+ // 妫�娴嬩汉
+ String testerUrl = null;
+ if (powerStable.getTesterId() != null) {
+ testerUrl = userMapper.selectById(powerStable.getTesterId()).getSignatureUrl();
+ if (StringUtils.isBlank(testerUrl)) {
+ throw new ErrorException("鎵句笉鍒版娴嬩汉鐨勭鍚�");
+ }
+ }
+
+ // 鏍告煡浜�
+ String checkerUrl = null;
+ if (powerStable.getCheckerId() != null) {
+ checkerUrl = userMapper.selectById(powerStable.getCheckerId()).getSignatureUrl();
+ if (StringUtils.isBlank(checkerUrl)) {
+ throw new ErrorException("鎵句笉鍒版牳鏌ヤ汉鐨勭鍚�");
+ }
+ }
+
+ // 鏌ヨ璇︽儏
+ List<FeMeasuredQuantity> feMeasuredQuantities = feMeasuredQuantityMapper.selectList(Wrappers.<FeMeasuredQuantity>lambdaQuery()
+ .eq(FeMeasuredQuantity::getPowerStableId, powerStableId));
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/power-stable.docx");
+ Configure configure = Configure.builder()
+ .bind("measuredQuantityList", new HackLoopTableRenderPolicy())
+ .build();
+ String finalTesterUrl = testerUrl;
+ String finalCheckerUrl = checkerUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("stable", powerStable);
+ put("measuredQuantityList", feMeasuredQuantities);
+ put("testerUrl", StringUtils.isNotBlank(finalTesterUrl) ? Pictures.ofLocal(imgUrl + "/" + finalTesterUrl).create() : null);
+ put("checkerUrl", StringUtils.isNotBlank(finalCheckerUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCheckerUrl).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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java
new file mode 100644
index 0000000..d9e90ec
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceInspectionMapper;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 楠屾敹寮�绠辫褰� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:30:09
+ */
+@Service
+public class FeStandardSubstanceAcceptanceInspectionServiceImpl extends ServiceImpl<FeStandardSubstanceAcceptanceInspectionMapper, FeStandardSubstanceAcceptanceInspection> implements FeStandardSubstanceAcceptanceInspectionService {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java
new file mode 100644
index 0000000..edf0b99
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.require.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.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.dto.AcceptanceDto;
+import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceInspectionMapper;
+import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceMapper;
+import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceService;
+import com.ruoyi.require.vo.AcceptanceDetailsVo;
+import com.ruoyi.require.vo.AcceptanceVo;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 03:29:41
+ */
+@Service
+public class FeStandardSubstanceAcceptanceServiceImpl extends ServiceImpl<FeStandardSubstanceAcceptanceMapper, FeStandardSubstanceAcceptance> implements FeStandardSubstanceAcceptanceService {
+
+ @Resource
+ private FeStandardSubstanceAcceptanceInspectionMapper feStandardSubstanceAcceptanceInspectionMapper;
+ @Resource
+ private FeStandardSubstanceAcceptanceInspectionService feStandardSubstanceAcceptanceInspectionService;
+ @Resource
+ private FeStandardSubstanceMapper feStandardSubstanceMapper;
+
+
+
+ @Override
+ public void addAcceptance(AcceptanceDto dto) {
+ FeStandardSubstanceAcceptance acceptance = dto.getAcceptance();
+ this.baseMapper.insert(acceptance);
+ List<FeStandardSubstanceAcceptanceInspection> list = dto.getList();
+ if (CollectionUtils.isNotEmpty(list)) {
+ list.forEach(v -> {
+ v.setAcceptanceId(acceptance.getId());
+ });
+ feStandardSubstanceAcceptanceInspectionService.saveBatch(list);
+ }
+ }
+
+ @Override
+ public IPage<AcceptanceVo> getPageAcceptance(Page page, String name) {
+ return this.baseMapper.getPageAcceptance(page,name);
+ }
+
+ @Override
+ public AcceptanceDetailsVo getAcceptanceDetails(Integer id) {
+ FeStandardSubstanceAcceptance acceptance = this.baseMapper.selectById(id);
+ FeStandardSubstance substance = feStandardSubstanceMapper.selectById(acceptance.getSubstanceId());
+ QueryWrapper<FeStandardSubstanceAcceptanceInspection> queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("acceptance_id",id);
+ List<FeStandardSubstanceAcceptanceInspection> list = feStandardSubstanceAcceptanceInspectionMapper.selectList(queryWrapper);
+ AcceptanceDetailsVo vo = new AcceptanceDetailsVo();
+ vo.setSubstance(substance);
+ vo.setAcceptance(acceptance);
+ vo.setList(list);
+ return vo;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Integer deleteAcceptance(Integer id) {
+ feStandardSubstanceAcceptanceInspectionMapper.delete(new QueryWrapper<FeStandardSubstanceAcceptanceInspection>()
+ .lambda().eq(FeStandardSubstanceAcceptanceInspection::getAcceptanceId,id));
+ return this.baseMapper.deleteById(id);
+ }
+
+ @Override
+ public void exportFeStandardSubstanceAcceptance(HttpServletResponse response) {
+ List<FeStandardSubstanceAcceptance> list = this.list();
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+ try {
+ String fileName = URLEncoder.encode("鏍囧噯鐗╄川楠屾敹", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ // 鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ WriteSheet writeSheet = EasyExcel.writerSheet(0, "鏍囧噯鐗╄川楠屾敹").head(FeStandardSubstanceAcceptance.class).build();
+ excelWriter.write(list, writeSheet);
+ // 鍏抽棴娴�
+ excelWriter.finish();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java
new file mode 100644
index 0000000..0fb8618
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java
@@ -0,0 +1,78 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.framework.exception.ErrorException;
+import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
+import com.ruoyi.require.mapper.FeStandardSubstanceRecordMapper;
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
+import com.ruoyi.require.service.FeStandardSubstanceRecordService;
+import com.ruoyi.require.vo.SubstanceRecordVo;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-14 01:49:11
+ */
+@Transactional(rollbackFor = Exception.class)
+@Service
+public class FeStandardSubstanceRecordServiceImpl extends ServiceImpl<FeStandardSubstanceRecordMapper, FeStandardSubstanceRecord> implements FeStandardSubstanceRecordService {
+
+ @Resource
+ private FeStandardSubstanceMapper feStandardSubstanceMapper;
+
+ @Override
+ public void borrowSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord) {
+ FeStandardSubstance standardSubstance = feStandardSubstanceMapper.selectOne(Wrappers.<FeStandardSubstance>lambdaQuery()
+ .eq(FeStandardSubstance::getId, feStandardSubstanceRecord.getSubstanceId())
+ .eq(FeStandardSubstance::getState, 0)
+ .last("limit 1"));
+ if (ObjectUtils.isEmpty(standardSubstance)){
+ throw new ErrorException("璇ョ墿璐ㄥ凡琚�熷嚭锛�");
+ }
+ this.baseMapper.insert(feStandardSubstanceRecord);
+ standardSubstance.setState(1);
+ feStandardSubstanceMapper.updateById(standardSubstance);
+ }
+
+ @Override
+ public void returnSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord) {
+ FeStandardSubstance standardSubstance = feStandardSubstanceMapper.selectOne(Wrappers.<FeStandardSubstance>lambdaQuery()
+ .eq(FeStandardSubstance::getId, feStandardSubstanceRecord.getSubstanceId())
+ .eq(FeStandardSubstance::getState, 1));
+ if (ObjectUtils.isEmpty(standardSubstance)){
+ throw new ErrorException("璇ョ墿璐ㄦ湭琚鐢紝鏃犻渶褰掕繕锛�");
+ }
+ standardSubstance.setState(0);
+ feStandardSubstanceMapper.updateById(standardSubstance);
+ baseMapper.update(feStandardSubstanceRecord, Wrappers.<FeStandardSubstanceRecord>lambdaUpdate()
+ .eq(FeStandardSubstanceRecord::getSubstanceId, feStandardSubstanceRecord.getSubstanceId())
+ .eq(FeStandardSubstanceRecord::getStatus, 0));
+ }
+
+ @Override
+ public List<FeStandardSubstanceRecord> getSubstanceRecord(Integer id) {
+ QueryWrapper<FeStandardSubstanceRecord> queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("substance_id",id);
+ List<FeStandardSubstanceRecord> list = this.baseMapper.selectList(queryWrapper);
+ return list;
+ }
+
+ @Override
+ public IPage<SubstanceRecordVo> getPage(Page page, SubstanceRecordVo vo) {
+ return this.baseMapper.getPage(page,vo);
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java
new file mode 100644
index 0000000..7b97938
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java
@@ -0,0 +1,144 @@
+package com.ruoyi.require.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+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.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.require.excel.FeStandardSubstanceImport;
+import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.service.FeStandardSubstanceService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-13 03:58:59
+ */
+@Service
+public class FeStandardSubstanceServiceImpl extends ServiceImpl<FeStandardSubstanceMapper, FeStandardSubstance> implements FeStandardSubstanceService {
+
+ @Override
+ public IPage<FeStandardSubstance> page(Page page, FeStandardSubstance feStandardSubstance) {
+ return this.baseMapper.getPage(page,feStandardSubstance);
+ }
+
+ @Override
+ public void downloadImportTemplate(HttpServletResponse response) {
+ response.reset();
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+ try {
+ String fileName = URLEncoder.encode("鏍囧噯鐗╄川瀵煎叆妯℃澘.xlsx", "UTF-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ EasyExcel.write(response.getOutputStream(), FeStandardSubstanceImport.class)
+ .sheet("鏍囧噯鐗╄川瀵煎叆妯℃澘")
+ .doWrite(Collections.emptyList());
+ } catch (Exception e) {
+ throw new RuntimeException("鏍囧噯鐗╄川瀵煎叆妯℃澘涓嬭浇澶辫触", e);
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int importStandardSubstance(MultipartFile file) {
+ if (file == null || file.isEmpty()) {
+ throw new ErrorException("璇烽�夋嫨闇�瑕佸鍏ョ殑Excel鏂囦欢");
+ }
+ String fileName = file.getOriginalFilename();
+ if (fileName == null || !fileName.toLowerCase(Locale.ROOT).endsWith(".xlsx")) {
+ throw new ErrorException("浠呮敮鎸�.xlsx鏍煎紡鏂囦欢");
+ }
+
+ final List<FeStandardSubstanceImport> rows;
+ try {
+ rows = EasyExcel.read(file.getInputStream())
+ .head(FeStandardSubstanceImport.class)
+ .sheet()
+ .doReadSync();
+ } catch (Exception e) {
+ throw new ErrorException("Excel瑙f瀽澶辫触锛岃浣跨敤涓嬭浇鐨勫鍏ユā鏉�");
+ }
+ if (CollectionUtils.isEmpty(rows)) {
+ throw new ErrorException("瀵煎叆鏂囦欢娌℃湁鏍囧噯鐗╄川鏁版嵁");
+ }
+
+ List<FeStandardSubstance> substances = new ArrayList<>();
+ for (int i = 0; i < rows.size(); i++) {
+ int rowNumber = i + 2;
+ FeStandardSubstanceImport row = rows.get(i);
+ String manageNum = required(row.getManageNum(), rowNumber, "绠$悊缂栧彿");
+
+ FeStandardSubstance substance = new FeStandardSubstance();
+ substance.setName(required(row.getName(), rowNumber, "鏍囧噯鐗╄川鍚嶇О"));
+ substance.setModel(required(row.getModel(), rowNumber, "瑙勬牸鍨嬪彿"));
+ substance.setFactoryManufacturer(required(row.getFactoryManufacturer(), rowNumber, "鐢熶骇鍘傚"));
+ substance.setFactoryNum(required(row.getFactoryNum(), rowNumber, "鍑哄巶缂栧彿"));
+ substance.setManageNum(manageNum);
+ substance.setUncertainty(required(row.getUncertainty(), rowNumber, "涓嶇‘瀹氬害"));
+ substance.setQuantity(parseQuantity(row.getQuantity(), rowNumber));
+ substance.setAcquisitionDate(parseDate(row.getAcquisitionDate(), rowNumber, "璐疆鏃ユ湡"));
+ substance.setEffectiveDate(parseDate(row.getEffectiveDate(), rowNumber, "鏈夋晥鏈�"));
+ substance.setFileNum(required(row.getFileNum(), rowNumber, "妗f缂栧彿"));
+ substance.setPosition(required(row.getPosition(), rowNumber, "瀛樻斁浣嶇疆"));
+ substance.setRemark(trim(row.getRemark()));
+ substance.setState(0);
+ substances.add(substance);
+ }
+ saveBatch(substances);
+ return substances.size();
+ }
+
+ private Long parseQuantity(String input, int rowNumber) {
+ String value = required(input, rowNumber, "鏁伴噺");
+ try {
+ long quantity = Long.parseLong(value);
+ if (quantity <= 0) {
+ throw new NumberFormatException();
+ }
+ return quantity;
+ } catch (NumberFormatException e) {
+ throw new ErrorException("绗�" + rowNumber + "琛岋細鏁伴噺蹇呴』鏄ぇ浜�0鐨勬暣鏁�");
+ }
+ }
+
+ private LocalDateTime parseDate(String input, int rowNumber, String column) {
+ String value = required(input, rowNumber, column);
+ try {
+ return LocalDate.parse(value.substring(0, Math.min(value.length(), 10)).replace('/', '-'), DateTimeFormatter.ofPattern("yyyy-M-d"))
+ .atStartOfDay();
+ } catch (Exception e) {
+ throw new ErrorException("绗�" + rowNumber + "琛岋細" + column + "鏍煎紡搴斾负yyyy-MM-dd");
+ }
+ }
+
+ private String required(String input, int rowNumber, String column) {
+ String value = trim(input);
+ if (StringUtils.isBlank(value)) {
+ throw new ErrorException("绗�" + rowNumber + "琛岋細" + column + "涓嶈兘涓虹┖");
+ }
+ return value;
+ }
+
+ private String trim(String value) {
+ return value == null ? null : value.trim();
+ }
+}
\ No newline at end of file
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumDateServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumDateServiceImpl.java
new file mode 100644
index 0000000..59c7b07
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumDateServiceImpl.java
@@ -0,0 +1,144 @@
+package com.ruoyi.require.service.impl;
+
+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.Pictures;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.require.dto.FeTempHumDateDto;
+import com.ruoyi.require.dto.FeTempHumRecordDto;
+import com.ruoyi.require.mapper.FeTempHumDateMapper;
+import com.ruoyi.require.pojo.FeTempHumDate;
+import com.ruoyi.require.pojo.FeTempHumRecord;
+import com.ruoyi.require.service.FeTempHumDateService;
+import com.ruoyi.require.service.FeTempHumRecordService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import jakarta.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.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴� 鍖哄煙 -鐖� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-09 11:02:18
+ */
+@Service
+public class FeTempHumDateServiceImpl extends ServiceImpl<FeTempHumDateMapper, FeTempHumDate> implements FeTempHumDateService {
+
+ @Resource
+ private FeTempHumRecordService feTempHumRecordService;
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public IPage<FeTempHumDateDto> getFeTempHumDate(Page page, FeTempHumDateDto feTempHumDateDto) {
+ return baseMapper.getFeTempHumDate(page, QueryWrappers.queryWrappers(feTempHumDateDto));
+ }
+
+ @Override
+ public void exportTemperatureAndHumidityRecords(Integer dateId, HttpServletResponse response) {
+ FeTempHumDate feTempHumDate = baseMapper.selectById(dateId);
+ // 鑾峰彇骞村害鏈堝害鏃堕棿
+ String[] month = feTempHumDate.getMonthDate().split("-");
+
+ IPage<FeTempHumRecordDto> list = feTempHumRecordService.getFeTempHumRecordPage(new Page<>(1, -1), dateId);
+ List<FeTempHumRecordDto> feTempHumRecordDtos = list.getRecords();
+ // 鎸夌収澶╂暟鍒嗙粍
+ Map<Integer, List<FeTempHumRecordDto>> groupMap = feTempHumRecordDtos.stream().peek(feTempHumRecordDto -> {
+ feTempHumRecordDto.setMonthDay(feTempHumRecordDto.getRecordDate().getDayOfMonth());
+ })
+ .collect(Collectors.groupingBy(FeTempHumRecordDto::getMonthDay));
+
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
+ // 閬嶅巻31鑾峰彇31涓璞�
+ List<FeTempHumRecordDto> recordDtoList = new ArrayList<>();
+ for (int i = 1; i <= 31; i++) {
+ FeTempHumRecordDto recordDto = new FeTempHumRecordDto();
+ recordDto.setMonth(i);
+ recordDtoList.add(recordDto);
+ // 鑾峰彇褰撳墠鏈堢殑
+ List<FeTempHumRecordDto> recordDtos = groupMap.get(i);
+ if (CollectionUtils.isNotEmpty(recordDtos)) {
+ // 澶嶅埗瀵硅薄
+ BeanUtils.copyProperties(recordDtos.get(0), recordDto, "month");
+ recordDto.setMorningTestTimeStr(recordDto.getMorningTestTime() == null ? null : recordDto.getMorningTestTime().format(formatter));
+ recordDto.setAfternoonTimeStr(recordDto.getAfternoonTime() == null ? null : recordDto.getAfternoonTime().format(formatter));
+ recordDto.setMorningRecorderUrlRender(StringUtils.isNotBlank(recordDto.getMorningRecorderUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + recordDto.getMorningRecorderUrl()).create() : null);
+ recordDto.setAfternoonRecorderUrlRender(StringUtils.isNotBlank(recordDto.getAfternoonRecorderUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + recordDto.getAfternoonRecorderUrl()).create() : null);
+ }
+
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/temp_hum_date.docx");
+ Configure configure = Configure.builder()
+ .bind("recordList", new HackLoopTableRenderPolicy())
+ .build();
+
+ HashMap<String, Object> map = new HashMap<>();
+ map.put("testAreaName", feTempHumDate.getTestAreaName());
+ map.put("experimentalYear", month[0]);
+ map.put("experimentalMonth", month[1]);
+ map.put("subjoin", feTempHumDate.getSubjoin());
+
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("feTempHum", map);
+ put("recordList", recordDtoList);
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ /**
+ * 娓╂箍搴︾‘璁�
+ * @param feTempHumDate
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void affirmFeTempHumDate(FeTempHumDate feTempHumDate) {
+ // 娓╂箍搴︾‘璁�
+ this.update(Wrappers.<FeTempHumDate>lambdaUpdate()
+ .eq(FeTempHumDate::getDateId, feTempHumDate.getDateId())
+ .set(FeTempHumDate::getRegistrarUserId, feTempHumDate.getRegistrarUserId()));
+
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumRecordServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumRecordServiceImpl.java
new file mode 100644
index 0000000..c18fdd6
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumRecordServiceImpl.java
@@ -0,0 +1,75 @@
+package com.ruoyi.require.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.ruoyi.require.dto.FeTempHumRecordDto;
+import com.ruoyi.require.mapper.FeTempHumRecordMapper;
+import com.ruoyi.require.pojo.FeTempHumRecord;
+import com.ruoyi.require.service.FeTempHumRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁炬柦鍜岀幆澧冩潯浠�-璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-07 04:28:52
+ */
+@Service
+public class FeTempHumRecordServiceImpl extends ServiceImpl<FeTempHumRecordMapper, FeTempHumRecord> implements FeTempHumRecordService {
+
+ @Override
+ public IPage<FeTempHumRecordDto> getFeTempHumRecordPage(Page page, Integer dateId) {
+ IPage<FeTempHumRecordDto> feTempHumRecordPage = baseMapper.getFeTempHumRecordPage(page, dateId);
+ for (FeTempHumRecordDto record : feTempHumRecordPage.getRecords()) {
+ // 鍒ゆ柇鏄惁鏄棶棰樻暟鎹�
+ // 鍒ゆ柇娓╂箍搴︽槸鍚﹁秴杩囧尯闂�
+ boolean flag = false;
+ if (StringUtils.isNotBlank(record.getMorningTemp())) {
+ Double value = Double.valueOf(record.getMorningTemp());
+ if (value > record.getTemperatureHighest() || value < record.getTemperatureLowest()) {
+ flag = true;
+ }
+ }
+ if (StringUtils.isNotBlank(record.getMorningHum())) {
+ Double value = Double.valueOf(record.getMorningHum());
+ if (value > record.getHumidityHighest() || value < record.getHumidityLowest()) {
+ flag = true;
+ }
+ }
+ if (StringUtils.isNotBlank(record.getAfternoonTemp())) {
+ Double value = Double.valueOf(record.getAfternoonTemp());
+ if (value > record.getTemperatureHighest() || value < record.getTemperatureLowest()) {
+ flag = true;
+ }
+ }
+ if (StringUtils.isNotBlank(record.getAfternoonHum())) {
+ Double value = Double.valueOf(record.getAfternoonHum());
+ if (value > record.getHumidityHighest() || value < record.getHumidityLowest()) {
+ flag = true;
+ }
+ }
+
+ // 鍒ゆ柇鏄惁鏄亽娓╀簩, 鏄亽娓╀簩涓婁笅娓╁害鏄惁瓒呰繃1鎽勬皬搴�
+ if (StringUtils.isNotBlank(record.getTestAreaName()) && record.getTestAreaName().equals("鎭掓俯浜�")) {
+ if (StringUtils.isNotBlank(record.getMorningTemp()) && StringUtils.isNotBlank(record.getAfternoonTemp())) {
+ if (Double.valueOf(record.getAfternoonTemp()) - Double.valueOf(record.getMorningTemp()) > 1) {
+ flag = true;
+ }
+ }
+ }
+
+ if (flag) {
+ record.setIsIssue(1);
+ } else {
+ record.setIsIssue(0);
+ }
+
+
+ }
+ return feTempHumRecordPage;
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ForeignRegisterServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ForeignRegisterServiceImpl.java
new file mode 100644
index 0000000..b699b80
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ForeignRegisterServiceImpl.java
@@ -0,0 +1,102 @@
+package com.ruoyi.require.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.data.Pictures;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.require.dto.ForeignRegisterDto;
+import com.ruoyi.require.mapper.ForeignRegisterMapper;
+import com.ruoyi.require.pojo.ForeignRegister;
+import com.ruoyi.require.service.ForeignRegisterService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import jakarta.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-11-19 07:17:35
+ */
+@Service
+public class ForeignRegisterServiceImpl extends ServiceImpl<ForeignRegisterMapper, ForeignRegister> implements ForeignRegisterService {
+ @Resource
+ private UserMapper userMapper;
+ @Value("${file.path}")
+ private String imgUrl;
+
+ /**
+ * 澶栨潵浜哄憳鐧昏鍒嗛〉鏌ヨ
+ * @param page
+ * @param foreignRegister
+ * @return
+ */
+ @Override
+ public IPage<ForeignRegisterDto> pageForeignRegister(Page page, ForeignRegisterDto foreignRegister) {
+ String beginDate = foreignRegister.getBeginDate();
+ String endDate = foreignRegister.getEndDate();
+ foreignRegister.setBeginDate(null);
+ foreignRegister.setEndDate(null);
+ return baseMapper.pageForeignRegister(page, QueryWrappers.queryWrappers(foreignRegister), beginDate, endDate);
+ }
+
+ /**
+ * 瀵煎嚭澶栨潵浜哄憳鐧昏
+ * @param foreignRegister
+ */
+ @Override
+ public void exportForeignRegister(ForeignRegisterDto foreignRegister, HttpServletResponse response) {
+ String beginDate = foreignRegister.getBeginDate();
+ String endDate = foreignRegister.getEndDate();
+ foreignRegister.setBeginDate(null);
+ foreignRegister.setEndDate(null);
+ List<ForeignRegisterDto> register = baseMapper.getForeignRegisterList(QueryWrappers.queryWrappers(foreignRegister), beginDate, endDate);
+
+ for (ForeignRegisterDto foreignRegisterDto : register) {
+ // 娣诲姞鍗忓悓浜哄拰鎵瑰噯浜虹鍚�
+ foreignRegisterDto.setAccompanyingRender(StringUtils.isNotBlank(foreignRegisterDto.getAccompanyingUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + foreignRegisterDto.getAccompanyingUrl()).create() : null);
+ foreignRegisterDto.setApproveRender(StringUtils.isNotBlank(foreignRegisterDto.getApproveUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + foreignRegisterDto.getApproveUrl()).create() : null);
+ }
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/foreign-register.docx");
+ Configure configure = Configure.builder()
+ .bind("register", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("register", register);
+ }});
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesDetailServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesDetailServiceImpl.java
new file mode 100644
index 0000000..6c6cefa
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.InternalWastesDetailMapper;
+import com.ruoyi.require.pojo.InternalWastesDetail;
+import com.ruoyi.require.service.InternalWastesDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏璇︽儏 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-19 06:39:54
+ */
+@Service
+public class InternalWastesDetailServiceImpl extends ServiceImpl<InternalWastesDetailMapper, InternalWastesDetail> implements InternalWastesDetailService {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesServiceImpl.java
new file mode 100644
index 0000000..a4afff2
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesServiceImpl.java
@@ -0,0 +1,169 @@
+package com.ruoyi.require.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.require.dto.InternalWastesDto;
+import com.ruoyi.require.mapper.InternalWastesMapper;
+import com.ruoyi.require.pojo.InternalWastes;
+import com.ruoyi.require.pojo.InternalWastesDetail;
+import com.ruoyi.require.service.InternalWastesDetailService;
+import com.ruoyi.require.service.InternalWastesService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.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-11-19 06:39:27
+ */
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class InternalWastesServiceImpl extends ServiceImpl<InternalWastesMapper, InternalWastes> implements InternalWastesService {
+
+ private InternalWastesDetailService internalWastesDetailService;
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏鍒嗛〉鏌ヨ
+ * @param page
+ * @param internalWastes
+ * @return
+ */
+ @Override
+ public IPage<InternalWastesDto> pageInternalWastes(Page page, InternalWastes internalWastes) {
+ return baseMapper.pageInternalWastes(page, QueryWrappers.queryWrappers(internalWastes));
+ }
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏鏂板
+ * @param internalWastes
+ * @return
+ */
+ @Override
+ public boolean addInternalWastes(InternalWastesDto internalWastes) {
+
+ baseMapper.insert(internalWastes);
+ // 鏂板璇︽儏
+ for (InternalWastesDetail internalWastesDetail : internalWastes.getWastesDetailList()) {
+ internalWastesDetail.setWastesId(internalWastes.getWastesId());
+ }
+ internalWastesDetailService.saveBatch(internalWastes.getWastesDetailList());
+ return true;
+ }
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏淇敼
+ * @param internalWastes
+ * @return
+ */
+ @Override
+ public boolean updateInternalWastes(InternalWastesDto internalWastes) {
+ baseMapper.updateById(internalWastes);
+
+ // 鍒犻櫎涔嬪墠鐨勮鎯�
+ internalWastesDetailService.remove(Wrappers.<InternalWastesDetail>lambdaQuery()
+ .eq(InternalWastesDetail::getWastesId, internalWastes.getWastesId()));
+
+ // 鏂板璇︽儏
+ for (InternalWastesDetail internalWastesDetail : internalWastes.getWastesDetailList()) {
+ internalWastesDetail.setWastesId(internalWastes.getWastesId());
+ }
+ internalWastesDetailService.saveBatch(internalWastes.getWastesDetailList());
+
+ return true;
+ }
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏鍒犻櫎
+ * @param WastesId
+ * @return
+ */
+ @Override
+ public boolean delInternalWastes(Integer WastesId) {
+ internalWastesDetailService.remove(Wrappers.<InternalWastesDetail>lambdaQuery()
+ .eq(InternalWastesDetail::getWastesId, WastesId));
+ baseMapper.deleteById(WastesId);
+ return true;
+ }
+
+ /**
+ * 瀹夊叏鍐呭姟涓夊簾鐧昏鏌ョ湅璇︽儏
+ * @param WastesId
+ * @return
+ */
+ @Override
+ public InternalWastesDto getInternalWastesOne(Integer WastesId) {
+ InternalWastes internalWastes = baseMapper.selectById(WastesId);
+ InternalWastesDto internalWastesDto = new InternalWastesDto();
+ BeanUtils.copyProperties(internalWastes, internalWastesDto);
+
+ // 鏌ヨ璇︾粏淇℃伅
+ internalWastesDto.setWastesDetailList(internalWastesDetailService.list(Wrappers.<InternalWastesDetail>lambdaQuery()
+ .eq(InternalWastesDetail::getWastesId, WastesId)));
+ return internalWastesDto;
+ }
+
+ /**
+ * 瀵煎嚭涓夊簾澶勭悊
+ * @param wastesId
+ * @param response
+ */
+ @Override
+ public void exportInternalWastes(Integer wastesId, HttpServletResponse response) {
+ InternalWastes internalWastes = baseMapper.selectById(wastesId);
+
+ List<InternalWastesDetail> wastesDetailList = internalWastesDetailService.list(Wrappers.<InternalWastesDetail>lambdaQuery()
+ .eq(InternalWastesDetail::getWastesId, wastesId));
+
+ int index = 1;
+ for (InternalWastesDetail detail : wastesDetailList) {
+ detail.setIndex(index);
+ index++;
+ }
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-wastes.docx");
+ Configure configure = Configure.builder()
+ .bind("wastesDetailList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("remark", internalWastes.getRemark());
+ put("wastesDetailList", wastesDetailList);
+ }});
+
+ 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();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java
new file mode 100644
index 0000000..deeb125
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java
@@ -0,0 +1,14 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.ProcurementSuppliesConsumablesMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+import com.ruoyi.require.service.ProcurementSuppliesConsumablesService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class ProcurementSuppliesConsumablesServiceImpl extends ServiceImpl<ProcurementSuppliesConsumablesMapper, ProcurementSuppliesConsumables>
+ implements ProcurementSuppliesConsumablesService {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesContentsServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesContentsServiceImpl.java
new file mode 100644
index 0000000..634d4c7
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesContentsServiceImpl.java
@@ -0,0 +1,91 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.require.mapper.ProcurementSuppliesContentsMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesContents;
+import com.ruoyi.require.service.ProcurementSuppliesContentsService;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+@AllArgsConstructor
+public class ProcurementSuppliesContentsServiceImpl extends ServiceImpl<ProcurementSuppliesContentsMapper, ProcurementSuppliesContents>
+ implements ProcurementSuppliesContentsService {
+
+ private UserMapper userMapper;
+
+ @Override
+ public List<ProcurementSuppliesContents> directoryListing() {
+ ArrayList<ProcurementSuppliesContents> list = new ArrayList<>();
+ // 鏌ュ嚭涓�绾х洰褰�
+ List<ProcurementSuppliesContents> firstLevel = baseMapper.selectList(new LambdaQueryWrapper<ProcurementSuppliesContents>()
+ .isNull(ProcurementSuppliesContents::getParentId));
+
+ // 鏌ュ嚭鍚湁鐖惰妭鐐圭殑 骞堕�氳繃鐖惰妭鐐瑰垎缁�
+ List<ProcurementSuppliesContents> seconds = baseMapper.selectList(new LambdaQueryWrapper<ProcurementSuppliesContents>()
+ .isNotNull(ProcurementSuppliesContents::getParentId));
+ if(firstLevel.size() > 0){
+ Map<Integer, List<ProcurementSuppliesContents>> collect = seconds.stream()
+ .collect(Collectors.groupingBy(ProcurementSuppliesContents::getParentId));
+ // 鏍规嵁鍒嗙粍鐨刱ey 璧嬪�煎搴旂殑children
+ for (int i = 0; i < firstLevel.size(); i++) {
+ recursion(firstLevel.get(i),collect);
+ list.add(firstLevel.get(i));
+ }
+ }
+ return list;
+ }
+
+ // 閫掑綊璧嬪�糲hildren
+ public ProcurementSuppliesContents recursion(ProcurementSuppliesContents firstLevel, Map<Integer, List<ProcurementSuppliesContents>> collect) {
+ // 灏嗙埗鑺傜偣鐨刢hildren璧嬪��
+ if(collect.containsKey(firstLevel.getId())) {
+ List<ProcurementSuppliesContents> procurementSupplies = collect.get(firstLevel.getId());
+ firstLevel.setChildren(procurementSupplies);
+ for (int i = 0; i < procurementSupplies.size(); i++) {
+ recursion(procurementSupplies.get(i),collect);
+ }
+ }
+ return firstLevel;
+ }
+
+ @Override
+ public List<Map<String, Object>> getNodeNames() {
+ List<ProcurementSuppliesContents> procurementSuppliesContents = baseMapper.selectList(null);
+ List<Map<String, Object>> collect = new ArrayList<>();
+ if(procurementSuppliesContents.size() > 0) {
+ collect = procurementSuppliesContents.stream().map(item -> {
+ HashMap<String, Object> map = new HashMap<>();
+ map.put("id", item.getId());
+ map.put("nodeName", item.getNodeName());
+ return map;
+ }).collect(Collectors.toList());
+ }
+ return collect;
+ }
+
+ @Override
+ public List<Map<String, Object>> getUserList() {
+ // 1 鍋滅敤
+ List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getStatus, 0));
+ List<Map<String, Object>> collect = new ArrayList<>();
+ if(users.size() > 0) {
+ collect = users.stream().map(item -> {
+ HashMap<String, Object> map = new HashMap<>();
+ map.put("id", item.getId());
+ map.put("nodeName", item.getName());
+ return map;
+ }).collect(Collectors.toList());
+ }
+ return collect;
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java
new file mode 100644
index 0000000..2f8a263
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
+import com.ruoyi.require.mapper.ProcurementSuppliesExpendsMapper;
+import com.ruoyi.require.mapper.ProcurementSuppliesListMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
+import com.ruoyi.require.pojo.ProcurementSuppliesList;
+import com.ruoyi.require.service.ProcurementSuppliesExpendsService;
+import com.ruoyi.system.mapper.UserMapper;
+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;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 03:47:19
+ */
+@Service
+public class ProcurementSuppliesExpendsServiceImpl extends ServiceImpl<ProcurementSuppliesExpendsMapper, ProcurementSuppliesExpends> implements ProcurementSuppliesExpendsService {
+ @Autowired
+ private ProcurementSuppliesExpendsMapper expendsMapper;
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @Autowired
+ private ProcurementSuppliesListMapper listMapper;
+
+ @Override
+ public List<ProcurementSuppliesExpendDto> selectAll(Long procurementSuppliesListId) {
+ List<ProcurementSuppliesExpendDto> res = new ArrayList<>();
+ List<ProcurementSuppliesExpends> list = expendsMapper.selectList(new QueryWrapper<ProcurementSuppliesExpends>().lambda().eq(ProcurementSuppliesExpends::getListId, procurementSuppliesListId));
+ for (ProcurementSuppliesExpends procurementSuppliesExpend : list) {
+ ProcurementSuppliesExpendDto dto = new ProcurementSuppliesExpendDto();
+ BeanUtils.copyProperties(procurementSuppliesExpend, dto);
+
+ User enterUser = userMapper.selectById(procurementSuppliesExpend.getEnterUserId());
+ User updateUser = userMapper.selectById(procurementSuppliesExpend.getUpdateUserId());
+ dto.setEnterUserName(enterUser.getName());
+ dto.setUpdateUserName(updateUser.getName());
+ res.add(dto);
+ }
+
+ return res;
+ }
+
+ @Override
+ @Transactional
+ public Integer addExpends(ProcurementSuppliesExpendDto expendDto) throws ServiceException {
+ ProcurementSuppliesList list = listMapper.selectProcurementSuppliesListForUpdate(expendDto.getListId());
+
+ ProcurementSuppliesExpends expends = new ProcurementSuppliesExpends();
+ BeanUtils.copyProperties(expendDto, expends);
+ expends.setEnterUserId(SecurityUtils.getUserId().intValue());
+ expends.setUpdateUserId(SecurityUtils.getUserId().intValue());
+ if (list.getCurrentAmount() < expendDto.getAmount()) {
+ return 0;
+ }
+
+ list.setCurrentAmount(list.getCurrentAmount() - expendDto.getAmount());
+
+ listMapper.updateById(list);
+ return expendsMapper.insert(expends);
+ }
+
+ @Override
+ @Transactional
+ public Integer deleteExpends(Long id) {
+ ProcurementSuppliesExpends expend = expendsMapper.selectById(id);
+ ProcurementSuppliesList list = listMapper.selectProcurementSuppliesListForUpdate(expend.getListId());
+ list.setCurrentAmount(list.getCurrentAmount() + expend.getAmount());
+ list.setUpdateUser(SecurityUtils.getUserId().intValue());
+ listMapper.updateById(list);
+ return expendsMapper.deleteById(id);
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesListServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesListServiceImpl.java
new file mode 100644
index 0000000..3447ef0
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesListServiceImpl.java
@@ -0,0 +1,130 @@
+package com.ruoyi.require.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.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.inspect.dto.ProcurementSuppliesListEDto;
+import com.ruoyi.require.dto.ProcurementSuppliesListDto;
+import com.ruoyi.require.mapper.ProcurementSuppliesListMapper;
+import com.ruoyi.require.mapper.SupplierManagementMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesList;
+import com.ruoyi.require.pojo.SupplierManagement;
+import com.ruoyi.require.service.ProcurementSuppliesListService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟涓庝緵搴斿晢 鑰楁潗鍒楄〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 04:04:32
+ */
+@Service
+public class ProcurementSuppliesListServiceImpl extends ServiceImpl<ProcurementSuppliesListMapper, ProcurementSuppliesList> implements ProcurementSuppliesListService {
+ @Autowired
+ private UserMapper userMapper;
+
+ @Autowired
+ private SupplierManagementMapper supplierManagementMapper;
+
+ @Autowired
+ private ProcurementSuppliesListMapper procurementSuppliesListMapper;
+
+ @Override
+ public IPage<ProcurementSuppliesListDto> selectList(Page page, ProcurementSuppliesListDto list) {
+ IPage<ProcurementSuppliesList> iPage = baseMapper.selectProcurementSuppliesList(page, list);
+ IPage<ProcurementSuppliesListDto> result = new Page<>();
+ List<ProcurementSuppliesListDto> dtos = new ArrayList<>();
+ BeanUtils.copyProperties(iPage, result);
+ for (int i = 0; i < iPage.getRecords().size(); i++) {
+ ProcurementSuppliesList record = iPage.getRecords().get(i);
+ ProcurementSuppliesListDto dto = new ProcurementSuppliesListDto();
+ BeanUtils.copyProperties(record, dto);
+ if (record.getPersonInCharge() != 0) {
+ User user = userMapper.selectById(record.getPersonInCharge());
+ dto.setPersonInChargeName(user.getName());
+ }
+ if (record.getUpdateUser() != 0) {
+ User updateUser = userMapper.selectById(record.getUpdateUser());
+ dto.setUpdateUserName(updateUser.getName());
+ }
+
+ if (record.getSupplier() != 0) {
+ SupplierManagement supplierManagement = supplierManagementMapper.selectById(record.getSupplier());
+ dto.setSupplierName(supplierManagement.getSupplierName());
+ }
+
+ dtos.add(dto);
+ }
+ result.setRecords(dtos);
+
+ return result;
+ }
+
+ @Override
+ public Integer addProcurementSuppliesList(ProcurementSuppliesListDto dto) {
+ ProcurementSuppliesList list = new ProcurementSuppliesList();
+ BeanUtils.copyProperties(dto, list);
+ return baseMapper.insert(list);
+ }
+
+ @Override
+ public Integer updateProcurementSuppliesList(ProcurementSuppliesListDto dto) {
+ ProcurementSuppliesList list = new ProcurementSuppliesList();
+ BeanUtils.copyProperties(dto, list);
+ return baseMapper.updateById(list);
+ }
+
+ @Override
+ public void exportProcurementSuppliesList(Integer contentsId,HttpServletResponse response) {
+// List<ProcurementSuppliesList> data = this.list(new QueryWrapper<ProcurementSuppliesList>().lambda()
+// .select(ProcurementSuppliesList::getId
+// , ProcurementSuppliesList::getUnit
+// , ProcurementSuppliesList::getLowerLimit
+// , ProcurementSuppliesList::getConsumablesType
+// , ProcurementSuppliesList::getItemNumber
+// , ProcurementSuppliesList::getConsumablesName
+// , ProcurementSuppliesList::getSpecifications
+// , ProcurementSuppliesList::getCurrentAmount
+// , ProcurementSuppliesList::getRemark).eq(ProcurementSuppliesList::getContentsId, contentsId));
+ List<ProcurementSuppliesList> data = procurementSuppliesListMapper.selectProcurementSuppliesListByContentsId(contentsId);
+ if (data.size()==0) {
+ throw new RuntimeException("鏃犳暟鎹�");
+ }
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+ try {
+ String fileName = URLEncoder.encode("鑰楁潗鍒楄〃", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ // 鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ WriteSheet writeSheet = EasyExcel.writerSheet(0, "鑰楁潗鍒楄〃").head(ProcurementSuppliesListEDto.class).build();
+ excelWriter.write(data, writeSheet);
+ // 鍏抽棴娴�
+ excelWriter.finish();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java
new file mode 100644
index 0000000..65fecad
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java
@@ -0,0 +1,124 @@
+package com.ruoyi.require.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.CollectionUtils;
+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.require.dto.StoreDto;
+import com.ruoyi.require.excel.StoreExcel;
+import com.ruoyi.require.mapper.ProcurementSuppliesConsumablesMapper;
+import com.ruoyi.require.mapper.ProcurementSuppliesStoreMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+import com.ruoyi.require.service.ProcurementSuppliesStoreService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+public class ProcurementSuppliesStoreServiceImpl extends ServiceImpl<ProcurementSuppliesStoreMapper, ProcurementSuppliesStore>
+ implements ProcurementSuppliesStoreService {
+
+ private ProcurementSuppliesConsumablesMapper consumablesMapper;
+
+
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void addStore(Map<String,Object> map) {
+ ProcurementSuppliesStore procurementSuppliesStore = JSONObject.parseObject(JSONObject.toJSONString(map.get("store")), ProcurementSuppliesStore.class);
+ procurementSuppliesStore.setRegistrant(SecurityUtils.getUserId().intValue());
+ procurementSuppliesStore.setRegistrantTime(LocalDate.now());
+ baseMapper.insert(procurementSuppliesStore);
+ List<ProcurementSuppliesConsumables> list = JSON.parseArray(JSONObject.toJSONString(map.get("consumables")), ProcurementSuppliesConsumables.class);
+ // 鐢熸垚璐у彿
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+ if(!Objects.isNull(list) && list.size() > 0) {
+ for (int i = 0; i < list.size(); i++) {
+ list.get(i).setStoreId(procurementSuppliesStore.getId());
+ String itemNumber ="HCRK" + LocalDate.now().format(dateTimeFormatter) + String.format("%03d", i);
+ list.get(i).setItemNumber(itemNumber);
+ consumablesMapper.insert(list.get(i));
+ }
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void updateStore(Map<String,Object> map) {
+ ProcurementSuppliesStore procurementSuppliesStore = JSONObject.parseObject(JSONObject.toJSONString(map.get("store")), ProcurementSuppliesStore.class);
+ baseMapper.updateById(procurementSuppliesStore);
+ List<ProcurementSuppliesConsumables> list = JSON.parseArray(JSONObject.toJSONString(map.get("consumables")), ProcurementSuppliesConsumables.class);
+ consumablesMapper.delete(new LambdaQueryWrapper<ProcurementSuppliesConsumables>()
+ .eq(ProcurementSuppliesConsumables::getStoreId, procurementSuppliesStore.getId()));
+ if(!Objects.isNull(list) && list.size() > 0) {
+ for (int i = 0; i < list.size(); i++) {
+ list.get(i).setId(null);
+ list.get(i).setStoreId(procurementSuppliesStore.getId());
+ consumablesMapper.insert(list.get(i));
+ }
+ }
+ }
+
+ @Override
+ public void deleteStore(Integer id, Integer consumablesId) {
+ consumablesMapper.deleteById(consumablesId);
+ List<ProcurementSuppliesConsumables> consumables = consumablesMapper.selectList(new LambdaQueryWrapper<ProcurementSuppliesConsumables>()
+ .eq(ProcurementSuppliesConsumables::getStoreId, id));
+ // 鍒ゆ柇鏄惁杩樻湁鑰楁潗 娌℃湁灏卞皢涓昏〃Store鍒犻櫎
+ if(CollectionUtils.isEmpty(consumables)) {
+ baseMapper.deleteById(id);
+ }
+ }
+
+ @Override
+ public IPage<StoreDto> selectStoreList(Page page, StoreDto storeDto) {
+ IPage<StoreDto> iPage = baseMapper.selectStoreList(page, QueryWrappers.queryWrappers(storeDto));
+ return iPage;
+ }
+
+ /**
+ * 瀵煎嚭excel
+ * @param contentsId
+ * @param response
+ */
+ @Override
+ public void exportExcel(Integer contentsId, HttpServletResponse response) throws IOException {
+ List<StoreExcel> storeExcels = baseMapper.exportExcel(contentsId);
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+ String fileName = null;
+ try {
+ fileName = URLEncoder.encode("鑰楁潗鍏ュ簱", "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException(e);
+ }
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ WriteSheet writeSheet = EasyExcel.writerSheet(0, "鑰楁潗鍏ュ簱").head(StoreExcel.class).build();
+ excelWriter.write(storeExcels, writeSheet);
+ excelWriter.finish();
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/SupplierManagementServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/SupplierManagementServiceImpl.java
new file mode 100644
index 0000000..2c8e5ee
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/SupplierManagementServiceImpl.java
@@ -0,0 +1,91 @@
+package com.ruoyi.require.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.conditions.query.QueryWrapper;
+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.require.dto.SupplierManagementDto;
+import com.ruoyi.require.mapper.SupplierManagementMapper;
+import com.ruoyi.require.pojo.SupplierManagement;
+import com.ruoyi.require.service.SupplierManagementService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 02:46:45
+ */
+@Service
+public class SupplierManagementServiceImpl extends ServiceImpl<SupplierManagementMapper, SupplierManagement> implements SupplierManagementService {
+
+ @Autowired
+ private SupplierManagementMapper supplierManagementMapper;
+
+ public SupplierManagementServiceImpl(SupplierManagementMapper supplierManagementMapper) {
+ this.supplierManagementMapper = supplierManagementMapper;
+ }
+
+ @Override
+ public List<SupplierManagement> selectSupplierManagement(SupplierManagement supplierManagement) {
+ return this.list();
+ }
+
+ @Override
+ public void exportSupplierManagement(Integer parentId, HttpServletResponse response) {
+ List<SupplierManagement> data = supplierManagementMapper.selectSupplierManagementAll(parentId);
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+ try {
+ String fileName = URLEncoder.encode("渚涘簲鍟嗙鐞�", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ // 鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ WriteSheet writeSheet = EasyExcel.writerSheet(0, "渚涘簲鍟嗙鐞�").head(SupplierManagementDto.class).build();
+ excelWriter.write(data, writeSheet);
+ // 鍏抽棴娴�
+ excelWriter.finish();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public IPage<SupplierManagement> selectQualifiedSupplierManagement(Page page, SupplierManagement supplierManagement) {
+ return baseMapper.selectQualifiedSupplierManagement(page, QueryWrappers.queryWrappers(supplierManagement));
+ }
+
+ @Override
+ public List<SupplierManagement> selectQualifiedSupplierManagementById(Integer supplierManagementId) {
+ return this.list(new QueryWrapper<SupplierManagement>().lambda().eq(SupplierManagement::getSupplierManagementId , supplierManagementId));
+ }
+
+ @Override
+ public List<SupplierManagement> selectSupplierManagementByParentId(Integer parentId) {
+ return supplierManagementMapper.selectSupplierManagement(parentId);
+ }
+
+ @Override
+ public List<SupplierManagement> selectSupplierManagementAll() {
+ return supplierManagementMapper.selectList(null);
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java
new file mode 100644
index 0000000..8e7a7f1
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java
@@ -0,0 +1,76 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.SuppliersDirectoryContentsMapper;
+import com.ruoyi.require.pojo.SuppliersDirectoryContents;
+import com.ruoyi.require.service.SuppliersDirectoryContentsService;
+import org.springframework.stereotype.Service;
+
+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-12-17 06:14:51
+ */
+@Service
+public class SuppliersDirectoryContentsServiceImpl extends ServiceImpl<SuppliersDirectoryContentsMapper, SuppliersDirectoryContents> implements SuppliersDirectoryContentsService {
+
+ @Override
+ public ArrayList<SuppliersDirectoryContents> directoryListing() {
+ ArrayList<SuppliersDirectoryContents> list = new ArrayList<>();
+ // 鏌ュ嚭涓�绾х洰褰�
+ List<SuppliersDirectoryContents> firstLevel = baseMapper.selectList(new LambdaQueryWrapper<SuppliersDirectoryContents>()
+ .isNull(SuppliersDirectoryContents::getParentId));
+
+ // 鏌ュ嚭鍚湁鐖惰妭鐐圭殑 骞堕�氳繃鐖惰妭鐐瑰垎缁�
+ List<SuppliersDirectoryContents> seconds = baseMapper.selectList(new LambdaQueryWrapper<SuppliersDirectoryContents>()
+ .isNotNull(SuppliersDirectoryContents::getParentId));
+ if(firstLevel.size() > 0){
+ Map<Integer, List<SuppliersDirectoryContents>> collect = seconds.stream()
+ .collect(Collectors.groupingBy(SuppliersDirectoryContents::getParentId));
+ // 鏍规嵁鍒嗙粍鐨刱ey 璧嬪�煎搴旂殑children
+ for (int i = 0; i < firstLevel.size(); i++) {
+ recursion(firstLevel.get(i),collect);
+ list.add(firstLevel.get(i));
+ }
+ }
+ return list;
+ }
+
+ @Override
+ public List<Map<String, Object>> getSuppliersDirectoryContentsNodeNames() {
+ List<SuppliersDirectoryContents> procurementSuppliesContents = baseMapper.selectList(null);
+ List<Map<String, Object>> collect = new ArrayList<>();
+ if(procurementSuppliesContents.size() > 0) {
+ collect = procurementSuppliesContents.stream().map(item -> {
+ HashMap<String, Object> map = new HashMap<>();
+ map.put("id", item.getId());
+ map.put("nodeName", item.getNodeName());
+ return map;
+ }).collect(Collectors.toList());
+ }
+ return collect;
+ }
+
+
+ public SuppliersDirectoryContents recursion(SuppliersDirectoryContents firstLevel, Map<Integer, List<SuppliersDirectoryContents>> collect) {
+ // 灏嗙埗鑺傜偣鐨刢hildren璧嬪��
+ if(collect.containsKey(firstLevel.getId())) {
+ List<SuppliersDirectoryContents> procurementSupplies = collect.get(firstLevel.getId());
+ firstLevel.setChildren(procurementSupplies);
+ for (int i = 0; i < procurementSupplies.size(); i++) {
+ recursion(procurementSupplies.get(i),collect);
+ }
+ }
+ return firstLevel;
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java b/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java
new file mode 100644
index 0000000..80df6f6
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java
@@ -0,0 +1,387 @@
+package com.ruoyi.require.task;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.require.dto.FeTempHumRecordDto;
+import com.ruoyi.require.mapper.CollectLaboratoryMapper;
+import com.ruoyi.require.mapper.CollectTemperatureHumidityMapper;
+import com.ruoyi.require.mapper.FeTempHumDateMapper;
+import com.ruoyi.require.mapper.FeTempHumRecordMapper;
+import com.ruoyi.require.pojo.CollectLaboratory;
+import com.ruoyi.require.pojo.CollectTemperatureHumidity;
+import com.ruoyi.require.pojo.FeTempHumDate;
+import com.ruoyi.require.pojo.FeTempHumRecord;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import jakarta.annotation.Resource;
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-19 鏄熸湡鍥� 8:33:56
+ * Description:
+ */
+@Component
+public class FeTempHumDateSchedule {
+
+ @Autowired
+ private CollectLaboratoryMapper collectLaboratoryMapper;
+ @Autowired
+ private FeTempHumDateMapper feTempHumDateMapper;
+ @Autowired
+ private CollectTemperatureHumidityMapper collectTemperatureHumidityMapper;
+ @Autowired
+ private FeTempHumRecordMapper feTempHumRecordMapper;
+ @Autowired
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ @Resource
+ private UserMapper userMapper;
+
+ // 鑾峰彇褰撳墠骞翠唤鍜屾湀浠� 濡傦細2024-11
+ private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+ private String formattedDate = sdf.format(Calendar.getInstance().getTime());
+
+ /**
+ * 妫�鏌ュ疄楠屽鏄惁鏈変换鍔�
+ */
+ public synchronized void checkLaboratoriesSchedule() {
+ // 鑾峰彇褰撳墠骞翠唤鍜屾湀浠� 濡傦細2024-11
+ formattedDate = sdf.format(Calendar.getInstance().getTime());
+ // 鏌ヨ鎵�鏈夌殑瀹為獙瀹�
+ List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null);
+ // 閬嶅巻瀹為獙瀹わ紝鍒ゆ柇浠诲姟鍒楄〃涓槸鍚﹀瓨璇ュ疄楠屽鐨勪换鍔�
+ for (CollectLaboratory collectLaboratory : collectLaboratories) {
+ // 鏌ヨ鏁版嵁搴撲腑鏄惁瀛樺湪璇ュ疄楠屽鐨勪换鍔�
+ int count = feTempHumDateMapper.selectFeTempHumDateIncludeFormattedDate(collectLaboratory.getLaboratory(), formattedDate);
+ // 鏌ヨ缁撴灉涓�0锛岃鏄庢暟鎹簱涓笉瀛樺湪璇ュ疄楠屽鐨勪换鍔★紝闇�瑕佹柊澧�
+ if (count == 0) {
+ FeTempHumDate feTempHumDate = new FeTempHumDate();
+ feTempHumDate.setMonthDate(formattedDate);
+ feTempHumDate.setTestAreaName(collectLaboratory.getLaboratory());
+ if (collectLaboratory.getLaboratory().equals("鎭掓俯浜�")) {
+ feTempHumDate.setSubjoin("娉�: 璇ュ疄楠屽鐜鏉′欢娓╁害娉㈠姩涓嶅ぇ浜幝�1鈩冭姹�");
+ }
+ feTempHumDateMapper.insert(feTempHumDate);
+ }
+ }
+ }
+
+ /**
+ * 姣忓ぉ9鐐规墽琛屼竴娆� 闄や簡鏄熸湡澶�
+ * 鑾峰彇娓╁害婀垮害
+ */
+// @Scheduled(cron = "0/5 * * * * *")
+ @Scheduled(cron = "0 0 9 * * 1-6") // 姣忓ぉ9鐐规墽琛屼竴娆� 闄や簡鏄熸湡澶�
+ public void task1() {
+ checkLaboratoriesSchedule();
+ // 鏍规嵁鏃堕棿闄嶅簭锛岃幏鍙栧埌鏈�鏂扮殑涓�鏉℃暟鎹�
+ CollectTemperatureHumidity collectTemperatureHumidity = collectTemperatureHumidityMapper.selectOne(Wrappers.<CollectTemperatureHumidity>lambdaQuery()
+ .orderByDesc(CollectTemperatureHumidity::getCollectTime)
+ .last("limit 1"));
+
+ // 鑾峰彇鎵�鏈夌殑瀹為獙瀹�
+ List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null);
+ // 閬嶅巻鑾峰彇瀹為獙瀹ょ紪鍙� 鑾峰彇娓╂箍搴� 淇濆瓨鍦ㄥ搴旂殑
+ for (CollectLaboratory collectLaboratory : collectLaboratories) {
+ // 瀹為獙瀹ょ紪鍙�
+ int labNumber = Integer.parseInt(collectLaboratory.getDeviceCode());
+ // 鏍规嵁瀹為獙瀹ょ紪鍙锋嫾鎺ュ搴旂殑婀垮害鍜屾俯搴﹀瓧娈�
+ String temperatureField = "code" + labNumber + "Temperature";
+ String humidityField = "code" + labNumber + "Humidity";
+ // 鑾峰彇娓╁害
+ Double temperature = getFieldValue(collectTemperatureHumidity, temperatureField) != null ? (Double) getFieldValue(collectTemperatureHumidity, temperatureField) : Double.valueOf(00.0);
+ // 鑾峰彇婀垮害
+ Double humidity = getFieldValue(collectTemperatureHumidity, humidityField) != null ? (Double) getFieldValue(collectTemperatureHumidity, humidityField) : Double.valueOf(00.0);
+ // 鏌ヨ璇曢獙鍖哄煙
+ FeTempHumDate feTempHumDate = feTempHumDateMapper.selectOne(Wrappers.<FeTempHumDate>lambdaQuery()
+ .eq(FeTempHumDate::getMonthDate, formattedDate)
+ .eq(FeTempHumDate::getTestAreaName, collectLaboratory.getLaboratory())
+ .orderByDesc(FeTempHumDate::getCreateTime)
+ .last("limit 1"));
+ Integer dateId = feTempHumDate.getDateId();
+ // 鍒ゆ柇浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+ FeTempHumRecord feTempHumRecord = record(dateId);
+ // 鏌ヨ鍑烘潵灏变唬琛ㄤ粖澶╄褰曡繃浜嗗氨涓嶈褰�
+ if (feTempHumRecord != null) {
+ // 鏈夋俯搴︽箍搴﹁褰曞氨涓嶈褰�
+ continue;
+ }
+
+ // 鍒涘缓浠婂ぉ娓╂箍搴﹁褰曞璞� 璁板綍涓婂崍娓╁害婀垮害
+ FeTempHumRecord newFeTempHumRecord = new FeTempHumRecord();
+ newFeTempHumRecord.setRecordDate(LocalDate.now());
+ newFeTempHumRecord.setMorningTestTime(LocalTime.now());
+ newFeTempHumRecord.setMorningTemp(temperature.toString());
+ newFeTempHumRecord.setMorningHum(humidity.toString());
+ newFeTempHumRecord.setDateId(dateId);
+ feTempHumRecordMapper.insert(newFeTempHumRecord);
+
+ // 鍒ゆ柇娓╂箍搴︽槸鍚﹁秴杩�, 瓒呰繃鎻愰啋
+ if (feTempHumDate.getRegistrarUserId() != null) {
+ if (temperature < collectLaboratory.getTemperatureLowest() || temperature > collectLaboratory.getTemperatureHighest() ||
+ humidity< collectLaboratory.getHumidityLowest() || humidity > collectLaboratory.getHumidityHighest()) {
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ鎺ユ敹浜�
+ User personnel = userMapper.selectById(feTempHumDate.getRegistrarUserId());
+
+ String message = "";
+ message += "涓婂崍瀹為獙瀹ゆ俯搴︽垨婀垮害瓒呰繃鎸囧畾鍖洪棿, 璇峰幓鏌ョ湅";
+ message += "\n璇峰幓璧勬簮绠$悊-璁炬柦鍜岀幆澧冩俯搴︿竴娓╂箍搴﹁褰�";
+ message += StrUtil.format("\n瀹為獙瀹ゅ尯鍩�: {}", feTempHumDate.getTestAreaName());
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(personnel.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+ }
+
+ }
+ }
+
+ /**
+ * 鍒ゆ柇浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+ */
+ private FeTempHumRecord record(Integer dateId) {
+ // 鑾峰彇浠婂ぉ鐨勬棩鏈�
+ LocalDate today = LocalDate.now();
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+ // 鑾峰彇浠婂ぉ鐨� 00:00:00 鍜� 23:59:59
+ String start = today.atStartOfDay().format(dateTimeFormatter); // 00:00:00
+ String end = today.atTime(LocalTime.MAX).format(dateTimeFormatter); // 23:59:59
+ // 鏌ヨ浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+ return feTempHumRecordMapper.selectOne(Wrappers.<FeTempHumRecord>lambdaQuery()
+ // 鍝釜瀹為獙瀹�
+ .eq(FeTempHumRecord::getDateId, dateId)
+ // 璁板綍鏃堕棿鍦ㄤ粖澶╀箣鍐�
+ .eq(FeTempHumRecord::getRecordDate, today)
+ .between(FeTempHumRecord::getMorningTestTime, start, end)
+ .orderByDesc(FeTempHumRecord::getTempHumId)
+ .last("limit 1"));
+ }
+
+ /**
+ * 姣忓ぉ14鐐规墽琛屼竴娆� 闄や簡鏄熸湡鍏拰鏄熸湡澶�
+ * 鑾峰彇娓╁害婀垮害
+ */
+// @Scheduled(cron = "0/5 * * * * *")
+ @Scheduled(cron = "0 0 14 * * 1-5") // 姣忓ぉ14鐐规墽琛屼竴娆� 闄や簡鏄熸湡鍏拰鏄熸湡澶�
+ public void task2() {
+
+ // 妫�鏌ュ疄楠屽鏄惁鏈変换鍔� 濡傛灉娌℃湁鏂板浠诲姟
+ checkLaboratoriesSchedule();
+ // 鏍规嵁鏃堕棿闄嶅簭锛岃幏鍙栧埌鏈�鏂扮殑涓�鏉℃暟鎹�
+ CollectTemperatureHumidity collectTemperatureHumidity = collectTemperatureHumidityMapper.selectOne(Wrappers.<CollectTemperatureHumidity>lambdaQuery()
+ .orderByDesc(CollectTemperatureHumidity::getCollectTime)
+ .last("limit 1"));
+ // 鑾峰彇鎵�鏈夌殑瀹為獙瀹�
+ List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null);
+ // 閬嶅巻鑾峰彇瀹為獙瀹ょ紪鍙� 鑾峰彇娓╂箍搴� 淇濆瓨鍦ㄥ搴旂殑
+ for (CollectLaboratory collectLaboratory : collectLaboratories) {
+ // 瀹為獙瀹ょ紪鍙�
+ int labNumber = Integer.parseInt(collectLaboratory.getDeviceCode());
+ // 鏍规嵁瀹為獙瀹ょ紪鍙锋嫾鎺ュ搴旂殑婀垮害鍜屾俯搴﹀瓧娈�
+ String temperatureField = "code" + labNumber + "Temperature";
+ String humidityField = "code" + labNumber + "Humidity";
+ // 鑾峰彇娓╁害
+ Double temperature = getFieldValue(collectTemperatureHumidity, temperatureField) != null ? (Double) getFieldValue(collectTemperatureHumidity, temperatureField) : Double.valueOf(00.0);
+ // 鑾峰彇婀垮害
+ Double humidity = getFieldValue(collectTemperatureHumidity, humidityField) != null ? (Double) getFieldValue(collectTemperatureHumidity, humidityField) : Double.valueOf(00.0);
+ // 鏌ヨ璇曢獙鍖哄煙
+ FeTempHumDate feTempHumDate = feTempHumDateMapper.selectOne(Wrappers.<FeTempHumDate>lambdaQuery()
+ .eq(FeTempHumDate::getMonthDate, formattedDate)
+ .eq(FeTempHumDate::getTestAreaName, collectLaboratory.getLaboratory())
+ .orderByDesc(FeTempHumDate::getCreateTime)
+ .last("limit 1"));
+ Integer dateId = feTempHumDate.getDateId();
+ // 鏌ヨ浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+ FeTempHumRecord feTempHumRecord = record(dateId);
+ // 濡傛灉娌℃湁鏌ヨ缁撴灉灏辫鏄庝笂鍗堟病鏈夎褰�
+ if (feTempHumRecord == null) {
+ // 鍒涘缓浠婂ぉ娓╂箍搴﹁褰曞璞� 璁板綍涓嬪崍娓╁害婀垮害
+ FeTempHumRecord newFeTempHumRecord = new FeTempHumRecord();
+ newFeTempHumRecord.setAfternoonTime(LocalTime.now());
+ newFeTempHumRecord.setAfternoonTemp(temperature.toString());
+ newFeTempHumRecord.setAfternoonHum(humidity.toString());
+ newFeTempHumRecord.setDateId(dateId);
+ feTempHumRecordMapper.insert(newFeTempHumRecord);
+ continue;
+ }
+
+ // 鏌ヨ鍑烘潵灏变唬琛ㄤ粖澶╄褰曡繃 鍐嶅垽鏂笅鍗堟湁璁板綍杩囨病鏈�
+ // 娓╁害鏄惁璁板綍杩�
+ if (feTempHumRecord.getAfternoonTemp() == null) {
+ // 娌℃湁灏辫嚜鍔ㄨ褰�
+ feTempHumRecord.setAfternoonTemp(temperature.toString());
+ // 淇敼璁板綍鏃堕棿
+ feTempHumRecord.setAfternoonTime(LocalTime.now());
+ }
+ // 婀垮害鏄惁璁板綍杩�
+ if (feTempHumRecord.getAfternoonHum() == null) {
+ // 娌℃湁灏辫嚜鍔ㄨ褰�
+ feTempHumRecord.setAfternoonHum(humidity.toString());
+ // 淇敼璁板綍鏃堕棿
+ feTempHumRecord.setAfternoonTime(LocalTime.now());
+ }
+ feTempHumRecordMapper.updateById(feTempHumRecord);
+
+ // 鍒ゆ柇娓╂箍搴︽槸鍚﹁秴杩�, 瓒呰繃鎻愰啋
+ if (feTempHumDate.getRegistrarUserId() != null) {
+ if (temperature < collectLaboratory.getTemperatureLowest() || temperature > collectLaboratory.getTemperatureHighest() ||
+ humidity< collectLaboratory.getHumidityLowest() || humidity > collectLaboratory.getHumidityHighest()) {
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ鎺ユ敹浜�
+ User personnel = userMapper.selectById(feTempHumDate.getRegistrarUserId());
+
+ String message = "";
+ message += "涓嬪崍瀹為獙瀹ゆ俯搴︽垨婀垮害瓒呰繃鎸囧畾鍖洪棿, 璇峰幓鏌ョ湅";
+ message += "\n璇峰幓璧勬簮绠$悊-璁炬柦鍜岀幆澧冩俯搴︿竴娓╂箍搴﹁褰�";
+ message += StrUtil.format("\n瀹為獙瀹ゅ尯鍩�: {}", feTempHumDate.getTestAreaName());
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(personnel.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+
+ if (feTempHumDate.getTestAreaName().equals("鎭掓俯浜�")) {
+ // 鍒ゆ柇涓婁笅鍗堟俯宸槸鍚﹁秴杩�1
+ if (temperature - Double.valueOf(feTempHumRecord.getMorningTemp()) > 1) {
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ鎺ユ敹浜�
+ User personnel = userMapper.selectById(feTempHumDate.getRegistrarUserId());
+
+ String message = "";
+ message += "鎭掓俯浜屽疄楠屽涓婁笅娓╁樊瓒呰繃 1鈩�, 璇峰幓鏌ョ湅";
+ message += "\n璇峰幓璧勬簮绠$悊-璁炬柦鍜岀幆澧冩俯搴︿竴娓╂箍搴﹁褰�";
+ message += StrUtil.format("\n瀹為獙瀹ゅ尯鍩�: {}", feTempHumDate.getTestAreaName());
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(personnel.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 鏄熸湡澶╂墽琛屾坊鍔犵┖鐧芥暟鎹�
+ * 鑾峰彇娓╁害婀垮害
+ */
+// @Scheduled(cron = "0/5 * * * * *")
+ @Scheduled(cron = "0 0 9 * * 7") //
+ public void task3() {
+ checkLaboratoriesSchedule();
+
+ // 鑾峰彇鎵�鏈夌殑瀹為獙瀹�
+ List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null);
+ // 閬嶅巻鑾峰彇瀹為獙瀹ょ紪鍙� 鑾峰彇娓╂箍搴� 淇濆瓨鍦ㄥ搴旂殑
+ for (CollectLaboratory collectLaboratory : collectLaboratories) {
+ // 鏌ヨ璇曢獙鍖哄煙
+ FeTempHumDate feTempHumDate = feTempHumDateMapper.selectOne(Wrappers.<FeTempHumDate>lambdaQuery()
+ .eq(FeTempHumDate::getMonthDate, formattedDate)
+ .eq(FeTempHumDate::getTestAreaName, collectLaboratory.getLaboratory())
+ .orderByDesc(FeTempHumDate::getCreateTime)
+ .last("limit 1"));
+ Integer dateId = feTempHumDate.getDateId();
+ // 鍒ゆ柇浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+ // 鑾峰彇浠婂ぉ鐨勬棩鏈�
+ LocalDate today = LocalDate.now();
+ // 鏌ヨ浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+ Long count = feTempHumRecordMapper.selectCount(Wrappers.<FeTempHumRecord>lambdaQuery()
+ // 鍝釜瀹為獙瀹�
+ .eq(FeTempHumRecord::getDateId, dateId)
+ // 璁板綍鏃堕棿鍦ㄤ粖澶╀箣鍐�
+ .eq(FeTempHumRecord::getRecordDate, today));
+ // 鏌ヨ鍑烘潵灏变唬琛ㄤ粖澶╄褰曡繃浜嗗氨涓嶈褰�
+ if (!count.equals(0L)) {
+ // 鏈夋俯搴︽箍搴﹁褰曞氨涓嶈褰�
+ continue;
+ }
+
+ // 鍒涘缓浠婂ぉ娓╂箍搴﹁褰曞璞� 璁板綍涓婂崍娓╁害婀垮害
+ FeTempHumRecord newFeTempHumRecord = new FeTempHumRecord();
+ newFeTempHumRecord.setRecordDate(LocalDate.now());
+ newFeTempHumRecord.setDateId(dateId);
+ feTempHumRecordMapper.insert(newFeTempHumRecord);
+ }
+ }
+
+ /**
+ * 鎵弿瀹為獙瀹ゆ俯搴﹁褰曞垽鏂槸鍚︽湁娌℃湁纭鐨勬俯搴︿俊鎭�
+ *
+ */
+// @Scheduled(cron = "0/5 * * * * *")
+ @Scheduled(cron = "0 0 16 * * 1-6") // 姣忓ぉ15鐐规墽琛屼竴娆� 闄や簡鏄熸湡澶�
+ public void affirmTempHum() {
+ // 鏌ヨ鏈夋棩鏈熶絾鏄湭濉啓鍚嶅瓧鐨�
+ List<FeTempHumRecordDto> feTempHumRecordList = feTempHumRecordMapper.selectNoaffirm(LocalDate.now());
+
+ for (FeTempHumRecordDto feTempHumRecord : feTempHumRecordList) {
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ鎺ユ敹浜�
+ User personnel = userMapper.selectById(feTempHumRecord.getRegistrarUserId());
+
+ String message = "";
+ message += "娓╂箍搴﹁褰曠‘璁ら�氱煡";
+ message += "\n璇峰幓璧勬簮绠$悊-璁炬柦鍜岀幆澧冩俯搴︿竴娓╂箍搴﹁褰�";
+ message += StrUtil.format("\n瀹為獙瀹ゅ尯鍩�: {}", feTempHumRecord.getTestAreaName());
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(personnel.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+
+ }
+
+ }
+
+
+ /**
+ * 鏍规嵁瀹為獙瀹ょ紪鍙疯幏鍙栨俯搴︽箍搴�
+ *
+ * @param collectTemperatureHumidity 娓╁害婀垮害鏁版嵁
+ * @param fieldName 瀛楁鍚�
+ * @return 瀛楁鍊�
+ */
+ public static Object getFieldValue(CollectTemperatureHumidity collectTemperatureHumidity, String fieldName) {
+ try {
+ Field field = collectTemperatureHumidity.getClass().getDeclaredField(fieldName);
+ field.setAccessible(true); // 璁剧疆鍙互璁块棶绉佹湁瀛楁
+ return field.get(collectTemperatureHumidity); // 鑾峰彇瀛楁鐨勫��
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java b/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java
new file mode 100644
index 0000000..11378dc
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.vo;
+
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AcceptanceDetailsVo extends FeStandardSubstanceAcceptance {
+
+ @Schema(description = "鐗╄川娓呭崟")
+ private FeStandardSubstance substance;
+
+ @Schema(description = "楠屾敹鍗�")
+ private FeStandardSubstanceAcceptance acceptance;
+
+ @Schema(description = "寮�绠辫褰�")
+ private List<FeStandardSubstanceAcceptanceInspection> list;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java b/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java
new file mode 100644
index 0000000..38133df
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java
@@ -0,0 +1,46 @@
+package com.ruoyi.require.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class AcceptanceVo {
+
+ @Schema(description = "妫�楠岃〃id")
+ private Integer id;
+
+ @Schema(description = "鏍囧噯鐗╄川鍚嶇О")
+ private String name;
+
+ @Schema(description = "瑙勬牸鍨嬪彿")
+ private String model;
+
+ @Schema(description = "鐢熶骇鍘傚")
+ private String factoryManufacturer;
+
+ @Schema(description = "鍑哄満缂栧彿")
+ private String factoryNum;
+
+ @Schema(description = "绠$悊缂栧彿")
+ private String manageNum;
+
+ @Schema(description = "涓嶇‘瀹氬害")
+ private String uncertainty;
+
+ @Schema(description = "鏁伴噺")
+ private Long quantity;
+
+ @Schema(description = "璐疆鏃ユ湡")
+ private LocalDateTime acquisitionDate;
+
+ @Schema(description = "鏈夋晥鏈�")
+ private LocalDateTime effectiveDate;
+
+ @Schema(description = "鏂囨。缂栧彿")
+ private String fileNum;
+
+ @Schema(description = "瀛樻斁浣嶇疆")
+ private String position;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java b/cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java
new file mode 100644
index 0000000..d98cad5
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java
@@ -0,0 +1,46 @@
+package com.ruoyi.require.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class SubstanceRecordVo {
+
+ @Schema(description = "id")
+ private Integer id;
+
+ @Schema(description = "鏍囧噯鐗╄川鍚嶇О")
+ private String name;
+
+ @Schema(description = "瑙勬牸鍨嬪彿")
+ private String model;
+
+ @Schema(description = "鍑哄満缂栧彿")
+ private String factoryNum;
+
+ @Schema(description = "鏁伴噺")
+ private Long quantity;
+
+ @Schema(description = "棰嗙敤浜�")
+ private String borrowUser;
+
+ @Schema(description = "鍊熷嚭鏃ユ湡")
+ private LocalDateTime borrowDate;
+
+ @Schema(description = "褰掕繕鏃ユ湡")
+ private LocalDateTime returnDate;
+
+ @Schema(description = "褰掕繕浜�")
+ private String returnedPerson;
+
+ @Schema(description = "瀹屽ソ鎬�")
+ private String returnIntegrity;
+
+ @Schema(description = "0锛氬�熺敤 1:褰掕繕")
+ private String status;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+}
diff --git a/cnas-require/src/main/resources/mapper/FeIlluminationMapper.xml b/cnas-require/src/main/resources/mapper/FeIlluminationMapper.xml
new file mode 100644
index 0000000..70e1768
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/FeIlluminationMapper.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.require.mapper.FeIlluminationMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.require.pojo.FeIllumination">
+ <id column="intensity_illumination_id" property="intensityIlluminationId" />
+ <result column="device_id" property="deviceId" />
+ <result column="conclusion" property="conclusion" />
+ <result column="tester_id" property="testerId" />
+ <result column="checker_id" property="checkerId" />
+ <result column="test_date" property="testDate" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+ <select id="getFeLightningProtection" resultType="com.ruoyi.require.dto.FeIlluminationDto">
+ SELECT cdi.*, u1.name checker_user, u2.name tester_user, dv.device_name, dv.management_number
+ FROM cnas_fe_illumination cdi
+ left join device dv on dv.id = cdi.device_id
+ left join user u1 on u1.id = cdi.checker_id
+ left join user u2 on u2.id = cdi.tester_id
+ </select>
+
+ <!-- 鏌ヨ鐓ф槑璁板綍 -->
+ <select id="selectFeIllumination" resultType="com.ruoyi.require.dto.FeIlluminationExportDto">
+ SELECT cdi.*,
+ dv.device_name,
+ dv.management_number,
+ DATE_FORMAT(d.calibration_date, '%Y-%m-%d') calibrationDateString,
+ DATE_FORMAT(d.next_calibration_date, '%Y-%m-%d') nextCalibrationDateString
+ FROM cnas_fe_illumination cdi
+ left join device dv on dv.id = cdi.device_id
+ LEFT JOIN (SELECT d.id,
+ dmr.calibration_date,
+ dmr.next_calibration_date
+ FROM device d
+ LEFT JOIN device_metric_record dmr ON dmr.device_id = d.id
+ AND dmr.type = 'calibrate'
+ GROUP BY d.id
+ HAVING max(dmr.id)) d ON d.id = cdi.device_id
+ left join user u1 on u1.id = cdi.checker_id
+ left join user u2 on u2.id = cdi.tester_id
+ where cdi.intensity_illumination_id = #{intensityIlluminationId}
+ </select>
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/FeLightningProtectionMapper.xml b/cnas-require/src/main/resources/mapper/FeLightningProtectionMapper.xml
new file mode 100644
index 0000000..4d3096d
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/FeLightningProtectionMapper.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.require.mapper.FeLightningProtectionMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.require.pojo.FeLightningProtection">
+ <id column="lightning_protection_id" property="lightningProtectionId" />
+ <result column="file_name" property="fileName" />
+ <result column="system_file_name" property="systemFileName" />
+ <result column="detection_date" property="detectionDate" />
+ <result column="term_validity" property="termValidity" />
+ <result column="detection_unit" property="detectionUnit" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+ <select id="exportOfLightningProtectionDetection" resultType="com.ruoyi.require.excel.FeLightningProtectionExcel">
+ select * from cnas_fe_lightning_protection
+ </select>
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/FePowerStableMapper.xml b/cnas-require/src/main/resources/mapper/FePowerStableMapper.xml
new file mode 100644
index 0000000..39937b6
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/FePowerStableMapper.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.require.mapper.FePowerStableMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.require.pojo.FePowerStable">
+ <id column="power_stable_id" property="powerStableId" />
+ <result column="test_location" property="testLocation" />
+ <result column="test_date" property="testDate" />
+ <result column="device_id" property="deviceId" />
+ <result column="conclusion" property="conclusion" />
+ <result column="tester_id" property="testerId" />
+ <result column="checker_id" property="checkerId" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+ <select id="getLaboratoryFacilityPowerStablePage" resultType="com.ruoyi.require.dto.FePowerStableDto">
+ SELECT cfps.*, u1.name checker_user, u2.name tester_user, dv.device_name, dv.management_number
+ FROM cnas_fe_power_stable cfps
+ left join device dv on dv.id = cfps.device_id
+ left join user u1 on u1.id = cfps.checker_id
+ left join user u2 on u2.id = cfps.tester_id
+ </select>
+
+ <select id="getCalibrationDate" resultType="java.util.Map">
+ SELECT
+ d.device_name deviceName,
+ d.management_number managementNumber,
+ date_format(dmr.calibration_date,'%Y-%m-%d') calibrationDate,
+ date_format(dmr.next_calibration_date,'%Y-%m-%d') nextCalibrationDate
+ FROM
+ device d
+ LEFT JOIN device_metric_record dmr ON dmr.device_id = d.id
+ AND dmr.type = 'calibrate'
+ where d.id = #{deviceId}
+ GROUP BY
+ d.id
+ </select>
+
+ <!-- 鏌ヨ鐢垫簮绋冲畾鎬� -->
+ <select id="selectPowerStable" resultType="com.ruoyi.require.dto.FePowerStableExportDto">
+ SELECT cfps.*,
+ dv.device_name,
+ dv.management_number,
+ DATE_FORMAT(cfps.test_date, '%Y-%m-%d') testDateString,
+ DATE_FORMAT(d.calibration_date, '%Y-%m-%d') calibrationDateString,
+ DATE_FORMAT(d.next_calibration_date, '%Y-%m-%d') nextCalibrationDateString
+ FROM cnas_fe_power_stable cfps
+ left join device dv on dv.id = cfps.device_id
+ LEFT JOIN (SELECT d.id,
+ dmr.calibration_date,
+ dmr.next_calibration_date
+ FROM device d
+ LEFT JOIN device_metric_record dmr ON dmr.device_id = d.id
+ AND dmr.type = 'calibrate'
+ GROUP BY d.id
+ HAVING max(dmr.id)) d ON d.id = cfps.device_id
+ left join user u1 on u1.id = cfps.checker_id
+ left join user u2 on u2.id = cfps.tester_id
+ where cfps.power_stable_id = #{powerStableId}
+ </select>
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/FeStandardSubstanceAcceptanceMapper.xml b/cnas-require/src/main/resources/mapper/FeStandardSubstanceAcceptanceMapper.xml
new file mode 100644
index 0000000..e336198
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/FeStandardSubstanceAcceptanceMapper.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.require.mapper.FeStandardSubstanceAcceptanceMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.require.pojo.FeStandardSubstanceAcceptance">
+ <id column="id" property="id" />
+ <result column="substance_id" property="substanceId" />
+ <result column="arrive_date" property="arriveDate" />
+ <result column="maintenance_unit" property="maintenanceUnit" />
+ <result column="perameters" property="perameters" />
+ <result column="installation" property="installation" />
+ <result column="situation" property="situation" />
+ <result column="signature" property="signature" />
+ <result column="producer" property="producer" />
+ <result column="recipient" property="recipient" />
+ <result column="file" property="file" />
+ <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="getPageAcceptance" resultType="com.ruoyi.require.vo.AcceptanceVo">
+ SELECT
+ sa.id,
+ ss.name,
+ ss.model,
+ ss.factory_manufacturer,
+ ss.factory_num,
+ ss.manage_num,
+ ss.uncertainty,
+ ss.quantity,
+ ss.acquisition_date,
+ ss.effective_date,
+ ss.file_num,
+ ss.position
+ FROM cnas_fe_standard_substance_acceptance sa
+ LEFT JOIN cnas_fe_standard_substance ss on ss.id = sa.substance_id
+ <where>
+ <if test="name != null and name != ''">
+ ss.name like CONCAT('%', #{name}, '%')
+ </if>
+ </where>
+ </select>
+
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/FeStandardSubstanceMapper.xml b/cnas-require/src/main/resources/mapper/FeStandardSubstanceMapper.xml
new file mode 100644
index 0000000..5a9d0bd
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/FeStandardSubstanceMapper.xml
@@ -0,0 +1,56 @@
+<?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.require.mapper.FeStandardSubstanceMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.require.pojo.FeStandardSubstance">
+ <id column="id" property="id" />
+ <result column="name" property="name" />
+ <result column="model" property="model" />
+ <result column="factory_manufacturer" property="factoryManufacturer" />
+ <result column="factory_num" property="factoryNum" />
+ <result column="manage_num" property="manageNum" />
+ <result column="uncertainty" property="uncertainty" />
+ <result column="quantity" property="quantity" />
+ <result column="acquisition_date" property="acquisitionDate" />
+ <result column="effective_date" property="effectiveDate" />
+ <result column="file_num" property="fileNum" />
+ <result column="position" property="position" />
+ <result column="state" property="state" />
+ <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="getPage" resultType="com.ruoyi.require.pojo.FeStandardSubstance">
+ select * from cnas_fe_standard_substance
+ <where>
+ <if test="ew.name != null and ew.name != ''">
+ name like CONCAT('%', #{ew.name}, '%')
+ </if>
+ <if test="ew.factoryManufacturer != null and ew.factoryManufacturer != ''">
+ and factory_manufacturer like CONCAT('%', #{ew.factoryManufacturer}, '%')
+ </if>
+ <if test="ew.factoryNum != null and ew.factoryNum != ''">
+ and factory_num like CONCAT('%', #{factoryNum}, '%')
+ </if>
+ <if test="ew.manageNum != null and ew.manageNum != ''">
+ and manage_num like CONCAT('%', #{ew.manageNum}, '%')
+ </if>
+ <if test="ew.model != null and ew.model != ''">
+ and model like CONCAT('%', #{ew.model}, '%')
+ </if>
+ <if test="ew.effectiveDate != null and ew.effectiveDate != ''">
+ and effective_date = #{ew.effectiveDate}
+ </if>
+ <if test="ew.fileNum != null and ew.fileNum != ''">
+ and file_num like CONCAT('%', #{ew.fileNum}, '%')
+ </if>
+ <if test="ew.position != null and ew.position != ''">
+ and position like CONCAT('%', #{ew.position}, '%')
+ </if>
+ </where>
+ </select>
+
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/FeStandardSubstanceRecordMapper.xml b/cnas-require/src/main/resources/mapper/FeStandardSubstanceRecordMapper.xml
new file mode 100644
index 0000000..315d743
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/FeStandardSubstanceRecordMapper.xml
@@ -0,0 +1,51 @@
+<?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.require.mapper.FeStandardSubstanceRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.require.pojo.FeStandardSubstanceRecord">
+ <id column="id" property="id" />
+ <result column="substance_id" property="substanceId" />
+ <result column="integrity" property="integrity" />
+ <result column="borrow_user" property="borrowUser" />
+ <result column="phone" property="phone" />
+ <result column="borrow_date" property="borrowDate" />
+ <result column="return_date" property="returnDate" />
+ <result column="lender" property="lender" />
+ <result column="rummager" property="rummager" />
+ <result column="status" property="status" />
+ <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="getPage" resultType="com.ruoyi.require.vo.SubstanceRecordVo">
+ SELECT
+ ssr.id,
+ ss.name,
+ ss.model,
+ ss.factory_num,
+ ss.quantity,
+ ssr.borrow_user,
+ ssr.borrow_date,
+ ssr.return_date,
+ ssr.integrity,
+ ssr.return_integrity,
+ ssr.returned_person,
+ ss.remark
+ FROM cnas_fe_standard_substance_record ssr
+ LEFT JOIN cnas_fe_standard_substance ss on ss.id = ssr.substance_id
+ <where>
+ <if test="ew.name != null and ew.name != ''">
+ ss.name like CONCAT('%', #{ew.name}, '%')
+ </if>
+ <if test="ew.model != null and ew.model != ''">
+ and ss.model like CONCAT('%', #{ew.model}, '%')
+ </if>
+ <if test="ew.factoryNum != null and ew.factoryNum != ''">
+ and ss.factory_num like CONCAT('%', #{ew.factoryNum}, '%')
+ </if>
+ </where>
+ </select>
+
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/FeTempHumDateMapper.xml b/cnas-require/src/main/resources/mapper/FeTempHumDateMapper.xml
new file mode 100644
index 0000000..299d25d
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/FeTempHumDateMapper.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.require.mapper.FeTempHumDateMapper">
+
+ <select id="getFeTempHumDate" resultType="com.ruoyi.require.dto.FeTempHumDateDto">
+ select * from (
+ select c.*,
+ u.name registrar_user_name,
+ concat('鈮�', cl.temperature_lowest, '&', '鈮�', cl.temperature_highest) temperature_section,
+ concat('鈮�', cl.humidity_lowest, '&', '鈮�', cl.humidity_highest) humidity_section
+ from cnas_fe_temp_hum_date c
+ left join user u on c.registrar_user_id = u.id
+ left join collect_laboratory cl on cl.laboratory = c.test_area_name) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ order by month_date desc
+ </select>
+ <select id="selectFeTempHumDateIncludeFormattedDate" resultType="java.lang.Integer">
+ select count(*)
+ from cnas_fe_temp_hum_date
+ where test_area_name = #{laboratory}
+ and month_date = #{formattedDate}
+ </select>
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/FeTempHumRecordMapper.xml b/cnas-require/src/main/resources/mapper/FeTempHumRecordMapper.xml
new file mode 100644
index 0000000..fb79da3
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/FeTempHumRecordMapper.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.require.mapper.FeTempHumRecordMapper">
+
+ <select id="getFeTempHumRecordPage" resultType="com.ruoyi.require.dto.FeTempHumRecordDto">
+ select c.*,
+ u1.name afternoon_recorder_user,
+ u2.name morning_recorder_user,
+ u1.signature_url afternoon_recorder_url,
+ u2.signature_url morning_recorder_url,
+ cl.temperature_lowest,
+ cl.temperature_highest,
+ cl.humidity_lowest,
+ cl.humidity_highest,
+ cd.test_area_name
+ from cnas_fe_temp_hum_record c
+ left join user u1 on u1.id = c.afternoon_recorder_id
+ left join user u2 on u2.id = c.morning_recorder_id
+ left join cnas_fe_temp_hum_date cd on cd.date_id = c.date_id
+ left join collect_laboratory cl on cl.laboratory = cd.test_area_name
+ where c.date_id = #{dateId}
+ ORDER BY c.record_date desc
+ </select>
+
+ <!-- 鏌ヨ鏈夋棩鏈熶絾鏄湭濉啓鍚嶅瓧鐨� -->
+ <select id="selectNoaffirm" resultType="com.ruoyi.require.dto.FeTempHumRecordDto">
+ select cr.*,
+ cd.registrar_user_id,
+ cd.test_area_name
+ from cnas_fe_temp_hum_record cr
+ left join cnas_fe_temp_hum_date cd on cd.date_id = cr.date_id
+ where cr.record_date = #{date}
+ and (morning_test_time is not null and morning_recorder_id is null)
+ and cd.registrar_user_id is not null
+ </select>
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/ForeignRegisterMapper.xml b/cnas-require/src/main/resources/mapper/ForeignRegisterMapper.xml
new file mode 100644
index 0000000..a619f2f
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/ForeignRegisterMapper.xml
@@ -0,0 +1,39 @@
+<?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.require.mapper.ForeignRegisterMapper">
+
+ <!-- 澶栨潵浜哄憳鐧昏鍒嗛〉鏌ヨ -->
+ <select id="pageForeignRegister" resultType="com.ruoyi.require.dto.ForeignRegisterDto">
+ select *
+ from (select *
+ from cnas_foreign_register
+ <where>
+ <if test="beginDate != null and beginDate != '' and endDate != null and endDate != ''">
+ register_date between #{beginDate} and #{endDate}
+ </if>
+ </where>
+ order by create_time desc) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="getForeignRegisterList" resultType="com.ruoyi.require.dto.ForeignRegisterDto">
+ select *
+ from (select cfr.*,
+ u1.signature_url accompanyingUrl,
+ u2.signature_url approveUrl
+ from cnas_foreign_register cfr
+ left join user u1 on u1.id = cfr.accompanying_id
+ left join user u2 on u2.id = cfr.approve_id
+ <where>
+ <if test="beginDate != null and beginDate != '' and endDate != null and endDate != ''">
+ cfr.register_date between #{beginDate} and #{endDate}
+ </if>
+ </where>
+ order by cfr.create_time desc) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/InternalWastesMapper.xml b/cnas-require/src/main/resources/mapper/InternalWastesMapper.xml
new file mode 100644
index 0000000..1ee1a73
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/InternalWastesMapper.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.require.mapper.InternalWastesMapper">
+
+ <!-- 瀹夊叏鍐呭姟涓夊簾鐧昏鍒楄〃 -->
+ <select id="pageInternalWastes" resultType="com.ruoyi.require.dto.InternalWastesDto">
+ select *
+ from (select ciw.*,
+ u1.name create_user_name,
+ u2.name update_user_name
+ from cnas_internal_wastes ciw
+ left join user u1 on u1.id = ciw.create_user
+ left join user u2 on u2.id = ciw.update_user
+ order by ciw.create_time desc) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/ProcurementSuppliesListMapper.xml b/cnas-require/src/main/resources/mapper/ProcurementSuppliesListMapper.xml
new file mode 100644
index 0000000..229983a
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/ProcurementSuppliesListMapper.xml
@@ -0,0 +1,71 @@
+<?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.require.mapper.ProcurementSuppliesListMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.require.pojo.ProcurementSuppliesList">
+ <id column="id" property="id" />
+ <result column="contents_id" property="contentsId" />
+ <result column="consumables_type" property="consumablesType" />
+ <result column="item_number" property="itemNumber" />
+ <result column="consumables_name" property="consumablesName" />
+ <result column="specifications" property="specifications" />
+ <result column="unit" property="unit" />
+ <result column="reference_price" property="referencePrice" />
+ <result column="content_id" property="contentId" />
+ <result column="person_in_charge" property="personInCharge" />
+ <result column="upper_limit" property="upperLimit" />
+ <result column="lower_limit" property="lowerLimit" />
+ <result column="supplier" property="supplier" />
+ <result column="consumables_icon" property="consumablesIcon" />
+ <result column="attachment" property="attachment" />
+ <result column="remark" property="remark" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="current_amount" property="currentAmount" />
+ </resultMap>
+
+ <select id="selectProcurementSuppliesList" resultMap="BaseResultMap">
+ select * from procurement_supplies_list
+ <where>
+ <if test="ew.contentId != null and ew.contentId != ''">
+ and content_id = ${ew.contentId}
+ </if>
+ </where>
+ </select>
+
+ <select id="selectProcurementSuppliesListForUpdate" resultMap="BaseResultMap">
+ select * from procurement_supplies_list where id = ${id} for update
+ </select>
+
+ <select id="selectProcurementSuppliesListAll" resultMap="BaseResultMap">
+ select
+ contents_id,item_number, consumables_type, consumables_name, specifications, supplier, upper_limit,
+ lower_limit, unit, remark, person_in_charge, update_user, update_time
+ from procurement_supplies_list
+ <where>
+ <if test="ew.contentId != null and ew.contentId != ''">
+ and content_id = ${ew.contentId}
+ </if>
+ </where>
+ </select>
+ <select id="selectProcurementSuppliesListByContentsId"
+ resultType="com.ruoyi.require.pojo.ProcurementSuppliesList">
+ select id,
+ item_number,
+ consumables_type,
+ consumables_name,
+ specifications,
+ lower_limit,
+ unit,
+ remark
+ from procurement_supplies_list
+ where contents_id = ${id}
+ or contents_id in
+ (SELECT id
+ FROM `procurement_supplies_contents`
+ WHERE id = ${id}
+ OR parent_id = ${id})
+ </select>
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml b/cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml
new file mode 100644
index 0000000..20f4dd9
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml
@@ -0,0 +1,84 @@
+<?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.require.mapper.ProcurementSuppliesStoreMapper">
+ <resultMap id="map" type="com.ruoyi.require.dto.StoreDto">
+ <id column="id" property="id"/>
+ <result column="consumables_id" property="consumablesId"/>
+ <result column="odd_numbers" property="oddNumbers"/>
+ <result column="consumables_name" property="consumablesName"/>
+ <result column="store_number" property="storeNumber"/>
+ <result column="total_price" property="totalPrice"/>
+ <result column="storage_user" property="storageUser"/>
+ <result column="storage_time" property="storageTime"/>
+ <result column="remark" property="remark"/>
+ <result column="registrant" property="registrant"/>
+ <result column="registrant_time" property="registrantTime"/>
+ <result column="storageUserName" property="storageUserName"/>
+ <result column="registrantName" property="registrantName"/>
+ </resultMap>
+
+ <resultMap id="storeExcelMap" type="com.ruoyi.require.excel.StoreExcel">
+ <result column="odd_numbers" property="oddNumbers"/>
+ <result column="consumables_name" property="consumablesName"/>
+ <result column="store_number" property="storeNumber"/>
+ <result column="total_price" property="totalPrice"/>
+ <result column="storage_time" property="storageTime"/>
+ <result column="remark" property="remark"/>
+ <result column="registrant_time" property="registrantTime"/>
+ <result column="storageUserName" property="storageUserName"/>
+ <result column="registrantName" property="registrantName"/>
+ </resultMap>
+
+
+ <select id="selectStoreList" resultMap="map">
+select * from (
+ SELECT
+ s.id,
+ c.id AS consumables_id,
+ s.contents_id,
+ s.odd_numbers,
+ c.consumables_name,
+ c.store_number,
+ c.total_price,
+ s.storage_user,
+ s.storage_time,
+ s.remark,
+ s.registrant,
+ s.registrant_time,
+ u.name AS storageUserName,
+ u1.name AS registrantName
+ FROM
+ `procurement_supplies_store` s
+ LEFT JOIN procurement_supplies_consumables c ON s.id = c.store_id
+ LEFT JOIN user u ON u.id = s.storage_user
+ LEFT JOIN user u1 ON u1.id = s.registrant
+ )a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+ <select id="exportExcel" resultMap="storeExcelMap">
+ SELECT * FROM (
+ SELECT
+ s.odd_numbers,
+ c.consumables_name,
+ c.store_number,
+ c.total_price,
+ s.storage_time,
+ s.remark,
+ s.registrant_time,
+ u.name AS storageUserName,
+ u1.name AS registrantName
+ FROM
+ `procurement_supplies_store` s
+ LEFT JOIN procurement_supplies_consumables c ON s.id = c.store_id
+ LEFT JOIN user u ON u.id = s.storage_user
+ LEFT JOIN user u1 ON u1.id = s.registrant
+
+ ) a
+ </select>
+
+
+
+</mapper>
\ No newline at end of file
diff --git a/cnas-require/src/main/resources/mapper/SupplierManagementMapper.xml b/cnas-require/src/main/resources/mapper/SupplierManagementMapper.xml
new file mode 100644
index 0000000..431dc29
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/SupplierManagementMapper.xml
@@ -0,0 +1,81 @@
+<?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.require.mapper.SupplierManagementMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.require.pojo.SupplierManagement">
+ <id column="supplier_management_id" property="supplierManagementId" />
+ <result column="supplier_name" property="supplierName" />
+ <result column="supplier_ref" property="supplierRef" />
+ <result column="supplier_item_service_name" property="supplierItemServiceName" />
+ <result column="postal_code" property="postalCode" />
+ <result column="adress" property="adress" />
+ <result column="logo" property="logo" />
+ <result column="contacts" property="contacts" />
+ <result column="phone" property="phone" />
+ <result column="household_name" property="householdName" />
+ <result column="fax" property="fax" />
+ <result column="opening_name" property="openingName" />
+ <result column="website" property="website" />
+ <result column="account_name" property="accountName" />
+ <result column="email" property="email" />
+ <result column="remarks" property="remarks" />
+ <result column="enclosure" property="enclosure" />
+ <result column="create_time" property="createTime" />
+ <result column="create_user" property="createUser" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="status" property="status" />
+ <result column="parent_id" property="parentId" />
+ </resultMap>
+ <select id="pageSupplierManagement" resultType="com.ruoyi.require.pojo.SupplierManagement">
+ select *
+ from (select *
+ from cnas_supplier_management
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+ <select id="selectQualifiedSupplierManagement" resultType="com.ruoyi.require.pojo.SupplierManagement">
+ select *
+ from (select *
+ from cnas_supplier_management
+ where status = 0
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="selectSupplierManagementAll" resultType="com.ruoyi.require.pojo.SupplierManagement">
+ SELECT
+ csm.supplier_name,
+ csm.supplier_ref,
+ csm.supplier_item_service_name,
+ csm.postal_code,
+ csm.adress,
+ csm.contacts,
+ csm.phone,
+ csm.household_name,
+ csm.fax,
+ csm.opening_name,
+ csm.website,
+ csm.account_name,
+ csm.email
+ FROM
+ cnas_supplier_management csm
+ where csm.parent_id in (select id from procurement_supplies_contents where id = #{parentId} or parent_id = #{parentId})
+ </select>
+ <select id="selectSupplierManagement" resultType="com.ruoyi.require.pojo.SupplierManagement">
+ select
+ *
+ from cnas_supplier_management csm
+ where
+ csm.parent_id = #{parentId} or
+ csm.parent_id in
+ (select id from procurement_supplies_contents where id = #{parentId} or parent_id = #{parentId})
+ </select>
+</mapper>
diff --git a/cnas-require/src/main/resources/static/foreign-register.docx b/cnas-require/src/main/resources/static/foreign-register.docx
new file mode 100644
index 0000000..ca6eed5
--- /dev/null
+++ b/cnas-require/src/main/resources/static/foreign-register.docx
Binary files differ
diff --git a/cnas-require/src/main/resources/static/illumination.docx b/cnas-require/src/main/resources/static/illumination.docx
new file mode 100644
index 0000000..58311e0
--- /dev/null
+++ b/cnas-require/src/main/resources/static/illumination.docx
Binary files differ
diff --git a/cnas-require/src/main/resources/static/internal-wastes.docx b/cnas-require/src/main/resources/static/internal-wastes.docx
new file mode 100644
index 0000000..7f03f75
--- /dev/null
+++ b/cnas-require/src/main/resources/static/internal-wastes.docx
Binary files differ
diff --git a/cnas-require/src/main/resources/static/power-stable.docx b/cnas-require/src/main/resources/static/power-stable.docx
new file mode 100644
index 0000000..69fe3b1
--- /dev/null
+++ b/cnas-require/src/main/resources/static/power-stable.docx
Binary files differ
diff --git a/cnas-require/src/main/resources/static/temp_hum_date.docx b/cnas-require/src/main/resources/static/temp_hum_date.docx
new file mode 100644
index 0000000..422869a
--- /dev/null
+++ b/cnas-require/src/main/resources/static/temp_hum_date.docx
Binary files differ
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
index 6602bee..a30de23 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
@@ -1,7 +1,9 @@
package com.ruoyi.system.mapper;
import java.util.List;
+import org.apache.ibatis.annotations.Param;
import com.ruoyi.system.domain.SysRoleMenu;
+import com.ruoyi.system.domain.vo.SysRoleVo;
/**
* 瑙掕壊涓庤彍鍗曞叧鑱旇〃 鏁版嵁灞�
@@ -41,4 +43,13 @@
* @return 缁撴灉
*/
public int batchRoleMenu(List<SysRoleMenu> roleMenuList);
+
+ /**
+ * 鏍规嵁鏉冮檺鏍囪瘑鍜岀敤鎴穒d鏌ヨ鏉冮檺
+ *
+ * @param permsName 鏉冮檺鏍囪瘑
+ * @param userId 鐢ㄦ埛ID
+ * @return 缁撴灉
+ */
+ public SysRoleVo selectRoleMenu(@Param("permsName") String permsName, @Param("userId") Long userId);
}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
index cb60a85..58b0645 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
@@ -13,6 +13,19 @@
select count(1) from sys_role_menu where menu_id = #{menuId}
</select>
+ <!-- 鏍规嵁鏉冮檺鏍囪瘑鍜岀敤鎴穒d鏌ヨ鏉冮檺 -->
+ <select id="selectRoleMenu" resultType="com.ruoyi.system.domain.vo.SysRoleVo">
+ select sm.perms,
+ sm.menu_name,
+ srm.is_rersonal
+ from sys_role_menu srm
+ left join sys_menu sm on sm.menu_id = srm.menu_id
+ left join sys_user_role sur on srm.role_id = sur.role_id
+ where sm.perms = #{permsName}
+ and sur.user_id = #{userId}
+ group by sm.menu_id
+ </select>
+
<delete id="deleteRoleMenuByRoleId" parameterType="Long">
delete from sys_role_menu where role_id=#{roleId}
</delete>
--
Gitblit v1.9.3