gaoluyang
2025-02-24 07524804b9d927556c18ce68d32eacf04c0e9445
Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-after into dev_cr
已删除1个文件
已修改4个文件
已添加292个文件
18042 ■■■■■ 文件已修改
cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/pom.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonCommunicationAbilityController.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDetailsDto.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoWorkDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonCommunicationAbilityDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityDto.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityExportDto.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordListDto.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordSubmitDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordPersonDetailedDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedListener.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonCommunicationAbilityMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedFileMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonCommunicationAbility.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailedFile.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonCommunicationAbilityService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingDetailedService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingRecordService.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonCommunicationAbilityServiceImpl.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPersonnelCapacityServiceImpl.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingDetailedServiceImpl.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingServiceImpl.java 429 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/communication-deal.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/credentials-deal.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/explain-deal.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/person-basic-info.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/person-training-record.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/person-training.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/personnel-capacity.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/super-vise-plan.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/supervision-control-sheet.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/supervision-record.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/resources/static/training-record.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/InconsistentDistributionController.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessComplainController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessDealController.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessEvaluateController.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodVerifyController.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessReportController.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessSampleController.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotalSampleController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotaldealController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseController.java 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/ImageDemoData.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderExportDto.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessComplainDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewArchivedDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewBackupsDto.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyCalibrationsFileDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyDto.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyExportWordDto.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessReportDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsEvaluateDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsAccordingDto.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsCorrectDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/SampleItemDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/excel/QualityMonitorDetailsUpload.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/excel/QualitySuperviseDetailsUpload.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionDetailMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/InconsistentDistributionMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderDetailMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderMapper.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessComplainMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessDealMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessEvaluateMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewArchivedMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewBackupsMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyCalibrationsFileMapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMachineAttachmentMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyMethodFileMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodVerifyWorkFileMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessReportMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessSampleMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotalSampleMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotaldealMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateFileMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsEvaluateMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsRatifyMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsAccordingMapper.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectFileMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsCorrectMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseDetailsRecordMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseMapper.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistribution.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrder.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrderDetail.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessComplain.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessDeal.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessEvaluate.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewArchived.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewBackups.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerify.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyCalibrationsFile.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMachineAttachment.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMethodFile.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyWorkFile.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessReport.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSample.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotalSample.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitor.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetails.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluate.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluateFile.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsRatify.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySupervise.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetails.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsAccording.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrect.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrectFile.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsRecord.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/schedule/ProcessTotaldealSchedule.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionDetailService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionService.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderDetailService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderService.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessComplainService.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessDealService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessEvaluateService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewArchivedService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewBackupsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyCalibrationsFileService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMachineAttachmentService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyMethodFileService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyService.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyWorkFileService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessReportService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessSampleService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotalSampleService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotaldealService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsEvaluateService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsRatifyService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorDetailsService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseDetailsService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseService.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyCalibrationsFileServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/CnasProcessMethodVerifyWorkFileServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionDetailServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderDetailServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java 310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessComplainServiceImpl.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessDealServiceImpl.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessEvaluateServiceImpl.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewArchivedServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewBackupsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java 370 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMachineAttachmentServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyMethodFileServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyServiceImpl.java 454 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java 423 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessSampleServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotalSampleServiceImpl.java 437 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java 416 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsEvaluateServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsRatifyServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorDetailsServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java 812 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseDetailsServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java 1118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/test.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/InconsistentDistributionDetailMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/InconsistentDistributionMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/InspectionOrderDetailMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/InspectionOrderMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessComplainMapper.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessDealMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessEvaluateMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewArchivedMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewBackupsMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodVerifyCalibrationsFileMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodVerifyMachineAttachmentMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodVerifyMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodVerifyMethodFileMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodVerifyWorkFileMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessReportMapper.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessSampleMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessTotalSampleMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateFileMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualityMonitorDetailsEvaluateMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualityMonitorDetailsRatifyMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualityMonitorMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsAccordingMapper.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectFileMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsCorrectMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsRecordMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualitySuperviseMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/excel/check-records.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/inconsistent-distribution.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/inspection-order.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/method-verify.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/quality-monitor-details-ratify.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/quality-monitor-evaluate.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/quality-monitor.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/quality-supervise.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/report-deal.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/sample-deal.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/sample-receive.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/supervise-detail-correct.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/supervision-detail-according.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/supervision-detail-record.docx 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-manage/src/main/java/com/ruoyi/manage/controller/ClientSatisfactionController.java
@@ -71,7 +71,7 @@
     */
    @ApiOperation(value = "客户满意度调查新增")
    @GetMapping("/delClientSatisfaction")
    @DeleteMapping("/delClientSatisfaction")
    public Result updateClientSatisfaction(Integer clientSatisfactionId){
        return Result.success(clientSatisfactionService.removeById(clientSatisfactionId));
    }
@@ -132,7 +132,7 @@
     */
    @ApiOperation(value = "删除户分析附件")
    @GetMapping("/delAnalyseFile")
    @DeleteMapping("/delAnalyseFile")
    public Result delAnalyseFile(Integer analyseFileId){
        return Result.success(clientSatisfactionAnalyseFileMapper.deleteById(analyseFileId));
    }
cnas-personnel/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.ruoyi</groupId>
        <artifactId>ruoyi</artifactId>
        <version>3.8.9</version>
    </parent>
    <artifactId>cnas-personnel</artifactId>
    <dependencies>
        <!-- é€šç”¨å·¥å…·-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
        <!-- æ ¸å¿ƒæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-framework</artifactId>
        </dependency>
        <!-- ç³»ç»Ÿæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-system</artifactId>
        </dependency>
        <!-- ç³»ç»Ÿæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>inspect-server</artifactId>
        </dependency>
    </dependencies>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,229 @@
package com.ruoyi.personnel.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.DepartmentDto;
import com.ruoyi.common.utils.FileSaveUtil;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.personnel.dto.PersonBasicInfoDetailsDto;
import com.ruoyi.personnel.dto.PersonBasicInfoDto;
import com.ruoyi.personnel.dto.UserPageDto;
import com.ruoyi.personnel.pojo.Annex;
import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
import com.ruoyi.personnel.service.AnnexService;
import com.ruoyi.personnel.service.PersonBasicInfoFileService;
import com.ruoyi.personnel.service.PersonBasicInfoService;
import com.ruoyi.personnel.service.PersonBasicInfoWorkService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-08-30 09:19:57
 */
@Api(tags = "人员-人员基本信息")
@RestController
@RequestMapping("/personBasicInfo")
public class PersonBasicInfoController {
    @Resource
    private PersonBasicInfoService personBasicInfoService;
    @Resource
    private PersonBasicInfoFileService personBasicInfoFileService;
    @Resource
    private PersonBasicInfoWorkService personBasicInfoWorkService;
    @Resource
    private AnnexService annexService;
    @ApiOperation(value = "查询CNAS人员侧边栏")
    @GetMapping("/selectCNSAPersonTree")
    public Result<List<DepartmentDto>> selectCNSAPersonTree() {
        return Result.success(personBasicInfoService.selectCNSAPersonTree());
    }
    @ApiOperation(value = "获取CNAS人员基本信息")
    @GetMapping("/getCNASPersonnelInfo")
    public Result getCNASPersonnelInfo(Integer userId) {
        return Result.success(personBasicInfoService.getCNASPersonnelInfo(userId));
    }
    @ApiOperation(value = "保存CNAS人员基本信息")
    @PostMapping("/saveCNASPersonnelInfo")
    public Result saveCNASPersonnelInfo(@RequestBody PersonBasicInfoDto personBasicInfoDto) {
        personBasicInfoService.saveCNASPersonnelInfo(personBasicInfoDto);
        return Result.success();
    }
    @ApiOperation(value = "人员明细分页查询")
    @GetMapping("basicInformationOfPersonnelSelectPage")
    public Result<IPage<Map<String, Object>>> basicInformationOfPersonnelSelectPage(Page<List<PersonBasicInfoDetailsDto>> page, String name, Integer departmentId) {
        return Result.success(personBasicInfoService.basicInformationOfPersonnelSelectPage(page, name, departmentId));
    }
    // ä¸Šä¼ æ–‡ä»¶æŽ¥å£
    @ApiOperation(value = "上传文件接口")
    @PostMapping("/saveCNASFile")
    public Result saveFile(@RequestPart("file") MultipartFile file) {
        String s = FileSaveUtil.uploadWordFile(file);
        return Result.success("上传成功", s);
    }
    @GetMapping("/getAnnexByUserId")
    public Result<List<Annex>> getAnnexByUserId(Integer userId) {
        List<Annex> list = annexService.list(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId, userId));
        return Result.success(list);
    }
    // åˆ é™¤æ–‡ä»¶
    @DeleteMapping("/deleteCNASFile")
    public Result saveFile(String fileName) {
        String[] split = fileName.split(",");
        for (String s : split) {
            FileSaveUtil.DeleteFile(s);
        }
        return Result.success();
    }
    /**
     * äººå‘˜åŸºæœ¬ä¿¡æ¯é™„件新增
     */
    @PostMapping("/addAnnex")
    public Result addAnnex(@RequestBody Annex annex) {
        annexService.save(annex);
        return Result.success();
    }
    @GetMapping("/getAnnex")
    public Result<Annex> getAnnex(Integer id) {
        return Result.success(annexService.getById(id));
    }
    /**
     * äººå‘˜åŸºæœ¬ä¿¡æ¯é™„件删除
     */
    @DeleteMapping("/deleteAnnex")
    public Result deleteAnnex(Integer id) {
        annexService.removeById(id);
        return Result.success();
    }
    /**
     * äººå‘˜åŸºæœ¬ä¿¡æ¯é™„件修改
     *
     */
    @PostMapping("/updateAnnex")
    public Result updateAnnex(@RequestBody Annex annex) {
        annexService.updateById(annex);
        return Result.success();
    }
    @ApiOperation(value = "导出人员基本信息")
    @GetMapping("/exportPersonBasicInfo")
    public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception {
        personBasicInfoService.exportPersonBasicInfo(userPageDto,response);
    }
    @ApiOperation(value = "下载人员档案卡")
    @GetMapping("/exportPersonBasicInfoById")
    public Result exportPersonBasicInfoById(Integer id, HttpServletResponse response) {
        return Result.success(personBasicInfoService.exportPersonBasicInfoById(id,response));
    }
    /**
     * äººå‘˜åŸ¹è®­åŸºæœ¬ä¿¡æ¯é™„件新增
     * @param userId
     * @param file
     * @return
     */
    @ApiOperation(value = "人员培训基本信息附件新增")
    @PostMapping("/uploadBasicInfoFile")
    public Result<?> uploadBasicInfoFile(Integer userId, MultipartFile file) {
        return Result.success(personBasicInfoService.uploadBasicInfoFile(userId, file));
    }
    /**
     * äººå‘˜åŸ¹è®­åŸºæœ¬ä¿¡æ¯é™„件列表
     * @return
     */
    @ApiOperation(value = "人员培训基本信息附件列表")
    @GetMapping("/getBasicInfoFileList")
    public Result<List<PersonBasicInfoFile>> getBasicInfoFileList(Integer userId){
        return Result.success(personBasicInfoFileService.list(Wrappers.<PersonBasicInfoFile>lambdaQuery()
                .eq(PersonBasicInfoFile::getUserId, userId)));
    }
    /**
     * äººå‘˜åŸ¹è®­åŸºæœ¬ä¿¡æ¯é™„件删除
     * @return
     */
    @ApiOperation(value = "人员培训基本信息附件删除")
    @GetMapping("/delBasicInfoFileList")
    public Result delBasicInfoFileList(Integer basicInfoFileId){
        return Result.success(personBasicInfoFileService.removeById(basicInfoFileId));
    }
    /**
     * äººå‘˜åŸ¹è®­åŸºæœ¬ä¿¡æ¯å·¥ä½œç»åŽ†æ–°å¢ž
     * @return
     */
    @ApiOperation(value = "人员培训基本信息工作经历新增")
    @PostMapping("/addBasicInfoWork")
    public Result<?> addBasicInfoWork(@RequestBody PersonBasicInfoWork basicInfoWork) {
        if (basicInfoWork.getUserId() == null) {
            throw new ErrorException("缺少人员id");
        }
        basicInfoWork.setUserId(basicInfoWork.getUserId());
        return Result.success(personBasicInfoWorkService.save(basicInfoWork));
    }
    /**
     * äººå‘˜å·¥ä½œç»åŽ†åˆ—è¡¨
     * @return
     */
    @ApiOperation(value = "人员工作经历列表")
    @GetMapping("/getBasicInfoWorkList")
    public Result<List<PersonBasicInfoWork>> getBasicInfoWorkList(Integer userId){
        return Result.success(personBasicInfoWorkService.list(Wrappers.<PersonBasicInfoWork>lambdaQuery()
                .eq(PersonBasicInfoWork::getUserId, userId)));
    }
    /**
     * äººå‘˜å·¥ä½œç»åŽ†åˆ é™¤
     * @return
     */
    @ApiOperation(value = "人员工作经历删除")
    @GetMapping("/delBasicInfoWorkList")
    public Result delBasicInfoWorkList(Integer basicInfoWorkId){
        return Result.success(personBasicInfoWorkService.removeById(basicInfoWorkId));
    }
    /**
     * äººå‘˜åŸºæœ¬ä¿¡æ¯é™„件删除
     * @return
     */
    @ApiOperation(value = "人员工作经历修改")
    @PostMapping("/updateBasicInfoWorkList")
    public Result updateBasicInfoWorkList(@RequestBody PersonBasicInfoWork basicInfoWork){
        return Result.success(personBasicInfoWorkService.updateById(basicInfoWork));
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonCommunicationAbilityController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.personnel.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.personnel.dto.PersonCommunicationAbilityDto;
import com.ruoyi.personnel.pojo.PersonCommunicationAbility;
import com.ruoyi.personnel.service.PersonCommunicationAbilityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æ²Ÿé€šè®°å½• å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 12:00:57
 */
@Api(tags = "人员 - æ²Ÿé€šè®°å½•")
@RestController
@RequestMapping("/personCommunicationAbility")
public class PersonCommunicationAbilityController {
    @Autowired
    private PersonCommunicationAbilityService personCommunicationAbilityService;
    @ApiOperation(value = "新增/更新 æ²Ÿé€šè®°å½•")
    @PostMapping("addOrUpdatePersonCommunicationAbility")
    public Result<?> addOrUpdatePersonCommunicationAbility(@RequestBody PersonCommunicationAbility personCommunicationAbility) {
        personCommunicationAbilityService.saveOrUpdate(personCommunicationAbility);
        return Result.success();
    }
    @ApiOperation(value = "删除 æ²Ÿé€šè®°å½•")
    @DeleteMapping("deletePersonCommunicationAbility")
    public Result<?> deletePersonCommunicationAbility(@RequestParam("id") Integer id) {
        personCommunicationAbilityService.removeById(id);
        return Result.success();
    }
    @ApiOperation(value = "查询 æ²Ÿé€šè®°å½•")
    @GetMapping("personPersonCommunicationAbilityPage")
    public Result<IPage<PersonCommunicationAbilityDto>> personPersonCommunicationAbilityPage(Page page,
                                                                                             Integer departLimsId,
                                                                                             Integer userId,
                                                                                             String userName) {
        return Result.success(personCommunicationAbilityService.personPersonCommunicationAbilityPage(page, departLimsId, userId, userName));
    }
    @ApiOperation(value = "导出沟通记录")
    @PostMapping("exportPersonCommunicationAbility")
    public void exportPersonCommunicationAbility(Integer id, HttpServletResponse response) throws Exception{
        personCommunicationAbilityService.exportPersonCommunicationAbility(id,response);
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
package com.ruoyi.personnel.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
import com.ruoyi.personnel.service.PersonJobResponsibilitiesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * å²—位职责 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 02:07:49
 */
@Api(tags = "人员 - å²—位职责")
@RestController
@RequestMapping("/personJobResponsibilities")
public class PersonJobResponsibilitiesController {
    @Autowired
    private PersonJobResponsibilitiesService personJobResponsibilitiesService;
    @ApiOperation(value = "新增/更新 å²—位职责")
    @PostMapping("/personJobResponsibilitiesSave")
    public Result<?> personJobResponsibilitiesSave(@RequestBody PersonJobResponsibilities personJobResponsibilities) {
        personJobResponsibilitiesService.saveOrUpdate(personJobResponsibilities);
        return Result.success();
    }
    @ApiOperation(value = "删除 å²—位职责")
    @DeleteMapping("/personJobResponsibilitiesDelete")
    public Result<?> personJobResponsibilitiesDelete(@RequestParam("id") Integer id) {
        personJobResponsibilitiesService.removeById(id);
        return Result.success();
    }
    @ApiOperation(value = "查询 å²—位职责")
    @GetMapping("/personJobResponsibilitiesSelect")
    public Result<IPage<PersonJobResponsibilitiesDto>> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
        IPage<PersonJobResponsibilitiesDto> iPage = personJobResponsibilitiesService.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
        return Result.success(iPage);
    }
    @ApiOperation(value = "导出任职岗位说明说")
    @PostMapping("/exportPersonJobResponsibilities")
    public void exportPersonJobResponsibilities(Integer id, HttpServletResponse response){
        personJobResponsibilitiesService.exportPersonJobResponsibilities(id,response);
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.ruoyi.personnel.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.personnel.dto.PersonPersonnelCapacityDto;
import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
import com.ruoyi.personnel.service.PersonPersonnelCapacityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
/**
 * <p>
 * äººå‘˜èƒ½åŠ› å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-10 11:26:18
 */
@Api(tags = "人员 - äººå‘˜èƒ½åŠ›")
@RestController
@RequestMapping("/personPersonnelCapacity")
public class PersonPersonnelCapacityController {
    @Autowired
    private PersonPersonnelCapacityService personPersonnelCapacityService;
    @ApiOperation(value = "新增/更新 äººå‘˜èƒ½åŠ›")
    @PostMapping("addOrUpdatePersonPersonnelCapacity")
    public Result<?> addOrUpdatePersonPersonnelCapacity(@RequestBody PersonPersonnelCapacity personPersonnelCapacity) {
        personPersonnelCapacityService.saveOrUpdate(personPersonnelCapacity);
        return Result.success();
    }
    @ApiOperation(value = "删除 äººå‘˜èƒ½åŠ›")
    @DeleteMapping("deletePersonPersonnelCapacity")
    public Result<?> deletePersonPersonnelCapacity(@RequestParam("id") Integer id) {
        // åˆ é™¤æ•°æ®
        personPersonnelCapacityService.removeById(id);
        return Result.success();
    }
    @ApiOperation(value = "查询 äººå‘˜èƒ½åŠ›")
    @GetMapping("personPersonnelCapacityPage")
    public Result<IPage<PersonPersonnelCapacityDto>> personPersonnelCapacityPage(Page page,
                                                                                 Integer departmentId,
                                                                                 Integer userId,
                                                                                 String userName) {
        return Result.success(personPersonnelCapacityService.personPersonnelCapacityPage(page, departmentId, userId, userName));
    }
    @ApiOperation(value = "确认 äººå‘˜èƒ½åŠ›")
    @GetMapping("confirmPersonnelCapability")
    public Result<?> confirmPersonnelCapability(@RequestParam("id") Integer id) {
        Integer userId = SecurityUtils.getUserId().intValue();
        personPersonnelCapacityService.update(Wrappers.<PersonPersonnelCapacity>lambdaUpdate()
                .eq(PersonPersonnelCapacity::getId, id)
                .set(PersonPersonnelCapacity::getConfirmOperatingPersonnelId, userId)
                .set(PersonPersonnelCapacity::getConfirmDate, LocalDateTime.now()));
        return Result.success();
    }
    /**
     * å¯¼å‡ºäººå‘˜èƒ½åŠ›
     * @return
     */
    @ApiOperation(value = "导出人员能力")
    @GetMapping("/exportPersonnelCapacity")
    public void exportPersonnelCapacity(Integer id, HttpServletResponse response){
        personPersonnelCapacityService.exportPersonnelCapacity(id, response);
    }
    /**
     * æäº¤ç¡®è®¤äººå‘˜èƒ½åŠ›
     * @param personPersonnelCapacity
     * @return
     */
    @ApiOperation(value = "提交")
    @PostMapping("submitConfirmPersonnelCapability")
    public Result<?> submitConfirmPersonnelCapability(@RequestBody PersonPersonnelCapacity personPersonnelCapacity) {
        personPersonnelCapacityService.submitConfirmPersonnelCapability(personPersonnelCapacity);
        return Result.success();
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.personnel.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.FileSaveUtil;
import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
import com.ruoyi.personnel.service.PersonPostAuthorizationRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * ä»»èŒæŽˆæƒè®°å½• å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 10:48:17
 */
@Api(tags = "人员 - ä»»èŒæŽˆæƒè®°å½•")
@RestController
@RequestMapping("/personPostAuthorizationRecord")
public class PersonPostAuthorizationRecordController {
    @Autowired
    private PersonPostAuthorizationRecordService personPostAuthorizationRecordService;
    @ApiOperation(value = "新增/更新 ä»»èŒæŽˆæƒè®°å½•")
    @PostMapping("/addOrUpdatePersonPostAuthorizationRecord")
    public Result<?> addOrUpdatePersonPostAuthorizationRecord(@RequestBody PersonPostAuthorizationRecord personRewardPunishmentRecord) {
        personPostAuthorizationRecordService.saveOrUpdate(personRewardPunishmentRecord);
        return Result.success();
    }
    @ApiOperation(value = "删除 ä»»èŒæŽˆæƒè®°å½•")
    @DeleteMapping("/deletePersonPostAuthorizationRecord")
    public Result<?> deletePersonPostAuthorizationRecord(@RequestParam("id") Integer id) {
        // åˆ é™¤æ–‡ä»¶
        PersonPostAuthorizationRecord postAuthorizationRecord = personPostAuthorizationRecordService.getById(id);
        FileSaveUtil.DeleteFile(postAuthorizationRecord.getSystemFileName());
        // åˆ é™¤æ•°æ®
        personPostAuthorizationRecordService.removeById(id);
        return Result.success();
    }
    @ApiOperation(value = "查询 ä»»èŒæŽˆæƒè®°å½•")
    @GetMapping("/PersonPostAuthorizationRecordPage")
    public Result<IPage<PersonPostAuthorizationRecordDto>> PersonPostAuthorizationRecordPage(Page page,
                                                                                             Integer departLimsId,
                                                                                             Integer userId,
                                                                                             String userName) {
        return Result.success(personPostAuthorizationRecordService.personPostAuthorizationRecordPage(page, departLimsId, userId, userName));
    }
    @ApiOperation(value = "导出岗位职业资格证书")
    @PostMapping("/exportPersonPostAuthorizationRecord")
    public void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response){
        personPostAuthorizationRecordService.exportPersonPostAuthorizationRecord(id,response);
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
package com.ruoyi.personnel.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto;
import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
import com.ruoyi.personnel.service.PersonRewardPunishmentRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
 * <p>
 * å¥–惩记录 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-08 11:25:02
 */
@Api(tags = "人员 - å¥–惩记录")
@RestController
@RequestMapping("/personRewardPunishmentRecord")
public class PersonRewardPunishmentRecordController {
    @Autowired
    private PersonRewardPunishmentRecordService personRewardPunishmentRecordService;
    @ApiOperation(value = "新增/更新 å¥–惩记录")
    @PostMapping("/addOrUpdateRewardPunishment")
    public Result<?> PersonTrainingSave(@RequestBody PersonRewardPunishmentRecord personRewardPunishmentRecord) {
        personRewardPunishmentRecordService.saveOrUpdate(personRewardPunishmentRecord);
        return Result.success();
    }
    @ApiOperation(value = "删除奖惩记录")
    @DeleteMapping("/deleteRewardPunishment")
    public Result<?> deleteRewardPunishment(@RequestParam("id") Integer id) {
        personRewardPunishmentRecordService.removeById(id);
        return Result.success();
    }
    @ApiOperation(value = "查询 å¥–惩记录")
    @GetMapping("/rewardPunishmentPage")
    @SneakyThrows
    public Result<IPage<PersonRewardPunishmentRecordDto>> rewardPunishmentPage(Page page,
                                                                               Integer userId,
                                                                               Integer departmentId,
                                                                               String userName,
                                                                               @RequestParam(value = "startTime",required = false) String startTimeStr,
                                                                               @RequestParam(value = "endTime",required = false) String endTimeStr) {
        Date startTime = null;
        Date endTime = null;
        if (StringUtils.isNotEmpty(startTimeStr) || StringUtils.isNotEmpty(endTimeStr)) {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            startTime = formatter.parse(startTimeStr);
            endTime = formatter.parse(endTimeStr);
        }
        return Result.success(personRewardPunishmentRecordService.rewardPunishmentPage(page, userId, userName, startTime, endTime, departmentId));
    }
    @ApiOperation(value = "奖惩记录导出")
    @GetMapping("/rewardPunishmentExport")
    public void rewardPunishmentExport(Integer userId,
                                       Integer departmentId,
                                       String userName,
                                       @RequestParam(value = "startTime",required = false) String startTimeStr,
                                       @RequestParam(value = "endTime",required = false) String endTimeStr,
                                       HttpServletResponse response) throws Exception {
        Date startTime = null;
        Date endTime = null;
        if (StringUtils.isNotEmpty(startTimeStr) || StringUtils.isNotEmpty(endTimeStr)) {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            startTime = formatter.parse(startTimeStr);
            endTime = formatter.parse(endTimeStr);
        }
        List<PersonRewardPunishmentRecordExcel> data = personRewardPunishmentRecordService.rewardPunishmentExport(userId, departmentId, userName, startTime, endTime);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(PersonRewardPunishmentRecordExcel.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet()
                .doWrite(data);
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,246 @@
package com.ruoyi.personnel.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.personnel.dto.PersonTrainingDetailedDto;
import com.ruoyi.personnel.dto.PersonTrainingDto;
import com.ruoyi.personnel.dto.PersonTrainingRecordDto;
import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto;
import com.ruoyi.personnel.mapper.PersonTrainingDetailedFileMapper;
import com.ruoyi.personnel.pojo.PersonTraining;
import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
import com.ruoyi.personnel.pojo.PersonTrainingDetailedFile;
import com.ruoyi.personnel.pojo.PersonTrainingRecord;
import com.ruoyi.personnel.service.PersonTrainingDetailedService;
import com.ruoyi.personnel.service.PersonTrainingRecordService;
import com.ruoyi.personnel.service.PersonTrainingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * <p>
 * åŸ¹è®­è®¡åˆ’ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-11 01:11:49
 */
@Api(tags = "人员 - åŸ¹è®­è®¡åˆ’")
@RestController
@RequestMapping("/personTraining")
public class PersonTrainingController {
    @Autowired
    private PersonTrainingService personTrainingService;
    @Autowired
    private PersonTrainingDetailedService personTrainingDetailedService;
    @Autowired
    private PersonTrainingRecordService personTrainingRecordService;
    @Autowired
    private PersonTrainingDetailedFileMapper personTrainingDetailedFileMapper;
    @Autowired
    private NumberGenerator<PersonTrainingDetailed> numberGenerator;
    @ApiOperation(value = "培训计划 å¯¼å…¥")
    @PostMapping("personTrainingImport")
    public Result<?> personTrainingImport(@RequestPart("file") MultipartFile file, PersonTraining training) {
        personTrainingService.personTrainingImport(file, training);
        return Result.success();
    }
    @ApiOperation(value = "培训计划 åˆ é™¤")
    @DeleteMapping("personTrainingDelete")
    public Result<?> personTrainingDelete(@RequestParam("id") Integer id) {
        personTrainingService.personTrainingDelete(id);
        return Result.success();
    }
    @ApiOperation(value = "培训计划 æŸ¥è¯¢")
    @GetMapping("personTrainingSelect")
    public Result<IPage<PersonTrainingDto>> personTrainingSelect(Page page, String compilerName, String departmentId) {
        IPage<PersonTrainingDto> iPage = personTrainingService.personTrainingSelect(page, compilerName, departmentId);
        return Result.success(iPage);
    }
    @ApiOperation(value = "年度培训计划 å®¡æ ¸")
    @PostMapping("reviewAnnualPersonnelTraining")
    public Result<?> reviewAnnualPersonnelTraining(@RequestBody PersonTraining training) {
        personTrainingService.reviewAnnualPersonnelTraining(training);
        return Result.success();
    }
    @ApiOperation(value = "培训计划 æ‰¹å‡†")
    @PostMapping("approveAnnualPersonnelTraining")
    public Result<?> approveAnnualPersonnelTraining(@RequestBody PersonTraining training) {
        personTrainingService.approveAnnualPersonnelTraining(training);
        return Result.success();
    }
    @ApiOperation(value = "年度计划明细表 æ–°å¢ž/编辑")
    @PostMapping("addOrUpdatePersonTrainingDetailed")
    public Result<?> addOrUpdatePersonTrainingDetailed(@RequestBody PersonTrainingDetailed personTrainingDetailed) {
        if (ObjectUtils.isEmpty(personTrainingDetailed.getId())) {
            personTrainingDetailed.setState(3);
        }
        personTrainingDetailedService.saveOrUpdate(personTrainingDetailed);
        return Result.success();
    }
    @ApiOperation(value = "年度计划明细表 æ‰¹é‡åˆ é™¤")
    @DeleteMapping("deleteAnnualPlanDetailTable")
    public Result<?> deleteAnnualPlanDetailTable(String ids) {
        personTrainingDetailedService.deleteAnnualPlanDetailTable(ids);
        return Result.success();
    }
    @ApiOperation(value = "年度计划明细表 æŸ¥è¯¢")
    @GetMapping("queryTheAnnualPlanDetailsTable")
    public Result<IPage<PersonTrainingDetailedDto>> queryTheAnnualPlanDetailsTable(Page page,
                                                                                   String trainingLecturerName, String courseCode,
                                                                                   String trainingDate, Integer id, Integer userId) {
        IPage<PersonTrainingDetailedDto> iPage = personTrainingDetailedService.queryTheAnnualPlanDetailsTable(page,
                trainingLecturerName, courseCode, trainingDate, id, userId);
        return Result.success(iPage);
    }
    @ApiOperation(value = "培训与考核记录 æŸ¥è¯¢")
    @GetMapping("trainingAndAssessmentRecordsPage")
    public Result<List<PersonTrainingRecordDto>> trainingAndAssessmentRecordsPage(Integer trainingDetailedId,
                                                                                   String userName) {
        List<PersonTrainingRecordDto> list = personTrainingRecordService.trainingAndAssessmentRecordsPage(trainingDetailedId, userName);
        return Result.success(list);
    }
    @ApiOperation(value = "培训与考核记录 æ–°å¢žäººå‘˜")
    @PostMapping("newPersonnelAddedToTrainingRecords")
    public Result<?> newPersonnelAddedToTrainingRecords(@RequestBody List<PersonTrainingRecord> personTrainingRecord) {
        personTrainingRecordService.saveBatch(personTrainingRecord);
        return Result.success();
    }
    @ApiOperation(value = "培训与考核记录 è®¤é¢†")
    @PostMapping("claimOfTrainingAndAssessmentRecords")
    public Result<?> claimOfTrainingAndAssessmentRecords(@RequestParam("claimAndClaim") Boolean claimAndClaim,
                                                         @RequestParam("courseId") Integer courseId) {
        personTrainingRecordService.claimOfTrainingAndAssessmentRecords(claimAndClaim, courseId);
        return Result.success();
    }
    @ApiOperation(value = "培训与考核记录 æäº¤/撤销")
    @PostMapping("trainingAndAssessmentRecordsAdded")
    public Result<?> trainingAndAssessmentRecordsAdded(@RequestBody PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) {
        personTrainingRecordService.trainingAndAssessmentRecordsAdded(personTrainingRecordSubmitDto);
        return Result.success();
    }
    @ApiOperation(value = "培训与考核记录 è¯„ä»·")
    @PostMapping("trainingAndAssessmentRecordsEvaluate")
    public Result<?> trainingAndAssessmentRecordsEvaluate(@RequestBody PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) {
        personTrainingDetailedService.update(Wrappers.<PersonTrainingDetailed>lambdaUpdate()
                .eq(PersonTrainingDetailed::getId, personTrainingRecordSubmitDto.getTrainingDetailedId())
                .set(PersonTrainingDetailed::getComprehensiveAssessment, personTrainingRecordSubmitDto.getComprehensiveAssessment())
                .set(PersonTrainingDetailed::getAssessmentDate, personTrainingRecordSubmitDto.getAssessmentDate())
                .set(PersonTrainingDetailed::getState, personTrainingRecordSubmitDto.getState()));
        return Result.success();
    }
    @ApiOperation(value = "培训与考核记录 åˆ é™¤")
    @DeleteMapping("deleteTrainingAndAssessmentRecords")
    public Result<?> deleteTrainingAndAssessmentRecords(String ids) {
        personTrainingRecordService.deleteTrainingAndAssessmentRecords(ids);
        return Result.success();
    }
    @PostMapping("outOfFocusPreservation")
    public Result<?> outOfFocusPreservation(@RequestBody PersonTrainingRecord personTrainingRecord) {
        personTrainingRecordService.updateById(personTrainingRecord);
        return Result.success();
    }
    /**
     * å¯¼å‡ºäººå‘˜åŸ¹è®­è®¡åˆ’
     * @return
     */
    @ApiOperation(value = "导出人员培训计划")
    @GetMapping("/exportPersonTraining")
    public void exportPersonTraining(Integer id, HttpServletResponse response){
        personTrainingService.exportPersonTraining(id, response);
    }
    /**
     * å¯¼å‡ºäººå‘˜åŸ¹è®­ä¸Žè€ƒæ ¸è®°å½•
     * @return
     */
    @ApiOperation(value = "导出人员培训与考核记录")
    @GetMapping("/exportPersonTrainingRecord")
    public void exportPersonTrainingRecord(Integer id, HttpServletResponse response){
        personTrainingService.exportPersonTrainingRecord(id, response);
    }
    /**
     * äººå‘˜åŸ¹è®­è¯¦æƒ…附件新增
     * @param trainingDetailedId
     * @param file
     * @return
     */
    @ApiOperation(value = "人员培训详情附件新增")
    @PostMapping("/uploadTrainingDetailedFile")
    public Result<?> uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file) {
        return Result.success(personTrainingService.uploadTrainingDetailedFile(trainingDetailedId, file));
    }
    /**
     * äººå‘˜åŸ¹è®­è¯¦æƒ…附件列表
     * @return
     */
    @ApiOperation(value = "人员培训详情附件列表")
    @GetMapping("/getTrainingDetailedFileList")
    public Result<List<PersonTrainingDetailedFile>> getTrainingDetailedFileList(Integer trainingDetailedId){
        return Result.success(personTrainingDetailedFileMapper.selectList(Wrappers.<PersonTrainingDetailedFile>lambdaQuery()
                .eq(PersonTrainingDetailedFile::getTrainingDetailedId, trainingDetailedId)));
    }
    /**
     * äººå‘˜åŸ¹è®­è¯¦æƒ…附件删除
     * @return
     */
    @ApiOperation(value = "人员培训详情附件删除")
    @DeleteMapping("/delTrainingDetailedFileList")
    public Result delTrainingDetailedFileList(Integer detailedFileId){
        return Result.success(personTrainingDetailedFileMapper.deleteById(detailedFileId));
    }
    /**
     * æŸ¥è¯¢ä»Šå¹´äººå‘˜åŸ¹è®­ä¿¡æ¯
     * @return
     */
    @ApiOperation(value = "查询今年人员培训信息")
    @GetMapping("/getThisYearTrainingDetailed")
    public Result<List<PersonTrainingDetailed>> getThisYearTrainingDetailed(){
        return Result.success(personTrainingService.getThisYearTrainingDetailed());
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.ruoyi.personnel.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.personnel.dto.PersonTrainingRecordListDto;
import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
import com.ruoyi.personnel.service.PersonTrainingRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * åŸ¹è®­è®¡åˆ’ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-11 01:11:49
 */
@Api(tags = "人员 - åŸ¹è®­è®°å½•")
@RestController
@RequestMapping("/personTrainingRecord")
public class PersonTrainingRecordController {
    @Autowired
    private PersonTrainingRecordService personTrainingRecordService;
    @ApiOperation(value = "查询人员 åŸ¹è®­è®°å½•")
    @GetMapping("trainingSelectTrainingRecord")
    public Result<IPage<PersonTrainingRecordListDto>> trainingSelectTrainingRecord(Page page, String userName, Integer userId, Integer departmentId) {
        IPage<PersonTrainingRecordListDto> iPage = personTrainingRecordService.personnelTrainingPersonnel(page, userName, userId, departmentId);
        return Result.success(iPage);
    }
    @ApiOperation(value = "查询人员明细 åŸ¹è®­è®°å½•")
    @GetMapping("queryPersonnelDetails")
    public Result<IPage<TrainingRecordPersonDetailedDto>> queryPersonnelDetails(Page page, Integer userId, Integer trainingDate) {
        IPage<TrainingRecordPersonDetailedDto> iPage = personTrainingRecordService.queryPersonnelDetailsOfUserIdAndYear(page, userId, trainingDate); // æ–°å¢žæ ¹æ®å¹´ä»½æŸ¥è¯¢
        return Result.success(iPage);
    }
    /**
     * å¯¼å‡ºäººå‘˜åŸ¹è®­è®°å½•
     * @return
     */
    @ApiOperation(value = "导出人员培训记录")
    @GetMapping("/exportTrainingRecord")
    public void exportTrainingRecord(Integer userId, Integer trainingDate, HttpServletResponse response){
        personTrainingRecordService.exportTrainingRecordAddTrainingDate(userId, trainingDate, response);// æ–°å¢žæ ¹æ®å¹´ä»½æŸ¥è¯¢
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDetailsDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.personnel.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * Author: yuan
 * Date: 2024-12-13 æ˜ŸæœŸäº” 13:52:52
 * Description:
 */
@Data
public class PersonBasicInfoDetailsDto {
    @ApiModelProperty("用户id")
    private Integer userId;
    @ApiModelProperty("用户姓名")
    private String name;
    @ApiModelProperty("入职时间")
    private String entryTimeStr;
    @ApiModelProperty("实际实习结束")
    private String endPracticalPracticeStr;
    @ApiModelProperty("籍贯")
    private String nativePlace;
    @ApiModelProperty("身份证号")
    private String identityCard;
    @ApiModelProperty("身份证地址")
    private String idAddress;
    @ApiModelProperty("用户手机号")
    private String phone;
    @ApiModelProperty("毕业院校")
    private String graduatedInstitutions1;
    @ApiModelProperty("专业")
    private String major1;
    @ApiModelProperty("毕业时间1")
    private LocalDateTime graduationTime1;
    @ApiModelProperty("最高学历")
    private String officialAcademicRedentials;
    @ApiModelProperty("最高学位")
    private String highestDegree;
    @ApiModelProperty("职称")
    private String professionalTitle;
    // èŒä¸šèƒ½åŠ›
    @ApiModelProperty("紧急联系人")
    private String emergencyContact;
    @ApiModelProperty("紧急联系人电话")
    private String emergencyContactPhone;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.ruoyi.personnel.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.ruoyi.personnel.pojo.PersonBasicInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ExcelIgnoreUnannotated
public class PersonBasicInfoDto extends PersonBasicInfo {
    @ApiModelProperty(value = "账号")
    @ExcelProperty("员工编号")
    private String account;
    @ApiModelProperty(value = "姓名")
    @ExcelProperty("姓名")
    private String name;
    @ApiModelProperty(value = "姓名(英文)")
    private String nameEn;
    @ApiModelProperty(value = "年龄")
    private Integer age;
    @ApiModelProperty(value = "电话号码")
    @ExcelProperty("手机号")
    private String phone;
    @ApiModelProperty(value = "邮箱")
    private String email;
    @ApiModelProperty(value = "部门")
    private String department;
    @ApiModelProperty(value = "lims组织架构")
    private String departLimsId;
    @ApiModelProperty(value = "签名照片地址")
    private String signatureUrl;
    @ApiModelProperty(value = "自身照片地址")
    private String pictureUrl;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoWorkDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.personnel.dto;
import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2025/1/14
 */
@Data
public class PersonBasicInfoWorkDto extends PersonBasicInfoWork {
    @ApiModelProperty("填充使用")
    private String fill;
}
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;
}
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;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.personnel.dto;
import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PersonPersonnelCapacityDto extends PersonPersonnelCapacity {
    @ApiModelProperty("操作人姓名")
    private String confirmOperatingPersonnelName;
    @ApiModelProperty("人员姓名")
    private String userName;
    @ApiModelProperty("岗位名称")
    private String postName;
    @ApiModelProperty("岗位职责")
    private String responsibilities;
    @ApiModelProperty("工作经历")
    private String placeWork;
    @ApiModelProperty("专业")
    private String major;
    @ApiModelProperty(value = "职称")
    private String professionalTitle;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPersonnelCapacityExportDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
package com.ruoyi.personnel.dto;
import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/28
 */
@Data
public class PersonPersonnelCapacityExportDto extends PersonPersonnelCapacity {
    @ApiModelProperty("岗位名称")
    private String postName;
    @ApiModelProperty("人员姓名")
    private String userName;
    @ApiModelProperty("学历")
    private String officialAcademicRedentials;
    @ApiModelProperty("专业")
    private String major;
    @ApiModelProperty("职称")
    private String professionalTitle;
    @ApiModelProperty("工作经历")
    private String placeWork;
    @ApiModelProperty("学历 ç¬¦åˆä¸Žå¦(1:符合)")
    private String academicConformNot1 = "□";
    @ApiModelProperty("学历 ç¬¦åˆä¸Žå¦(2:不符合)")
    private String academicConformNot2 = "□";
    @ApiModelProperty("学历 ç¬¦åˆä¸Žå¦(3:不适用)")
    private String academicConformNot3 = "□";
    @ApiModelProperty("相关年限  ç¬¦åˆä¸Žå¦(1:符合)")
    private String relatedYearsConformNot1 = "□";
    @ApiModelProperty("相关年限  ç¬¦åˆä¸Žå¦(2:不符合)")
    private String relatedYearsConformNot2 = "□";
    @ApiModelProperty("相关年限  ç¬¦åˆä¸Žå¦(3:不适用)")
    private String relatedYearsConformNot3 = "□";
    @ApiModelProperty("相关培训 ç¬¦åˆä¸Žå¦(1:符合)")
    private String relatedTrainingConformNot1 = "□";
    @ApiModelProperty("相关培训 ç¬¦åˆä¸Žå¦(2:不符合)")
    private String relatedTrainingConformNot2 = "□";
    @ApiModelProperty("相关培训 ç¬¦åˆä¸Žå¦(3:不适用)")
    private String relatedTrainingConformNot3 = "□";
    @ApiModelProperty("相关经验 ç¬¦åˆä¸Žå¦(1:符合)")
    private String relevantExperienceConformNot1 = "□";
    @ApiModelProperty("相关经验 ç¬¦åˆä¸Žå¦(2:不符合)")
    private String relevantExperienceConformNot2 = "□";
    @ApiModelProperty("相关经验 ç¬¦åˆä¸Žå¦(3:不适用)")
    private String relevantExperienceConformNot3 = "□";
    @ApiModelProperty("上岗证 ç¬¦åˆä¸Žå¦(1:符合)")
    private String workLicenseConformNot1 = "□";
    @ApiModelProperty("上岗证 ç¬¦åˆä¸Žå¦(2:不符合)")
    private String workLicenseConformNot2 = "□";
    @ApiModelProperty("上岗证 ç¬¦åˆä¸Žå¦(3:不适用)")
    private String workLicenseConformNot3 = "□";
    @ApiModelProperty("岗位职责1(熟悉本岗位的产品检测样品制备和相关产品基础知识)")
    private String jobResponsibilities1 = "□";
    @ApiModelProperty("岗位职责2(熟悉本岗位样品检测流程)")
    private String jobResponsibilities2 = "□";
    @ApiModelProperty("岗位职责3(正确熟练操作本岗位仪表设备)")
    private String jobResponsibilities3 = "□";
    @ApiModelProperty("岗位职责4(熟悉本岗位相关检测标准)")
    private String jobResponsibilities4 = "□";
    @ApiModelProperty("岗位职责5(熟悉本岗位产品性能及结果判断、分析)")
    private String jobResponsibilities5 = "□";
    @ApiModelProperty("岗位职责6(完成相应的厂验、认证)")
    private String jobResponsibilities6 = "□";
    @ApiModelProperty("岗位职责7(编写相关检测手顺)")
    private String jobResponsibilities7 = "□";
    @ApiModelProperty("岗位职责8(了解仪器设备基本结构与简单维护保养)")
    private String jobResponsibilities8 = "□";
    @ApiModelProperty("岗位职责9(具备技能培训的能力)")
    private String jobResponsibilities9 = "□";
    @ApiModelProperty("岗位职责10(具备检测仪器改造能力)")
    private String jobResponsibilities10 = "□";
    @ApiModelProperty("岗位职责 ç¬¦åˆä¸Žå¦(1:符合)")
    private String jobResponsibilitiesConformNot1 = "□";
    @ApiModelProperty("岗位职责 ç¬¦åˆä¸Žå¦(2:不符合)")
    private String jobResponsibilitiesConformNot2 = "□";
    @ApiModelProperty("岗位职责 ç¬¦åˆä¸Žå¦(3:不适用)")
    private String jobResponsibilitiesConformNot3 = "□";
    @ApiModelProperty("综合评价1(可胜任该岗位)")
    private String comprehensiveAssessment1 = "□";
    @ApiModelProperty("综合评价2(可边培训边上岗)")
    private String comprehensiveAssessment2 = "□";
    @ApiModelProperty("综合评价3(不胜任该岗位)")
    private String comprehensiveAssessment3 = "□";
}
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;
}
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;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.personnel.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PersonTrainingDetailedDto extends PersonTrainingDetailed {
    @ApiModelProperty("举办部门名称")
    private String holdingDepartmentName;
    @ApiModelProperty("培训讲师名称")
    private String trainingLecturerName;
    @ApiModelProperty("当前登录人是否认领")
    private Boolean whetherClaim;
    @ApiModelProperty("培训日期")
    private String trainingDateString;
    // å¯¼å‡ºä½¿ç”¨
    @TableField(select = false, exist = false)
    @ApiModelProperty("序号(导出使用)")
    private Integer index;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.personnel.dto;
import com.ruoyi.personnel.pojo.PersonTraining;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "PersonTrainingDto对象", description = "培训计划")
public class PersonTrainingDto extends PersonTraining {
    @ApiModelProperty("编制人姓名")
    private String compilerName;
    @ApiModelProperty("审核人姓名")
    private String reviewerName;
    @ApiModelProperty("批准人姓名")
    private String approverName;
    @ApiModelProperty("创建人姓名")
    private String createUserName;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.personnel.dto;
import com.ruoyi.personnel.pojo.PersonTrainingRecord;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PersonTrainingRecordDto extends PersonTrainingRecord {
    @ApiModelProperty(value = "姓名")
    private String userName;
    @ApiModelProperty(value = "工号")
    private String account;
    @ApiModelProperty(value = "角色")
    private String roleName;
    @ApiModelProperty(value = "电话号码")
    private String phone;
    @ApiModelProperty(value = "部门")
    private String department;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordListDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.ruoyi.personnel.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class PersonTrainingRecordListDto {
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    @ApiModelProperty("员工编号")
    private String account;
    @ApiModelProperty("用户姓名")
    private String name;
    @ApiModelProperty("所在部门")
    private String departLimsName;
    @ApiModelProperty("职称")
    private String professionalTitle;
    @ApiModelProperty("最高学历")
    private String officialAcademicRedentials;
    @ApiModelProperty("入单位时间")
    private LocalDateTime unitTime;
    @ApiModelProperty("入单位时间")
    private String unitTimeSting;
    @ApiModelProperty("专业")
    private String major1;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordSubmitDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.personnel.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
@Data
public class PersonTrainingRecordSubmitDto {
    @ApiModelProperty("年度计划明细ID")
    private Integer trainingDetailedId;
    @ApiModelProperty("培训地点")
    private String placeTraining;
    @ApiModelProperty("培训完成时间")
    private LocalDate openingTime;
    @ApiModelProperty("考核方式")
    private String assessmentMethod;
    @ApiModelProperty("本次培训综合评价")
    private String comprehensiveAssessment;
    @ApiModelProperty("评价人")
    private Integer assessmentUserId;
    @ApiModelProperty("评价时间")
    private LocalDate assessmentDate;
    private Integer state;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.personnel.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/25
 */
@Data
public class TrainingRecordExportDto {
    @ApiModelProperty("用户名称1")
    private String userName1;
    @ApiModelProperty("部门1")
    private String department1;
    @ApiModelProperty("考核结果1")
    private String examinationResults1;
    @ApiModelProperty("用户名称2")
    private String userName2;
    @ApiModelProperty("部门1")
    private String department2;
    @ApiModelProperty("考核结果1")
    private String examinationResults2;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordPersonDetailedDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.personnel.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class TrainingRecordPersonDetailedDto {
    @ApiModelProperty("培训日期")
    private String trainingDateString;
    @ApiModelProperty("培训日期")
    private String trainingDate;
    @ApiModelProperty("培训内容")
    private String trainingContent;
    @ApiModelProperty("课时")
    private Integer classHour;
    @ApiModelProperty("考核结果")
    private String examinationResults;
    @ApiModelProperty("备注")
    private String remarks;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.personnel.dto;
import com.ruoyi.common.core.domain.entity.User;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserPageDto extends User {
    @ApiModelProperty(value = "创建用户")
    private String createUserName;
    @ApiModelProperty(value = "更新用户")
    private String updateUserName;
    @ApiModelProperty(value = "角色")
    private String roleName;
}
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;
}
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);
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.personnel.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class PersonTrainingDetailedUpload {
    @ExcelProperty("培训目标")
    private String trainingObjectives;
    @ExcelProperty("培训内容")
    private String trainingContent;
    @ExcelProperty("培训方式")
    private String trainingMode;
    @ExcelProperty("参加对象")
    private String participants;
    @ExcelProperty("举办部门")
    private String holdingDepartment;
    @ExcelProperty("培训讲师")
    private String trainingLecturerName;
    @ExcelProperty("培训时间")
    private String trainingDate;
    @ExcelProperty("课时")
    private Integer classHour;
    @ExcelProperty("备注")
    private String remarks;
}
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> {
}
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> {
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.personnel.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.entity.DepartmentDto;
import com.ruoyi.personnel.dto.PersonBasicInfoDto;
import com.ruoyi.personnel.pojo.PersonBasicInfo;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-08-30 09:19:57
 */
public interface PersonBasicInfoMapper extends BaseMapper<PersonBasicInfo> {
    List<DepartmentDto> selectLimsUser();
    PersonBasicInfoDto getCNASPersonnelInfo(Integer userId);
    /**
     * äººå‘˜åŸºæœ¬ä¿¡æ¯åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param name
     * @param departmentId
     * @return
     */
    IPage<Map<String, Object>> selectPersonBasecInfoAndUser(Page page, String name, Integer departmentId);
    /**
     * å¯¼å‡ºæŸ¥è¯¢äººå‘˜ä¿¡æ¯
     * @param userId
     * @return
     */
    Map<String, Object> selectexportPersonBasic(Integer userId);
}
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> {
}
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);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.personnel.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
/**
 * <p>
 * å²—位职责 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 02:07:49
 */
public interface PersonJobResponsibilitiesMapper extends BaseMapper<PersonJobResponsibilities> {
    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.personnel.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonPersonnelCapacityDto;
import com.ruoyi.personnel.dto.PersonPersonnelCapacityExportDto;
import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * äººå‘˜èƒ½åŠ› Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-10 11:26:18
 */
public interface PersonPersonnelCapacityMapper extends BaseMapper<PersonPersonnelCapacity> {
    IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName);
    /**
     * æŸ¥è¯¢äººå‘˜èƒ½åŠ›æŽ¥å£
     * @param id
     * @return
     */
    PersonPersonnelCapacityExportDto selectExportPersonnelCapacity(@Param("id") Integer id);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.personnel.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
/**
 * <p>
 * ä»»èŒæŽˆæƒè®°å½• Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 10:48:17
 */
public interface PersonPostAuthorizationRecordMapper extends BaseMapper<PersonPostAuthorizationRecord> {
    IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page, Integer departLimsId, Integer userId, String userName);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.personnel.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto;
import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
import java.util.Date;
import java.util.List;
/**
 * <p>
 * å¥–惩记录 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-08 11:25:02
 */
public interface PersonRewardPunishmentRecordMapper extends BaseMapper<PersonRewardPunishmentRecord> {
    IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page, Integer userId, String userName, Date startTime, Date endTime, Integer departmentId);
    List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(Integer userId, Integer departmentId, String userName, Date startTime, Date endTime);
}
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> {
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.ruoyi.personnel.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.mybatis_config.MyBaseMapper;
import com.ruoyi.personnel.dto.PersonTrainingDetailedDto;
import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * åŸ¹è®­è®¡åˆ’详情 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-11 01:46:27
 */
public interface PersonTrainingDetailedMapper extends MyBaseMapper<PersonTrainingDetailed> {
    IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page,
                                                                    String trainingLecturerName,
                                                                    String courseCode, String trainingDate,
                                                                    Integer id,
                                                                    Integer userId,
                                                                    Integer loginUserId);
    /**
     * æ ¹æ®ä¸»è¡¨id查询详情
     * @param trainingId
     * @return
     */
    List<PersonTrainingDetailedDto> selectTrainingList(@Param("trainingId") Integer trainingId);
    /**
     * æŸ¥è¯¢è¯¦ç»†
     * @param id
     * @return
     */
    PersonTrainingDetailedDto selectTrainingDetail(@Param("id") Integer id);
    /**
     * æŸ¥è¯¢ä»Šå¹´äººå‘˜åŸ¹è®­ä¿¡æ¯
     * @return
     */
    List<PersonTrainingDetailed> getThisYearTrainingDetailed();
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.personnel.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonTrainingDto;
import com.ruoyi.personnel.pojo.PersonTraining;
/**
 * <p>
 * åŸ¹è®­è®¡åˆ’ Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-11 01:11:49
 */
public interface PersonTrainingMapper extends BaseMapper<PersonTraining> {
    IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departLimsId);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.ruoyi.personnel.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonTrainingRecordDto;
import com.ruoyi.personnel.dto.PersonTrainingRecordListDto;
import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
import com.ruoyi.personnel.pojo.PersonTrainingRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * åŸ¹è®­è®°å½• Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-12 04:50:48
 */
public interface PersonTrainingRecordMapper extends BaseMapper<PersonTrainingRecord> {
    List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName);
    IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId);
    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetails(Page page, Integer userId);
    /**
     * æ ¹æ®è¯¦æƒ…id查询培训人员
     * @param trainingDetailedId
     * @return
     */
    List<PersonTrainingRecordDto> selectListByTrainingDetailedId(@Param("trainingDetailedId") Integer trainingDetailedId);
    /**
     * æŸ¥è¯¢äººå‘˜ä¿¡æ¯
     * @param userId
     * @return
     */
    PersonTrainingRecordListDto selectUserTraining(@Param("userId") Integer userId);
    /**
     * æ ¹æ®ç”¨æˆ·id查询培训记录
     * @param userId
     * @return
     */
    List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtos(Integer userId);
    /**
     * æ ¹æ®ç”¨æˆ·id和年份查询人员明细 åŸ¹è®­è®°å½•
     * @param page
     * @param userId
     * @param year
     * @return
     */
    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year);
    /**
     * æ ¹æ®ç”¨æˆ·id和年份查询人员明细 åŸ¹è®­è®°å½•导出
     * @param userId
     * @param trainingDate
     * @return
     */
    List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtosByTrainingDate(Integer userId, Integer year);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("cnas_annex")
@ApiModel("人员基本信息附件表")
public class Annex implements Serializable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "user表id")
    private Integer userId;
    @ApiModelProperty(value = "证件号")
    private String idNumber;
    @ApiModelProperty(value = "发证单位")
    private String issueUnit;
    @ApiModelProperty(value = "文件名称")
    private String fileName;
    @ApiModelProperty(value = "级别")
    private String level;
    @ApiModelProperty(value = "有效期")
    private String periodValidity;
    @ApiModelProperty(value = "添加时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "复印件")
    private String copy;
    @ApiModelProperty(value = "原件")
    private String original;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,156 @@
package com.ruoyi.personnel.pojo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-08-30 09:19:57
 */
@Getter
@Setter
@TableName("cnas_person_basic_info")
@ApiModel(value = "PersonBasicInfo对象", description = "")
public class PersonBasicInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("当前状态")
    private String currentState;
    @ApiModelProperty("职称")
    @ExcelProperty("职称")
    private String professionalTitle;
    @ApiModelProperty("性别")
    private String sex;
    @ApiModelProperty("人员分类")
    private String personnelClassification;
    @ApiModelProperty("出生日期")
    @TableField(updateStrategy = FieldStrategy.IGNORED) // ä¸ºç©ºå¯ä»¥æ›´æ–°
    private LocalDateTime dateBirth;
    @ApiModelProperty("身份证号")
    @ExcelProperty("证件号码")
    private String identityCard;
    @ApiModelProperty("民族")
    private String nation;
    @ApiModelProperty("政治面貌")
    private String politicalStatus;
    @ApiModelProperty("最高学历")
    @ExcelProperty("最高学历")
    private String officialAcademicRedentials;
    @ApiModelProperty("毕业时间1")
    @ExcelProperty("毕业时间")
    private LocalDateTime graduationTime1;
    @ApiModelProperty("毕业院校1")
    @ExcelProperty("毕业院校")
    private String graduatedInstitutions1;
    @ApiModelProperty("专业1")
    @ExcelProperty("所学专业")
    private String major1;
    @ApiModelProperty("毕业时间2")
    @TableField(updateStrategy = FieldStrategy.IGNORED) // ä¸ºç©ºå¯ä»¥æ›´æ–°
    private LocalDateTime graduationTime2;
    @ApiModelProperty("毕业院校2")
    private String graduatedInstitutions2;
    @ApiModelProperty("专业2")
    private String major2;
    @ApiModelProperty("手机号")
    private String telephone;
    @ApiModelProperty("备注")
    private String remarks;
    @ApiModelProperty("用户表(user)id")
    private Integer userId;
    @ApiModelProperty("公司名称")
    private String corporateName;
    @ApiModelProperty("岗位名称")
    private String postName;
    @ApiModelProperty("入集团时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField(updateStrategy = FieldStrategy.IGNORED) // ä¸ºç©ºå¯ä»¥æ›´æ–°
    @ExcelProperty("入集团时间")
    private LocalDateTime groupTime;
    @ApiModelProperty("劳动关系")
    private Integer laborRelations;
    @ApiModelProperty("工作时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField(updateStrategy = FieldStrategy.IGNORED) // ä¸ºç©ºå¯ä»¥æ›´æ–°
    private LocalDateTime workingTime;
    @ApiModelProperty("合同有效期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField(updateStrategy = FieldStrategy.IGNORED) // ä¸ºç©ºå¯ä»¥æ›´æ–°
    private LocalDateTime contractLifeTime;
    @ApiModelProperty("籍贯")
    @ExcelProperty("籍贯")
    private String nativePlace;
    @ApiModelProperty("证件有效期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField(updateStrategy = FieldStrategy.IGNORED) // ä¸ºç©ºå¯ä»¥æ›´æ–°
    private LocalDateTime validityPeriod;
    @ApiModelProperty("婚姻状况")
    private Integer maritalStatus;
    @ApiModelProperty("证件地址")
    @ExcelProperty("证件地址")
    private String idAddress;
    @ApiModelProperty("证件详细地址")
    private String idDetailAddress;
    @ApiModelProperty("入党/团时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField(updateStrategy = FieldStrategy.IGNORED) // ä¸ºç©ºå¯ä»¥æ›´æ–°
    private LocalDateTime dumplingTime;
    @ApiModelProperty("最高学位")
    @ExcelProperty("最高学位")
    private String highestDegree;
    @ApiModelProperty("最后更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime lastUpdateTime;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * äººå‘˜åŸºæœ¬ä¿¡æ¯é™„ä»¶
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2025-01-09 05:28:55
 */
@Getter
@Setter
@TableName("cnas_person_basic_info_file")
@ApiModel(value = "PersonBasicInfoFile对象", description = "人员基本信息附件")
public class PersonBasicInfoFile implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "basic_info_file_id", type = IdType.AUTO)
    private Integer basicInfoFileId;
    @ApiModelProperty("人员基本信息id")
    private Integer userId;
    @ApiModelProperty("类型:1图片/2文件")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * äººå‘˜åŸºæœ¬ä¿¡æ¯
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2025-01-09 05:45:04
 */
@Getter
@Setter
@TableName("cnas_person_basic_info_work")
@ApiModel(value = "PersonBasicInfoWork对象", description = "人员基本信息")
public class PersonBasicInfoWork implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "basic_info_work_id", type = IdType.AUTO)
    private Integer basicInfoWorkId;
    @ApiModelProperty("人员id")
    private Integer userId;
    @ApiModelProperty("工作经历")
    private String workExperience;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonCommunicationAbility.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * æ²Ÿé€šè®°å½•
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 12:00:57
 */
@Getter
@Setter
@TableName("cnas_person_communication_ability")
@ApiModel(value = "PersonCommunicationAbility对象", description = "沟通记录")
public class PersonCommunicationAbility implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("沟通人id")
    private String userId;
    @ApiModelProperty("沟通时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime communicationTime;
    @ApiModelProperty("沟通地点")
    private String communicationPlace;
    @ApiModelProperty("沟通内容")
    private String communicationContent;
    @ApiModelProperty("创建人id")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "更新人id", hidden = true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "创建时间", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "更新时间", hidden = true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * å²—位职责
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 02:07:49
 */
@Getter
@Setter
@TableName("cnas_person_job_responsibilities")
@ApiModel(value = "PersonJobResponsibilities对象", description = "岗位职责")
public class PersonJobResponsibilities implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("1岗位名称")
    private String postName;
    @ApiModelProperty("1工作目标")
    private String jobObjective;
    @ApiModelProperty("1岗位职责")
    private String jobResponsibilities;
    @ApiModelProperty("1任职人id")
    private String incumbentId;
    @ApiModelProperty("1 æäº¤æ“ä½œäºº")
    private String submittingOperator;
    @ApiModelProperty("1提交日期")
    private LocalDateTime submittingDate;
    @ApiModelProperty("2 ä»»èŒäºº ä¸»ç®¡id")
    private Integer supervisorId;
    @ApiModelProperty("2 ä»»èŒäºº æ“ä½œäºº")
    private String incumbentOperator;
    @ApiModelProperty("2 ä»»èŒäºº æ—¥æœŸ")
    private LocalDateTime incumbentDate;
    @ApiModelProperty("3 ä¸»ç®¡ æ“ä½œäºº")
    private String supervisorOperator;
    @ApiModelProperty("3 ä¸»ç®¡ æ—¥æœŸ")
    private LocalDateTime supervisorDate;
    @ApiModelProperty(value = "创建人id", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("当前状态")
    private String currentState;
    @ApiModelProperty(value = "创建日期 / æäº¤æ—¥æœŸ", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("当前负责人")
    private String currentResponsible;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * äººå‘˜èƒ½åŠ›
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-10 11:26:18
 */
@Getter
@Setter
@TableName("cnas_person_personnel_capacity")
@ApiModel(value = "PersonPersonnelCapacity对象", description = "人员能力")
public class PersonPersonnelCapacity implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("学历")
    private String academicDegree;
    @ApiModelProperty("学历 ç¬¦åˆä¸Žå¦(1:符合;2:不符合;3:不适用)")
    private Integer academicConformNot;
    @ApiModelProperty("学历 å¤‡æ³¨")
    private String academicRemarks;
    @ApiModelProperty("相关年限")
    private String relatedYears;
    @ApiModelProperty("相关年限  ç¬¦åˆä¸Žå¦(1:符合;2:不符合;3:不适用)")
    private Integer relatedYearsConformNot;
    @ApiModelProperty("相关年限 å¤‡æ³¨")
    private String relatedYearsRemarks;
    @ApiModelProperty("相关培训")
    private String relatedTraining;
    @ApiModelProperty("相关培训 ç¬¦åˆä¸Žå¦(1:符合;2:不符合;3:不适用)")
    private Integer relatedTrainingConformNot;
    @ApiModelProperty("相关培训 å¤‡æ³¨")
    private String relatedTrainingRemarks;
    @ApiModelProperty("相关经验")
    private String relevantExperience;
    @ApiModelProperty("相关经验 ç¬¦åˆä¸Žå¦(1:符合;2:不符合;3:不适用)")
    private Integer relevantExperienceConformNot;
    @ApiModelProperty("相关经验 å¤‡æ³¨")
    private String relevantExperienceRemarks;
    @ApiModelProperty("上岗证")
    private String workLicense;
    @ApiModelProperty("上岗证 ç¬¦åˆä¸Žå¦(1:符合;2:不符合;3:不适用)")
    private Integer workLicenseConformNot;
    @ApiModelProperty("上岗证 å¤‡æ³¨")
    private String workLicenseRemarks;
    @ApiModelProperty("岗位职责")
    private String jobResponsibilities;
    @ApiModelProperty("岗位职责 ç¬¦åˆä¸Žå¦(1:符合;2:不符合;3:不适用)")
    private Integer jobResponsibilitiesConformNot;
    @ApiModelProperty("岗位职责 å¤‡æ³¨")
    private String jobResponsibilitiesRemarks;
    @ApiModelProperty("综合评价")
    private String comprehensiveAssessment;
    @ApiModelProperty("2 ç¡®è®¤äºº userId主键")
    private Integer confirmOperatingPersonnelId;
    @ApiModelProperty("2 ç¡®è®¤äºº æ—¥æœŸ")
    private LocalDateTime confirmDate;
    @ApiModelProperty(value = "创建日期", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "更新日期", hidden = true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "创建人", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "更新人", hidden = true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "人员姓名 id")
    private Integer userId;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * ä»»èŒæŽˆæƒè®°å½•
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 10:48:17
 */
@Getter
@Setter
@TableName("cnas_person_post_authorization_record")
@ApiModel(value = "PersonPostAuthorizationRecord对象", description = "任职授权记录")
public class PersonPostAuthorizationRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("证书编号")
    private String certificateNumber;
    @ApiModelProperty("被任职人员id")
    private String userId;
    @ApiModelProperty("任职岗位")
    private String post;
    @ApiModelProperty("操作类型")
    private String operationType;
    @ApiModelProperty("原文件名称")
    private String fileName;
    @ApiModelProperty("系统生成文件名称")
    private String systemFileName;
    @ApiModelProperty("备注")
    private String remarks;
    @ApiModelProperty(value = "创建时间", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "更新时间", hidden = true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "更新人id",hidden = true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "创建人id", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("理论知识考试成绩")
    private String num1;
    @ApiModelProperty("操作技能考试成绩")
    private String num2;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * å¥–惩记录
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-08 11:25:02
 */
@Getter
@Setter
@TableName("cnas_person_reward_punishment_record")
@ApiModel(value = "PersonRewardPunishmentRecord对象", description = "奖惩记录")
public class PersonRewardPunishmentRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("奖惩级别")
    private String rewardPunishLevel;
    @ApiModelProperty("奖惩名称")
    private String rewardPunishName;
    @ApiModelProperty("奖惩时间")
    private LocalDateTime rewardPunishTime;
    @ApiModelProperty("奖惩单位")
    private String rewardPunishWorkUnit;
    @ApiModelProperty("奖惩内容")
    private String rewardPunishContent;
    @ApiModelProperty("用户id")
    private Integer userId;
    @ApiModelProperty(value = "创建时间", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "更新时间", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "创建人", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * åŸ¹è®­è®¡åˆ’
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-11 01:11:49
 */
@Getter
@Setter
@TableName("cnas_person_training")
@ApiModel(value = "PersonTraining对象", description = "培训计划")
public class PersonTraining implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("文件名称")
    private String fileName;
    @ApiModelProperty("计划年份")
    private String planYear;
    @ApiModelProperty("编制人id")
    private Integer compilerId;
    @ApiModelProperty("编制日期")
    private LocalDateTime compilationDate;
    @ApiModelProperty("审核人id")
    private Integer reviewerId;
    @ApiModelProperty("审核日期")
    private LocalDateTime auditDate;
    @ApiModelProperty("审核状态")
    private Integer reviewerStatus;
    @ApiModelProperty("审核备注")
    private String auditRemarks;
    @ApiModelProperty("批准人id")
    private Integer approverId;
    @ApiModelProperty("批准备注")
    private String approvalRemarks;
    @ApiModelProperty("批准状态(1:批准;2:不批准)")
    private Integer approvalStatus;
    @ApiModelProperty("批准日期")
    private LocalDateTime approvalDate;
    @ApiModelProperty("创建日期")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("创建人id")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("更新人id")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * åŸ¹è®­è®¡åˆ’详情
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-11 01:46:27
 */
@Getter
@Setter
@TableName("cnas_person_training_detailed")
@ApiModel(value = "PersonTrainingDetailed对象", description = "培训计划详情")
public class PersonTrainingDetailed implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("培训计划")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("培训目标")
    private String trainingObjectives;
    @ApiModelProperty("培训内容")
    private String trainingContent;
    @ApiModelProperty("培训方式")
    private String trainingMode;
    @ApiModelProperty("状态(1:已完成;2:待评价;3: æœªå¼€å§‹)")
    private Integer state;
    @ApiModelProperty("参加对象")
    private String participants;
    @ApiModelProperty("举办部门")
    private String holdingDepartment;
    @ApiModelProperty("培训地点")
    private String placeTraining;
    @ApiModelProperty("培训讲师_id")
    private Integer trainingLecturerId;
    @ApiModelProperty("计划培训日期")
    private String trainingDate;
    @ApiModelProperty("培训完成时间")
    private LocalDate openingTime;
    @ApiModelProperty("课时")
    private Integer classHour;
    @ApiModelProperty("备注")
    private String remarks;
    @ApiModelProperty("培训计划id")
    private Integer planId;
    @ApiModelProperty(value = "创建时间", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建人id", hidden = true)
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "更新人id", hidden = true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "更新时间", hidden = true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("考核方式")
    private String assessmentMethod;
    @ApiModelProperty("本次培训综合评价")
    private String comprehensiveAssessment;
    @ApiModelProperty("评价人")
    private Integer assessmentUserId;
    @ApiModelProperty("评价时间")
    private LocalDate assessmentDate;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailedFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * äººå‘˜åŸ¹è®­è®¡åˆ’详情附件表(CnasPersonTrainingDetailedFile)$desc
 *
 * @author makejava
 * @since 2024-12-25 14:18:22
 */
@Data
@TableName("cnas_person_training_detailed_file")
public class PersonTrainingDetailedFile {
    @TableId(type = IdType.AUTO)
    private Integer detailedFileId;
    @ApiModelProperty("人员你培训计划详情id")
    private Integer trainingDetailedId;
    @ApiModelProperty("类型:1图片/2文件")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @ApiModelProperty("创建人")
    private Integer createUser;
    @ApiModelProperty("创建时间")
    private Date createTime;
    @ApiModelProperty("修改人")
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    private Date updateTime;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.ruoyi.personnel.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * <p>
 * åŸ¹è®­è®°å½•
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-12 04:50:48
 */
@Getter
@Setter
@TableName("cnas_person_training_record")
@ApiModel(value = "PersonTrainingRecord对象", description = "培训记录")
public class PersonTrainingRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "training_record_id", type = IdType.AUTO)
    private Integer trainingRecordId;
    @ApiModelProperty("用户表格(user)主键")
    private Integer userId;
    @ApiModelProperty("培训计划详情 - å­ id")
    private Integer courseId;
    @ApiModelProperty("考核结果")
    private String examinationResults;
}
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> {
}
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> {
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.personnel.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.entity.DepartmentDto;
import com.ruoyi.personnel.dto.PersonBasicInfoDto;
import com.ruoyi.personnel.dto.UserPageDto;
import com.ruoyi.personnel.pojo.PersonBasicInfo;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-08-30 09:19:57
 */
public interface PersonBasicInfoService extends IService<PersonBasicInfo> {
    List<DepartmentDto> selectCNSAPersonTree();
    Map<String,Object> getCNASPersonnelInfo(Integer userId);
    void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto);
    IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId);
    void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception;
    String exportPersonBasicInfoById(Integer id, HttpServletResponse response);
    /**
     * äººå‘˜åŸ¹è®­åŸºæœ¬ä¿¡æ¯é™„件新增
     * @param basicInfoId
     * @param file
     * @return
     */
    boolean uploadBasicInfoFile(Integer basicInfoId, MultipartFile file);
}
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> {
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonCommunicationAbilityService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.personnel.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.personnel.dto.PersonCommunicationAbilityDto;
import com.ruoyi.personnel.pojo.PersonCommunicationAbility;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æ²Ÿé€šèƒ½åŠ› æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 12:00:57
 */
public interface PersonCommunicationAbilityService extends IService<PersonCommunicationAbility> {
    IPage<PersonCommunicationAbilityDto> personPersonCommunicationAbilityPage(Page page,
                                                                              Integer departLimsId, Integer userId, String userName);
    void exportPersonCommunicationAbility(Integer id, HttpServletResponse response)throws Exception;
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.personnel.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * å²—位职责 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 02:07:49
 */
public interface PersonJobResponsibilitiesService extends IService<PersonJobResponsibilities> {
    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page,
                                                                        String userId,
                                                                        String departmentId,
                                                                        String userName);
    void exportPersonJobResponsibilities(Integer id, HttpServletResponse response);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.personnel.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.personnel.dto.PersonPersonnelCapacityDto;
import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * äººå‘˜èƒ½åŠ› æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-10 11:26:18
 */
public interface PersonPersonnelCapacityService extends IService<PersonPersonnelCapacity> {
    IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName);
    /**
     * å¯¼å‡ºäººå‘˜èƒ½åŠ›
     * @param id
     * @param response
     */
    void exportPersonnelCapacity(Integer id, HttpServletResponse response);
    /**
     * submitConfirmPersonnelCapability
     * @param personPersonnelCapacity
     */
    void submitConfirmPersonnelCapability(PersonPersonnelCapacity personPersonnelCapacity);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.personnel.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * ä»»èŒæŽˆæƒè®°å½• æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 10:48:17
 */
public interface PersonPostAuthorizationRecordService extends IService<PersonPostAuthorizationRecord> {
    IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page,
                                                                              Integer departLimsId,
                                                                              Integer userId,
                                                                              String userName);
    void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response);
}
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);
}
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);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.ruoyi.personnel.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.personnel.dto.PersonTrainingRecordDto;
import com.ruoyi.personnel.dto.PersonTrainingRecordListDto;
import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto;
import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
import com.ruoyi.personnel.pojo.PersonTrainingRecord;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * <p>
 * åŸ¹è®­è®°å½• æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-12 04:50:48
 */
public interface PersonTrainingRecordService extends IService<PersonTrainingRecord> {
    List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName);
    void deleteTrainingAndAssessmentRecords(String ids);
    IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page,
                                                                  String userName, Integer userId, Integer departLimsId);
    void claimOfTrainingAndAssessmentRecords(Boolean claimAndClaim, Integer courseId);
    /**
     * æ ¹æ®ç”¨æˆ·id和年份查询人员明细 åŸ¹è®­è®°å½•
     * @param page
     * @param userId
     * @param year
     * @return
     */
    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year);
    /**
     * å¯¼å‡ºäººå‘˜åŸ¹è®­è®°å½•
     * @param userId
     * @param trainingDate
     * @param response
     */
    void exportTrainingRecordAddTrainingDate(Integer userId, Integer trainingDate, HttpServletResponse response);
    /**
     * åŸ¹è®­æäº¤
     * @param personTrainingRecordSubmitDto
     */
    void trainingAndAssessmentRecordsAdded(PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.personnel.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.personnel.dto.PersonTrainingDto;
import com.ruoyi.personnel.pojo.PersonTraining;
import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * <p>
 * åŸ¹è®­è®¡åˆ’ æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-11 01:11:49
 */
public interface PersonTrainingService extends IService<PersonTraining> {
    IPage<PersonTrainingDto> personTrainingSelect(Page page,
                                                  String compilerName, String departmentId);
    void personTrainingImport(MultipartFile file, PersonTraining training);
    void personTrainingDelete(Integer id);
    void reviewAnnualPersonnelTraining(PersonTraining training);
    void approveAnnualPersonnelTraining(PersonTraining training);
    /**
     * å¯¼å‡ºäººå‘˜åŸ¹è®­è®¡åˆ’
     * @param id
     * @param response
     */
    void exportPersonTraining(Integer id, HttpServletResponse response);
    /**
     * å¯¼å‡ºäººå‘˜åŸ¹è®­ä¸Žè€ƒæ ¸è®°å½•
     * @param id
     * @param response
     */
    void exportPersonTrainingRecord(Integer id, HttpServletResponse response);
    /**
     * äººå‘˜åŸ¹è®­è¯¦æƒ…附件新增
     * @param trainingDetailedId
     * @param file
     * @return
     */
    boolean uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file);
    /**
     * æŸ¥è¯¢ä»Šå¹´äººå‘˜åŸ¹è®­ä¿¡æ¯
     * @return
     */
    List<PersonTrainingDetailed> getThisYearTrainingDetailed();
}
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 {
}
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 {
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,340 @@
package com.ruoyi.personnel.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.core.domain.entity.DepartmentDto;
import com.ruoyi.common.core.domain.entity.DepartmentLims;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.personnel.dto.PersonBasicInfoDto;
import com.ruoyi.personnel.dto.PersonBasicInfoWorkDto;
import com.ruoyi.personnel.dto.UserPageDto;
import com.ruoyi.personnel.mapper.AnnexMapper;
import com.ruoyi.personnel.mapper.PersonBasicInfoFileMapper;
import com.ruoyi.personnel.mapper.PersonBasicInfoMapper;
import com.ruoyi.personnel.mapper.PersonBasicInfoWorkMapper;
import com.ruoyi.personnel.pojo.Annex;
import com.ruoyi.personnel.pojo.PersonBasicInfo;
import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
import com.ruoyi.personnel.service.PersonBasicInfoService;
import com.ruoyi.system.mapper.DepartmentLimsMapper;
import com.ruoyi.system.mapper.UserMapper;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-08-30 09:19:57
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class PersonBasicInfoServiceImpl extends ServiceImpl<PersonBasicInfoMapper, PersonBasicInfo> implements PersonBasicInfoService {
    @Autowired
    private DepartmentLimsMapper departmentMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Value("${wordUrl}")
    private String wordUrl;
    @Resource
    private UserMapper userMapper;
    @Resource
    private AnnexMapper annexMapper;
    @Resource
    private PersonBasicInfoFileMapper personBasicInfoFileMapper;
    @Resource
    private PersonBasicInfoWorkMapper personBasicInfoWorkMapper;
    @Override
    public List<DepartmentDto> selectCNSAPersonTree() {
        List<DepartmentDto> departments = departmentMapper.selectDepartment();
        List<DepartmentDto> limsUser = baseMapper.selectLimsUser();
        departments.addAll(limsUser);
        //获取父节点
        return departments.stream().filter(m -> m.getFatherId() == null).peek(
                (m) -> m.setChildren(getChildren(m, departments))
        ).collect(Collectors.toList());
    }
    @Override
    public Map<String,Object> getCNASPersonnelInfo(Integer userId) {
        Map<String, Object> map = new HashMap<>();
        Map<Integer,List<DepartmentLims>>  childrenMap = new HashMap<>();
        List<DepartmentLims> deptS = departmentMapper.selectList(null);
        for (DepartmentLims dept : deptS) {
            if(!Objects.isNull(dept.getFatherId())) {
                if(!childrenMap.containsKey(dept.getFatherId())) {
                        childrenMap.put(dept.getFatherId(),new ArrayList<>());
                }
                childrenMap.get(dept.getFatherId()).add(dept);
            }
        }
        // çˆ¶èŠ‚ç‚¹
        List<DepartmentLims> deptF = new ArrayList<>();
        for (DepartmentLims dept : deptS) {
            if(Objects.isNull(dept.getFatherId())) {
                deptF.add(buildTree(dept,childrenMap));
            }
        }
        map.put("department",deptF);
        map.put("PersonBasicInfoDto",baseMapper.getCNASPersonnelInfo(userId));
        map.put("annexList",annexMapper.selectList(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId,userId)));
        return map;
    }
    private DepartmentLims buildTree(DepartmentLims departmentLims, Map<Integer,List<DepartmentLims>> childrenMap) {
        if(childrenMap.containsKey(departmentLims.getId())) {
            departmentLims.setChildren(childrenMap.get(departmentLims.getId()));
            for (DepartmentLims departmentLims1 : departmentLims.getChildren()) {
                buildTree(departmentLims1,childrenMap);
            }
        }
        return departmentLims;
    }
    @Override
    public void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto) {
        User user = new User();
        user.setId(personBasicInfoDto.getUserId());
        user.setAccount(personBasicInfoDto.getAccount());
        user.setName(personBasicInfoDto.getName());
        user.setNameEn(personBasicInfoDto.getNameEn());
        user.setAge(personBasicInfoDto.getAge());
        user.setPhone(personBasicInfoDto.getPhone());
        user.setEmail(personBasicInfoDto.getEmail());
        user.setSignatureUrl(personBasicInfoDto.getSignatureUrl());
        user.setPictureUrl(personBasicInfoDto.getPictureUrl());
        user.setDepartLimsId(personBasicInfoDto.getDepartLimsId());
        userMapper.updateById(user);
        PersonBasicInfo personBasicInfo = JSONObject.parseObject(JSON.toJSONString(personBasicInfoDto), PersonBasicInfo.class);
        PersonBasicInfo one = baseMapper.selectOne(new LambdaQueryWrapper<PersonBasicInfo>()
                .eq(PersonBasicInfo::getUserId, personBasicInfoDto.getUserId()));
        if(Objects.isNull(one)) {
            baseMapper.insert(personBasicInfo);
        }else {
            baseMapper.updateById(personBasicInfo);
        }
    }
    @Override
    public IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId) {
        return baseMapper.selectPersonBasecInfoAndUser(page, name, departmentId);
    }
    @Override
    public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception {
        ArrayList<PersonBasicInfoDto> data = new ArrayList<>();
        List<User> list = userMapper.selectList(null);
        for (User user : list) {
            PersonBasicInfoDto personBasicInfoDto = new PersonBasicInfoDto();
            PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId()));
            if (ObjectUtils.isNotEmpty(personBasicInfo)) {
                BeanUtils.copyProperties(personBasicInfo, personBasicInfoDto);
            }
            personBasicInfoDto.setName(user.getName());
            personBasicInfoDto.setAccount(user.getAccount());
            personBasicInfoDto.setPhone(ObjectUtils.isNotEmpty(user.getPhone()) ? user.getPhone() : " ");
            data.add(personBasicInfoDto);
        }
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        String fileName = URLEncoder.encode("人员基本信息列表导出", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        try {
            // æ–°å»ºExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            WriteSheet mainSheet = EasyExcel.writerSheet(0, "人员基本信息导出").head(PersonBasicInfoDto.class).build();
            excelWriter.write(data, mainSheet);
            // å…³é—­æµ
            excelWriter.finish();
        } catch (IOException e) {
            throw new RuntimeException("导出失败");
        }
    }
    @Override
    public String exportPersonBasicInfoById(Integer id, HttpServletResponse response) {
        Map<String, Object> userMap = baseMapper.selectexportPersonBasic(id);
        User user = userMapper.selectById(id);
        PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId()));
        if (ObjectUtils.isEmpty(personBasicInfo)){
            throw new ErrorException("该用户的基本信息没有录入,暂无法导出");
        }
        // è¯ä»¶
        List<Annex> annexList = annexMapper.selectList(Wrappers.<Annex>lambdaQuery()
                .eq(Annex::getUserId, id));
        // å·¥ä½œç»åކ
        List<PersonBasicInfoWork> personBasicInfoWorks = personBasicInfoWorkMapper.selectList(Wrappers.<PersonBasicInfoWork>lambdaQuery()
                .eq(PersonBasicInfoWork::getUserId, id));
        List<PersonBasicInfoWorkDto> workList = personBasicInfoWorks.stream().map(basicInfoWork -> {
            PersonBasicInfoWorkDto personBasicInfoWorkDto = new PersonBasicInfoWorkDto();
            personBasicInfoWorkDto.setWorkExperience(basicInfoWork.getWorkExperience());
            personBasicInfoWorkDto.setFill("主要工作经历\nMain work experience∑1");
            return personBasicInfoWorkDto;
        }).collect(Collectors.toList());
        // æ£€æŸ¥åˆ—表长度并填充空对象
        while (annexList.size() < 10) {
            annexList.add(new Annex());
        }
        // æ£€æŸ¥åˆ—表长度并填充空对象
        while (workList.size() < 4) {
            workList.add(new PersonBasicInfoWorkDto());
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/person-basic-info.docx");
        Configure configure = Configure.builder()
                .bind("annexList", new HackLoopTableRenderPolicy())
                .bind("workList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("user", userMap);
                    put("annexList", annexList);
                    put("workList", workList);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    userMap.get("name") + "人员档案", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
        return null;
    }
    /**
     * äººå‘˜åŸ¹è®­åŸºæœ¬ä¿¡æ¯é™„件新增
     * @param userId
     * @param file
     * @return
     */
    @Override
    public boolean uploadBasicInfoFile(Integer userId, MultipartFile file) {
        if (userId == null) {
            throw new ErrorException("缺少人员id");
        }
        String urlString;
        String pathName;
        String path;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        PersonBasicInfoFile personBasicInfoFile = new PersonBasicInfoFile();
        personBasicInfoFile.setUserId(userId);
        personBasicInfoFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // æ˜¯å›¾ç‰‡
            path = imgUrl;
            personBasicInfoFile.setType(1);
        } else {
            // æ˜¯æ–‡ä»¶
            path = wordUrl;
            personBasicInfoFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            personBasicInfoFile.setFileUrl(pathName);
            personBasicInfoFileMapper.insert(personBasicInfoFile);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("附件上传错误");
            return false;
        }
    }
    /**
     * é€’归查询子节点
     * @param root  æ ¹èŠ‚ç‚¹
     * @param all   æ‰€æœ‰èŠ‚ç‚¹
     * @return æ ¹èŠ‚ç‚¹ä¿¡æ¯
     */
    private List<DepartmentDto> getChildren(DepartmentDto root, List<DepartmentDto> all) {
        if (ObjectUtils.isNotEmpty(root.getId())) {
            return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek(
                    (m) -> m.setChildren(getChildren(m, all))
            ).collect(Collectors.toList());
        } else {
            return Collections.emptyList();
        }
    }
    // æ°´å¹³åˆå¹¶å•元格
    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
        for (int i = fromCol; i <= toCol; i++) {
            if (i == fromCol) {
                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
            } else {
                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
            }
        }
    }
    // åž‚直合并单元格
    private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
        for (int i = fromRow; i <= toRow; i++) {
            if (i == fromRow) {
                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
            } else {
                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
            }
        }
    }
}
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 {
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonCommunicationAbilityServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
package com.ruoyi.personnel.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.personnel.dto.PersonCommunicationAbilityDto;
import com.ruoyi.personnel.mapper.PersonCommunicationAbilityMapper;
import com.ruoyi.personnel.pojo.PersonCommunicationAbility;
import com.ruoyi.personnel.service.PersonCommunicationAbilityService;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
 * æ²Ÿé€šèƒ½åŠ› æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 12:00:57
 */
@Service
public class PersonCommunicationAbilityServiceImpl extends ServiceImpl<PersonCommunicationAbilityMapper, PersonCommunicationAbility> implements PersonCommunicationAbilityService {
    @Resource
    private UserMapper userMapper;
    @Override
    public IPage<PersonCommunicationAbilityDto> personPersonCommunicationAbilityPage(Page page, Integer departLimsId, Integer userId, String userName) {
        IPage<PersonCommunicationAbilityDto> personCommunicationAbilityDtoIPage = baseMapper.personPersonCommunicationAbilityPage(page, departLimsId, userId, userName);
        List<PersonCommunicationAbilityDto> collect = personCommunicationAbilityDtoIPage.getRecords().stream().map(personCommunicationAbilityDto -> {
            if (ObjectUtils.isNotEmpty(personCommunicationAbilityDto.getUserId())) {
                List<String> account = new ArrayList<>();
                List<String> name = new ArrayList<>();
                for (String s : personCommunicationAbilityDto.getUserId().split(",")) {
                    User user = userMapper.selectById(Integer.parseInt(s));
                    account.add(user.getAccount());
                    name.add(user.getName());
                }
                personCommunicationAbilityDto.setAccount(account.stream().collect(Collectors.joining(",")));
                personCommunicationAbilityDto.setUserName(name.stream().collect(Collectors.joining(",")));
            }
            return personCommunicationAbilityDto;  // è¿™é‡Œå¯ä»¥å¯¹è¿”回的数据进行处理,如添加一些新的属性或转换等。
        }).collect(Collectors.toList());
        personCommunicationAbilityDtoIPage.setRecords(collect);
        return personCommunicationAbilityDtoIPage;
    }
    @Override
    public void exportPersonCommunicationAbility(Integer id, HttpServletResponse response) throws Exception {
        PersonCommunicationAbility personCommunicationAbility = baseMapper.selectById(id);
        //沟通人
        String collect = " ";
        if (ObjectUtils.isNotEmpty(personCommunicationAbility.getUserId())) {
            List<String> name = new ArrayList<>();
            for (String s : personCommunicationAbility.getUserId().split(",")) {
                User user = userMapper.selectById(Integer.parseInt(s));
                name.add(user.getName());
            }
            collect = name.stream().collect(Collectors.joining(","));
        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
        //时间
        String communicationTime = "";
        if (ObjectUtils.isNotEmpty(personCommunicationAbility.getCommunicationTime())) {
            communicationTime = personCommunicationAbility.getCommunicationTime().format(formatter);
        }
        InputStream inputStream = this.getClass().getResourceAsStream("/static/communication-deal.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        String finalCollect = collect;
        String finalCommunicationTime = communicationTime;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("userName", finalCollect);
                    put("communicationTime", finalCommunicationTime);
                    put("communicationPlace", personCommunicationAbility.getCommunicationPlace());
                    put("communicationContent", personCommunicationAbility.getCommunicationContent());
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "沟通记录", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
package com.ruoyi.personnel.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
import com.ruoyi.personnel.mapper.PersonJobResponsibilitiesMapper;
import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
import com.ruoyi.personnel.service.PersonJobResponsibilitiesService;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
/**
 * <p>
 * å²—位职责 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 02:07:49
 */
@Service
@AllArgsConstructor
public class PersonJobResponsibilitiesServiceImpl extends ServiceImpl<PersonJobResponsibilitiesMapper, PersonJobResponsibilities> implements PersonJobResponsibilitiesService {
    @Resource
    private UserMapper userMapper;
    @Override
    public IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
        return baseMapper.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
    }
    @Override
    public void exportPersonJobResponsibilities(Integer id, HttpServletResponse response) {
        PersonJobResponsibilities personJobResponsibilities = baseMapper.selectById(id);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
        //岗位名称
        String name = personJobResponsibilities.getPostName();
        //所属部门
        String departLims = userMapper.selectUserDepartmentLimsName(Integer.parseInt(personJobResponsibilities.getIncumbentId()));
        //工作目标
        String objective = personJobResponsibilities.getJobObjective();
        //岗位职责
        String responsibilities = personJobResponsibilities.getJobResponsibilities();
        //任职人
        User user = userMapper.selectById(Integer.parseInt(personJobResponsibilities.getIncumbentId()));
        String incumbent = user.getName();
        //任职时间
        String incumbentDate = "";
        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getIncumbentDate())) {
            incumbentDate = personJobResponsibilities.getIncumbentDate().format(formatter);
        }
        //主管
        String supervisor = "";
        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getSupervisorId())) {
            supervisor = userMapper.selectById(personJobResponsibilities.getSupervisorId()).getName();
        }
        //主管时间
        String supervisorDate = "";
        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getSupervisorDate())) {
            supervisorDate = personJobResponsibilities.getSupervisorDate().format(formatter);
        }
        InputStream inputStream = this.getClass().getResourceAsStream("/static/explain-deal.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        String finalIncumbentDate = incumbentDate;
        String finalSupervisor = supervisor;
        String finalSupervisorDate = supervisorDate;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("name", name);
                    put("account", user.getAccount());
                    put("departLims", departLims);
                    put("objective", objective);
                    put("responsibilities", responsibilities);
                    put("incumbent", incumbent);
                    put("incumbentDate", finalIncumbentDate);
                    put("supervisor", finalSupervisor);
                    put("supervisorDate", finalSupervisorDate);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    name + "的任职岗位说明书", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPersonnelCapacityServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,158 @@
package com.ruoyi.personnel.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.core.domain.entity.InformationNotification;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.DateImageUtil;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.personnel.dto.PersonPersonnelCapacityDto;
import com.ruoyi.personnel.dto.PersonPersonnelCapacityExportDto;
import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
import com.ruoyi.personnel.mapper.PersonPersonnelCapacityMapper;
import com.ruoyi.personnel.service.PersonPersonnelCapacityService;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.InformationNotificationService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
/**
 * <p>
 * äººå‘˜èƒ½åŠ› æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-10 11:26:18
 */
@Service
public class PersonPersonnelCapacityServiceImpl extends ServiceImpl<PersonPersonnelCapacityMapper, PersonPersonnelCapacity> implements PersonPersonnelCapacityService {
    @Resource
    private UserMapper userMapper;
    @Resource
    private InformationNotificationService informationNotificationService;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Value("${file.path}")
    private String imgUrl;
    @Override
    public IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName) {
        return baseMapper.personPersonnelCapacityPage(page, departLimsId, userId, userName);
    }
    /**
     * å¯¼å‡ºäººå‘˜èƒ½åŠ›
     * @param id
     * @param response
     */
    @Override
    public void exportPersonnelCapacity(Integer id, HttpServletResponse response) {
        PersonPersonnelCapacityExportDto capacityExportDto = baseMapper.selectExportPersonnelCapacity(id);
        // ç¡®è®¤äºº
        String confirmUrl = null;
        if (capacityExportDto.getConfirmOperatingPersonnelId() != null) {
            confirmUrl = userMapper.selectById(capacityExportDto.getConfirmOperatingPersonnelId()).getSignatureUrl();
            if (StringUtils.isBlank(confirmUrl)) {
                throw new ErrorException("缺少确认人签名");
            }
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/personnel-capacity.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        String finalConfirmUrl = confirmUrl;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("capacity", capacityExportDto);
                    put("confirmUrl", StringUtils.isNotBlank(finalConfirmUrl) ? Pictures.ofLocal(imgUrl + "/" + finalConfirmUrl).create() : null);
                    put("confirmDateUrl", capacityExportDto.getConfirmDate() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(capacityExportDto.getConfirmDate())).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "人员能力", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /**
     * æäº¤ç¡®è®¤äººå‘˜èƒ½åŠ›
     * @param personPersonnelCapacity
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void submitConfirmPersonnelCapability(PersonPersonnelCapacity personPersonnelCapacity) {
        if (personPersonnelCapacity.getConfirmOperatingPersonnelId() == null) {
            throw new ErrorException("缺少确认人");
        }
        User formUser = userMapper.selectById(personPersonnelCapacity.getUserId());
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        // æ¶ˆæ¯å‘送
        InformationNotification info = new InformationNotification();
        // å‘送人
        info.setCreateUser(user.getName());
        info.setMessageType("6");
        info.setTheme("CNAS人员能力确认通知");
        info.setContent(formUser.getName() + "的人员能力待确认");
        info.setSenderId(userId);
        // æŽ¥æ”¶äºº
        info.setConsigneeId(personPersonnelCapacity.getConfirmOperatingPersonnelId());
        info.setJumpPath("a6-personnel");
        informationNotificationService.addInformationNotification(info);
        this.saveOrUpdate(personPersonnelCapacity);
        // å‘送企业微信通知
        threadPoolTaskExecutor.execute(() -> {
            // æŸ¥è¯¢æŽ¥æ”¶äºº
            User personnel = userMapper.selectById(personPersonnelCapacity.getConfirmOperatingPersonnelId());
            String message = "";
            message += "CNAS人员能力确认通知";
            message += "\n请去资源管理-人员-人员能力填写";
            message += "\n" + formUser.getName() + "的人员能力待确认";
            //发送企业微信消息通知
            try {
                WxCpUtils.inform(personnel.getAccount(), message, null);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
package com.ruoyi.personnel.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.FilePictureRenderData;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
import com.ruoyi.personnel.mapper.PersonPostAuthorizationRecordMapper;
import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
import com.ruoyi.personnel.service.PersonPostAuthorizationRecordService;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.HashMap;
/**
 * <p>
 * ä»»èŒæŽˆæƒè®°å½• æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-09 10:48:17
 */
@Service
public class PersonPostAuthorizationRecordServiceImpl extends ServiceImpl<PersonPostAuthorizationRecordMapper, PersonPostAuthorizationRecord> implements PersonPostAuthorizationRecordService {
    @Resource
    private UserMapper userMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Override
    public IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page, Integer departLimsId, Integer userId, String userName) {
        return baseMapper.personPostAuthorizationRecordPage(page, departLimsId, userId, userName);
    }
    @Override
    public void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response) {
        PersonPostAuthorizationRecord personPostAuthorizationRecord = baseMapper.selectById(id);
        //姓名
        User user = userMapper.selectById(personPostAuthorizationRecord.getUserId());
        String name = user.getName();
        //todo: äººå‘˜ä»»èŒæŽˆæƒè®°å½•姓名英文
//        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
//        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
//        StringBuilder pinyinBuilder = new StringBuilder();
//        for (int i = 0; i < name.length(); i++) {
//            char c = name.charAt(i);
//            // åˆ¤æ–­æ˜¯å¦æ˜¯æ±‰å­—
//            if (Character.toString(c).matches("[\\u4E00-\\u9FFF]")) {
//                // èŽ·å–æ±‰å­—çš„æ‹¼éŸ³æ•°ç»„
//                String[] pinyinArray = new String[0];
//                try {
//                    pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
//                } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
//
//                }
//                if (pinyinArray!= null && pinyinArray.length > 0) {
//                    pinyinBuilder.append(pinyinArray[0]);
//                }
//            } else {
//                pinyinBuilder.append(c);
//            }
//        }
//        String nameEn = pinyinBuilder.toString();
        String nameEn = user.getNameEn();
        //理论知识考试成绩
        String num1=personPostAuthorizationRecord.getNum1();
        //操作技能考试成绩
        String num2=personPostAuthorizationRecord.getNum2();
        //证书编号
        String code = personPostAuthorizationRecord.getCertificateNumber();
        //发证时间
        LocalDateTime createTime = personPostAuthorizationRecord.getCreateTime();
        String year = createTime.getYear() + "";
        String mon = createTime.getMonth().getValue() + "";
        String day = createTime.getDayOfMonth() + "";
        //个人照片
        if (ObjectUtils.isEmpty(user.getPictureUrl())) {
            throw new ErrorException(name+"的个人照片没有上传");
        }
        String pictureUrl = user.getPictureUrl();
        InputStream inputStream = this.getClass().getResourceAsStream("/static/credentials-deal.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("name", name);
                    put("nameEn", nameEn);
                    put("num1", num1);
                    put("num2", num2);
                    put("code", code);
                    put("year", year);
                    put("mon", mon);
                    put("day", day);
                    put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + pictureUrl));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    name+"的岗位职业资格正式", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
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);
    }
}
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);
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
package com.ruoyi.personnel.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.core.domain.entity.InformationNotification;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.personnel.dto.PersonTrainingRecordDto;
import com.ruoyi.personnel.dto.PersonTrainingRecordListDto;
import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto;
import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
import com.ruoyi.personnel.mapper.PersonTrainingRecordMapper;
import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
import com.ruoyi.personnel.pojo.PersonTrainingRecord;
import com.ruoyi.personnel.service.PersonTrainingDetailedService;
import com.ruoyi.personnel.service.PersonTrainingRecordService;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.InformationNotificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 * åŸ¹è®­è®°å½• æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-12 04:50:48
 */
@Transactional(rollbackFor = Exception.class)
@Service
public class PersonTrainingRecordServiceImpl extends ServiceImpl<PersonTrainingRecordMapper, PersonTrainingRecord> implements PersonTrainingRecordService {
    @Autowired
    private PersonTrainingDetailedService personTrainingDetailedService;
    @Resource
    private InformationNotificationService informationNotificationService;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Resource
    private UserMapper userMapper;
    @Override
    public List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName) {
        return baseMapper.trainingAndAssessmentRecordsPage(trainingDetailedId, userName);
    }
    @Override
    public void deleteTrainingAndAssessmentRecords(String ids) {
        String[] split = ids.split(",");
        if (split.length > 0) {
            for (String s : split) {
                baseMapper.deleteById(s);
            }
        }
    }
    @Override
    public IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId) {
        return baseMapper.personnelTrainingPersonnel(page, userName, userId, departLimsId);
    }
    @Override
    public void claimOfTrainingAndAssessmentRecords(Boolean claimAndClaim, Integer courseId) {
    }
    @Override
    public IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year) {
        return baseMapper.queryPersonnelDetailsOfUserIdAndYear(page, userId, year);
    }
    @Override
    public void exportTrainingRecordAddTrainingDate(Integer userId, Integer trainingDate, HttpServletResponse response) {
        // æŸ¥è¯¢äººå‘˜äººä¿¡æ¯
        PersonTrainingRecordListDto trainingRecordListDto = baseMapper.selectUserTraining(userId);
        // æŸ¥è¯¢åŸ¹è®­è®°å½•
        List<TrainingRecordPersonDetailedDto> personDetailedDtos = baseMapper.selectPersonDetailedDtosByTrainingDate(userId, trainingDate);
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/training-record.docx");
        Configure configure = Configure.builder()
                .bind("personnelDetailsLisat", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("traning", trainingRecordListDto);
                    put("personnelDetailsLisat", personDetailedDtos);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "人员培训记录导出", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /**
     * åŸ¹è®­æäº¤
     * @param personTrainingRecordSubmitDto
     */
    @Override
    public void trainingAndAssessmentRecordsAdded(PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) {
        personTrainingDetailedService.update(Wrappers.<PersonTrainingDetailed>lambdaUpdate()
                .eq(PersonTrainingDetailed::getId, personTrainingRecordSubmitDto.getTrainingDetailedId())
                .set(PersonTrainingDetailed::getAssessmentMethod, personTrainingRecordSubmitDto.getAssessmentMethod())
                .set(PersonTrainingDetailed::getPlaceTraining, personTrainingRecordSubmitDto.getPlaceTraining())
                .set(PersonTrainingDetailed::getOpeningTime, personTrainingRecordSubmitDto.getOpeningTime())
                .set(PersonTrainingDetailed::getAssessmentUserId, personTrainingRecordSubmitDto.getAssessmentUserId())
                .set(PersonTrainingDetailed::getState, personTrainingRecordSubmitDto.getState()));
        // å‘送消息通知
        if (personTrainingRecordSubmitDto.getState().equals(2)) {
            PersonTrainingDetailed personPersonnelCapacity = personTrainingDetailedService.getById(personTrainingRecordSubmitDto.getTrainingDetailedId());
            Integer userId = SecurityUtils.getUserId().intValue();
            User user = userMapper.selectById(userId);
            // æ¶ˆæ¯å‘送
            InformationNotification info = new InformationNotification();
            // å‘送人
            info.setCreateUser(user.getName());
            info.setMessageType("6");
            info.setTheme("CNAS人员培训计划待评价");
            info.setContent("培训内容:" + personPersonnelCapacity.getTrainingContent() + "的人员培训待评价");
            info.setSenderId(userId);
            // æŽ¥æ”¶äºº
            info.setConsigneeId(personTrainingRecordSubmitDto.getAssessmentUserId());
            info.setJumpPath("a6-personnel");
            informationNotificationService.addInformationNotification(info);
            // å‘送企业微信通知
            threadPoolTaskExecutor.execute(() -> {
                // æŸ¥è¯¢æŽ¥æ”¶äºº
                User personnel = userMapper.selectById(personTrainingRecordSubmitDto.getAssessmentUserId());
                String message = "";
                message += "CNAS人员培训计划待评价";
                message += "\n请去资源管理-人员-人员培训计划";
                message += "\n" + "培训内容:" + personPersonnelCapacity.getTrainingContent() + "的人员培训待评价";
                //发送企业微信消息通知
                try {
                    WxCpUtils.inform(personnel.getAccount(), message, null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        }
    }
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,429 @@
package com.ruoyi.personnel.service.impl;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.core.domain.entity.InformationNotification;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.DateImageUtil;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.personnel.dto.PersonTrainingDetailedDto;
import com.ruoyi.personnel.dto.PersonTrainingDto;
import com.ruoyi.personnel.dto.PersonTrainingRecordDto;
import com.ruoyi.personnel.dto.TrainingRecordExportDto;
import com.ruoyi.personnel.excel.PersonTrainingDetailedListener;
import com.ruoyi.personnel.excel.PersonTrainingDetailedUpload;
import com.ruoyi.personnel.mapper.PersonTrainingDetailedFileMapper;
import com.ruoyi.personnel.mapper.PersonTrainingDetailedMapper;
import com.ruoyi.personnel.mapper.PersonTrainingMapper;
import com.ruoyi.personnel.mapper.PersonTrainingRecordMapper;
import com.ruoyi.personnel.pojo.PersonTraining;
import com.ruoyi.personnel.pojo.PersonTrainingDetailed;
import com.ruoyi.personnel.pojo.PersonTrainingDetailedFile;
import com.ruoyi.personnel.service.PersonTrainingDetailedService;
import com.ruoyi.personnel.service.PersonTrainingService;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.InformationNotificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
/**
 * <p>
 * åŸ¹è®­è®¡åˆ’ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-10-11 01:11:49
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class PersonTrainingServiceImpl extends ServiceImpl<PersonTrainingMapper, PersonTraining> implements PersonTrainingService {
    @Autowired
    private PersonTrainingDetailedService personTrainingDetailedService;
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private PersonTrainingDetailedMapper personTrainingDetailedMapper;
    @Autowired
    private PersonTrainingRecordMapper personTrainingRecordMapper;
    @Autowired
    private PersonTrainingDetailedFileMapper personTrainingDetailedFileMapper;
    @Resource
    private InformationNotificationService informationNotificationService;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Value("${file.path}")
    private String imgUrl;
    @Value("${wordUrl}")
    private String wordUrl;
    @Override
    public IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departmentId) {
        return baseMapper.personTrainingSelect(page, compilerName, departmentId);
    }
    @Override
    public void personTrainingImport(MultipartFile file, PersonTraining training) {
        Integer userId = SecurityUtils.getUserId().intValue();
        // å¹´åº¦è®¡åˆ’父级新增数据
        PersonTraining personSupervisePlan = new PersonTraining();
        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
        personSupervisePlan.setFileName(fileName);
        personSupervisePlan.setPlanYear(training.getPlanYear());
        personSupervisePlan.setCompilerId(userId);
        personSupervisePlan.setReviewerId(training.getReviewerId());
        personSupervisePlan.setCompilationDate(LocalDateTime.now());
        baseMapper.insert(personSupervisePlan);
        User user = userMapper.selectById(userId);
        // æ¶ˆæ¯å‘送
        InformationNotification info = new InformationNotification();
        // å‘送人
        info.setCreateUser(user.getName());
        info.setMessageType("6");
        info.setTheme("CNAS培训计划审核通知");
        info.setContent("您有一条培训计划待审核");
        info.setSenderId(userId);
        // æŽ¥æ”¶äºº
        info.setConsigneeId(training.getApproverId());
        info.setJumpPath("a6-personnel");
        informationNotificationService.addInformationNotification(info);
        // å‘送企业微信通知
        threadPoolTaskExecutor.execute(() -> {
            // æŸ¥è¯¢æŽ¥æ”¶äºº
            User personnel = userMapper.selectById(training.getApproverId());
            String message = "";
            message += "CNAS培训计划审核通知";
            message += "\n请去资源管理-人员-培训计划填写";
            message += "\n" + fileName + "的培训计划待审核";
            //发送企业微信消息通知
            try {
                WxCpUtils.inform(personnel.getAccount(), message, null);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
        // å¹´åº¦è®¡åˆ’详情 æ–°å¢ž
        try {
            PersonTrainingDetailedListener personSupervisePlanDetailsListener = new PersonTrainingDetailedListener(personTrainingDetailedService);
            personSupervisePlanDetailsListener.setPlanId(personSupervisePlan.getId());
            EasyExcel.read(file.getInputStream(), PersonTrainingDetailedUpload.class, personSupervisePlanDetailsListener).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void personTrainingDelete(Integer id) {
        personTrainingDetailedService.remove(Wrappers.<PersonTrainingDetailed>lambdaQuery()
                .eq(PersonTrainingDetailed::getPlanId, id));
        baseMapper.deleteById(id);
    }
    @Override
    public void reviewAnnualPersonnelTraining(PersonTraining training) {
        PersonTraining personTraining = new PersonTraining();
        personTraining.setId(training.getId());
        personTraining.setApproverId(training.getApproverId());// æ·»åŠ æ‰¹å‡†äºº
        personTraining.setAuditDate(LocalDateTime.now());
        personTraining.setAuditRemarks(training.getAuditRemarks());
        personTraining.setReviewerStatus(training.getReviewerStatus());
        PersonTraining old = baseMapper.selectById(training.getId());
        // æ¶ˆæ¯å‘送
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        InformationNotification info = new InformationNotification();
        // å‘送人
        info.setCreateUser(user.getName());
        info.setMessageType("6");
        info.setTheme("CNAS培训计划审核通知");
        info.setContent("您有一条培训计划待批准");
        info.setSenderId(userId);
        // æŽ¥æ”¶äºº
        info.setConsigneeId(training.getApproverId());
        info.setJumpPath("a6-personnel");
        informationNotificationService.addInformationNotification(info);
        // å‘送企业微信通知
        threadPoolTaskExecutor.execute(() -> {
            // æŸ¥è¯¢æŽ¥æ”¶äºº
            User personnel = userMapper.selectById(training.getApproverId());
            String message = "";
            message += "CNAS培训计划批准通知";
            message += "\n请去资源管理-人员-培训计划填写";
            message += "\n" + old.getFileName() + "的培训计划待批准";
            //发送企业微信消息通知
            try {
                WxCpUtils.inform(personnel.getAccount(), message, null);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
        baseMapper.updateById(personTraining);
    }
    @Override
    public void approveAnnualPersonnelTraining(PersonTraining training) {
        LambdaUpdateWrapper<PersonTraining> wrapper = Wrappers.<PersonTraining>lambdaUpdate()
                .eq(PersonTraining::getId, training.getId())
                .set(PersonTraining::getApprovalDate, LocalDateTime.now())
                .set(PersonTraining::getApprovalRemarks, training.getApprovalRemarks())
                .set(PersonTraining::getApprovalStatus, training.getApprovalStatus());
        baseMapper.update(new PersonTraining(), wrapper);
    }
    /**
     * å¯¼å‡ºäººå‘˜åŸ¹è®­è®¡åˆ’
     * @param id
     * @param response
     */
    @Override
    public void exportPersonTraining(Integer id, HttpServletResponse response) {
        // æŸ¥è¯¢è¯¦æƒ…
        PersonTraining personTraining = baseMapper.selectById(id);
        //获取提交人的签名地址
        String writeUrl = userMapper.selectById(personTraining.getCompilerId()).getSignatureUrl();
        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
            throw new ErrorException("找不到检验人的签名");
        }
        //获取复核人的签名地址
        String examineUrl = null;
        if (personTraining.getReviewerId() != null) {
            examineUrl = userMapper.selectById(personTraining.getReviewerId()).getSignatureUrl();
            if (StringUtils.isBlank(examineUrl)) {
                throw new ErrorException("找不到复核人的签名");
            }
        }
        //获取批准人的签名地址
        String ratifyUrl = null;
        if (personTraining.getApproverId() != null) {
            ratifyUrl = userMapper.selectById(personTraining.getApproverId()).getSignatureUrl();
            if (StringUtils.isBlank(ratifyUrl)) {
                throw new ErrorException("找不到复核人的签名");
            }
        }
        // æŸ¥è¯¢è¯¦æƒ…
        List<PersonTrainingDetailedDto> detailedDtos = personTrainingDetailedMapper.selectTrainingList(id);
        int index = 1;
        for (PersonTrainingDetailedDto detailedDto : detailedDtos) {
            detailedDto.setTrainingDateString(detailedDto.getTrainingDate());
            detailedDto.setIndex(index);
            index++;
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/person-training.docx");
        String finalExamineUrl = examineUrl;
        String finalRatifyUrl = ratifyUrl;
        Configure configure = Configure.builder()
                .bind("trainingDetailedList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("year", personTraining.getPlanYear());
                    put("trainingDetailedList", detailedDtos);
                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
                    put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
                    put("writeDateUrl", personTraining.getCompilationDate() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getCompilationDate())).create() : null);
                    put("examineDateUrl", personTraining.getAuditDate() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getAuditDate())).create() : null);
                    put("ratifyDateUrl", personTraining.getApprovalDate() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getApprovalDate())).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "人员培训计划导出", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /**
     * å¯¼å‡ºäººå‘˜åŸ¹è®­ä¸Žè€ƒæ ¸è®°å½•
     * @param id
     * @param response
     */
    @Override
    public void exportPersonTrainingRecord(Integer id, HttpServletResponse response) {
        // æŸ¥è¯¢äººå‘˜åŸ¹è®­æ˜Žç»†
        PersonTrainingDetailedDto detailedDto = personTrainingDetailedMapper.selectTrainingDetail(id);
        // æŸ¥è¯¢åŸ¹è®­çš„人员
        List<PersonTrainingRecordDto> recordDtos = personTrainingRecordMapper.selectListByTrainingDetailedId(id);
        List<TrainingRecordExportDto> exportDtoList = new ArrayList<>();
        TrainingRecordExportDto exportDto = new TrainingRecordExportDto();
        int count = 0;
        for (PersonTrainingRecordDto recordDto : recordDtos) {
            switch (count) {
                case 0:
                    exportDto.setUserName1(recordDto.getUserName());
                    exportDto.setDepartment1(recordDto.getDepartment());
                    exportDto.setExaminationResults1(recordDto.getExaminationResults());
                    count ++;
                    break;
                case 1:
                    exportDto.setUserName2(recordDto.getUserName());
                    exportDto.setDepartment2(recordDto.getDepartment());
                    exportDto.setExaminationResults2(recordDto.getExaminationResults());
                    exportDtoList.add(exportDto);
                    exportDto = new TrainingRecordExportDto();
                    count = 0;
                    break;
            }
        }
        exportDtoList.add(exportDto);
        // è´¨é‡è´Ÿè´£äºº
        String assessmentUserUrl = null;
        if (detailedDto.getAssessmentUserId() != null) {
            assessmentUserUrl = userMapper.selectById(detailedDto.getAssessmentUserId()).getSignatureUrl();
            if (StringUtils.isBlank(assessmentUserUrl)) {
                throw new ErrorException("找不到评价人的签名");
            }
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/person-training-record.docx");
        Configure configure = Configure.builder()
                .bind("trainingRecordsList", new HackLoopTableRenderPolicy())
                .build();
        String finalAssessmentUserUrl = assessmentUserUrl;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("trainingDetail", detailedDto);
                    put("trainingRecordsList", exportDtoList);
                    put("assessmentUserUrl", StringUtils.isNotBlank(finalAssessmentUserUrl) ? Pictures.ofLocal(imgUrl + "/" + finalAssessmentUserUrl).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "培训与考核记录导出", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /**
     * äººå‘˜åŸ¹è®­è¯¦æƒ…附件新增
     * @param trainingDetailedId
     * @param file
     * @return
     */
    @Override
    public boolean uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file) {
        if (trainingDetailedId == null) {
            throw new ErrorException("缺少验收id");
        }
        String urlString;
        String pathName;
        String path;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        PersonTrainingDetailedFile detailedFile = new PersonTrainingDetailedFile();
        detailedFile.setTrainingDetailedId(trainingDetailedId);
        detailedFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // æ˜¯å›¾ç‰‡
            path = imgUrl;
            detailedFile.setType(1);
        } else {
            // æ˜¯æ–‡ä»¶
            path = wordUrl;
            detailedFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            detailedFile.setFileUrl(pathName);
            personTrainingDetailedFileMapper.insert(detailedFile);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("附件上传错误");
            return false;
        }
    }
    /**
     * æŸ¥è¯¢ä»Šå¹´äººå‘˜åŸ¹è®­ä¿¡æ¯
     * @return
     */
    @Override
    public List<PersonTrainingDetailed> getThisYearTrainingDetailed() {
        return personTrainingDetailedMapper.getThisYearTrainingDetailed();
    }
}
cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.personnel.mapper.PersonBasicInfoMapper">
    <select id="selectLimsUser" resultType="com.ruoyi.common.core.domain.entity.DepartmentDto">
        SELECT u.id userId, u.name, SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1) AS fatherId
        FROM user u
        where u.is_custom = 0
          and u.depart_lims_id is not null
          and u.depart_lims_id != ''
    </select>
    <select id="getCNASPersonnelInfo" resultType="com.ruoyi.personnel.dto.PersonBasicInfoDto">
        SELECT *
        FROM user u
                 left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
        where u.id = #{userId}
    </select>
    <select id="selectPersonBasecInfoAndUser" resultType="java.util.Map">
        select
            u.id  userId,
            u.`name`  name,
            u.account account,
            DATE_FORMAT(cpbi.group_time, '%Y-%m-%d') groupTime,
            cpbi.native_place nativePlace,
            cpbi.identity_card identityCard,
            cpbi.id_address idAddress,
            u.phone telephone,
            cpbi.graduated_institutions1 graduatedInstitutions1,
            cpbi.major1 major1,
            DATE_FORMAT(cpbi.graduation_time1, '%Y-%m-%d')  graduationTime1,
            cpbi.official_academic_redentials officialAcademicRedentials,
            cpbi.highest_degree highestDegree,
            cpbi.professional_title professionalTitle
        from user u
                 left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
                 left join user u1 on u1.id = u.create_user
        <where>
            FIND_IN_SET(#{departmentId},u.depart_lims_id)
            <if test="name != null and name != ''">
                and u.name like concat('%',#{name},'%')
            </if>
        </where>
    </select>
    <!-- å¯¼å‡ºæŸ¥è¯¢äººå‘˜ä¿¡æ¯ -->
    <select id="selectexportPersonBasic" resultType="java.util.Map">
        select DATE_FORMAT(cpbi.last_update_time, '%Yå¹´%m月%d日') lastUpdateTimeString,
               u.account,
               u.`name`,
               cpbi.sex,
               cpbi.post_name postName,
               u.age,
               DATE_FORMAT(cpbi.working_time, '%Yå¹´%m月')   workingTimeString,
               cpbi.major1,
               DATE_FORMAT(cpbi.graduation_time1, '%Yå¹´%m月')   graduationTime1string,
               cpbi.official_academic_redentials officialAcademicRedentials,
               cpbi.graduated_institutions1 graduatedInstitutions1,
               cpbi.remarks
        from user u
                 left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
        where u.id = #{userId}
    </select>
</mapper>
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>
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>
cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.personnel.mapper.PersonPersonnelCapacityMapper">
    <select id="personPersonnelCapacityPage" resultType="com.ruoyi.personnel.dto.PersonPersonnelCapacityDto">
        select cppc.*,
        u2.name confirm_operating_personnel_name,
        u3.name user_name,
        cpbi.post_name,
        ecp.responsibilities,
        cpbi.professional_title,
        TRIM(',' FROM CONCAT(cpbi.major1, ',', cpbi.major2)) AS major
        from cnas_person_personnel_capacity cppc
        left join user u2 on cppc.confirm_operating_personnel_id = u2.id
        left join user u3 on cppc.user_id = u3.id
        -- å–岗位
        left join cnas_person_basic_info cpbi on cpbi.user_id = cppc.user_id
        -- å–人员能力的岗位职责
        left join (SELECT GROUP_CONCAT(e.label) responsibilities, cppc.id
        from cnas_person_personnel_capacity cppc
        left join enums e on FIND_IN_SET(e.value, cppc.job_responsibilities)
        where e.category = '岗位职责'
        GROUP BY cppc.id) ecp on ecp.id = cppc.id
        <where>
            <if test="userId != null and userId != ''">
                and cppc.user_id = #{userId}
            </if>
            <if test="departLimsId != null and departLimsId != ''">
                and FIND_IN_SET(#{departLimsId}, u3.depart_lims_id)
            </if>
            <if test="userName != null and userName != ''">
                and u3.name like concat('%', #{userName}, '%')
            </if>
        </where>
    </select>
    <!-- æŸ¥è¯¢äººå‘˜èƒ½åŠ›æŽ¥å£ -->
    <select id="selectExportPersonnelCapacity"
            resultType="com.ruoyi.personnel.dto.PersonPersonnelCapacityExportDto">
        select cppc.*,
               cpbi.post_name,
               u1.name   userName,
               cpbi.official_academic_redentials,
               cpbi.major1,
               cpbi.professional_title,
               p.place_work,
               TRIM(',' FROM CONCAT(cpbi.major1, ',', cpbi.major2)) AS major,
               case when cppc.academic_conform_not = 1 then '☑'
                    else '□' end academicConformNot1,-- å­¦åކ
               case when cppc.academic_conform_not = 2 then '☑'
                    else '□' end academicConformNot2,
               case when cppc.academic_conform_not = 3 then '☑'
                    else '□' end academicConformNot3,
               case when cppc.related_years_conform_not = 1 then '☑'
                    else '□' end relatedYearsConformNot1,-- ç›¸å…³å¹´é™
               case when cppc.related_years_conform_not = 2 then '☑'
                    else '□' end relatedYearsConformNot2,
               case when cppc.related_years_conform_not = 3 then '☑'
                    else '□' end relatedYearsConformNot3,
               case when cppc.related_training_conform_not = 1 then '☑'
                    else '□' end relatedTrainingConformNot1,-- ç›¸å…³åŸ¹è®­
               case when cppc.related_training_conform_not = 2 then '☑'
                    else '□' end relatedTrainingConformNot2,
               case when cppc.related_training_conform_not = 3 then '☑'
                    else '□' end relatedTrainingConformNot3,
               case when cppc.relevant_experience_conform_not = 1 then '☑'
                    else '□' end relevantExperienceConformNot1,-- ç›¸å…³ç»éªŒ
               case when cppc.relevant_experience_conform_not = 2 then '☑'
                    else '□' end relevantExperienceConformNot2,
               case when cppc.relevant_experience_conform_not = 3 then '☑'
                    else '□' end relevantExperienceConformNot3,
               case when cppc.work_license_conform_not = 1 then '☑'
                    else '□' end workLicenseConformNot1,-- ä¸Šå²—证
               case when cppc.work_license_conform_not = 2 then '☑'
                    else '□' end workLicenseConformNot2,
               case when cppc.work_license_conform_not = 3 then '☑'
                    else '□' end workLicenseConformNot3,
               case when cppc.job_responsibilities_conform_not = 1 then '☑'
                    else '□' end jobResponsibilitiesConformNot1,-- å²—位职责
               case when cppc.job_responsibilities_conform_not = 2 then '☑'
                    else '□' end jobResponsibilitiesConformNot2,
               case when cppc.job_responsibilities_conform_not = 3 then '☑'
                    else '□' end jobResponsibilitiesConformNot3,
               case when cppc.comprehensive_assessment = 'Qualified this position' then '☑'
                    else '□' end comprehensiveAssessment1,-- ç»¼åˆè¯„ä»·
               case when cppc.comprehensive_assessment = 'You can work while training' then '☑'
                    else '□' end comprehensiveAssessment2,
               case when cppc.comprehensive_assessment = 'Iconpetent for the position' then '☑'
                    else '□' end comprehensiveAssessment3,
               case when find_in_set(1, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities1,
               case when find_in_set(2, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities2,
               case when find_in_set(3, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities3,
               case when find_in_set(4, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities4,
               case when find_in_set(5, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities5,
               case when find_in_set(6, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities6,
               case when find_in_set(7, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities7,
               case when find_in_set(8, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities8,
               case when find_in_set(9, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities9,
               case when find_in_set(10, cppc.job_responsibilities) then '☑'
                    else '□' end jobResponsibilities10
        from cnas_person_personnel_capacity cppc
                 left join user u1 on cppc.user_id = u1.id
                 left join cnas_person_basic_info cpbi on cpbi.user_id = cppc.user_id
                 left join (select GROUP_CONCAT(cptr.work_experience) place_work, cptr.user_id
                            from cnas_person_basic_info_work cptr
                            GROUP BY cptr.user_id) p on u1.id = p.user_id
        where cppc.id = #{id}
    </select>
</mapper>
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>
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>
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>
cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.personnel.mapper.PersonTrainingRecordMapper">
    <select id="trainingAndAssessmentRecordsPage" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordDto">
        select cptr.*, u.account, u.name user_name, u.phone, r.name role_name
        from cnas_person_training_record cptr
                 left join user u on u.id = cptr.user_id
                 left join role r on r.id = u.role_id
        where cptr.course_id = #{trainingDetailedId}
        <if test="userName != null and userName != ''">
            and u.name like concat('%', #{userName}, '%')
        </if>
    </select>
    <select id="personnelTrainingPersonnel" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordListDto">
        select u.name, u.account, dl.name depart_lims_name, cpbi.professional_title,
        cpbi.official_academic_redentials, u.id user_id
        from user u
        left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
        left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1)
        where u.is_custom = 0
        <if test="userName != '' and userName != null and userName != 'null'">
            and u.name like concat('%', #{userName}, '%')
        </if>
        <if test="userId != null and userId != ''">
            and u.id = #{userId}
        </if>
        <if test="departLimsId != null and departLimsId != ''">
            and FIND_IN_SET(#{departLimsId}, u.depart_lims_id)
        </if>
    </select>
    <select id="queryPersonnelDetails" resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto">
        select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks
        from cnas_person_training_record cptr
                 inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
        <where>
            <if test="userId != null and userId != ''">
                and cptr.user_id = #{userId}
            </if>
        </where>
    </select>
    <!-- æ ¹æ®è¯¦æƒ…id查询培训信息 -->
    <select id="selectListByTrainingDetailedId" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordDto">
        select cptr.*,
               u.name  userName,
               dl.name department
        from cnas_person_training_record cptr
                 left join user u on u.id = cptr.user_id
                 left join department_lims dl on find_in_set(dl.id, u.depart_lims_id) and dl.id != 1
        where cptr.course_id = #{trainingDetailedId}
    </select>
    <!-- æ ¹æ®id查询人员信息 -->
    <select id="selectUserTraining" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordListDto">
        select u.name,
               u.account,
               dl.name                                    depart_lims_name,
               cpbi.professional_title,
               cpbi.official_academic_redentials,
               cpbi.unit_time,
               cpbi.major1,
               u.id                                       user_id,
               DATE_FORMAT(cpbi.unit_time, '%Y-%m-%d') AS unitTimeSting
        from user u
                 left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
                 left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1)
        where u.is_custom = 0
        and u.id = #{userId}
    </select>
    <!-- æ ¹æ®ç”¨æˆ·id查询人员记录 -->
    <select id="selectPersonDetailedDtos" resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto">
        select cptd.training_date,
               cptd.training_content,
               cptd.class_hour,
               cptr.examination_results,
               cptd.remarks,
               DATE_FORMAT(cptd.training_date, '%Y-%m-%d') AS trainingDateString
        from cnas_person_training_record cptr
                 inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
            and cptr.user_id = #{userId}
        <where>
            <if test="year!= null and year!= ''">
                and YEAR(cptd.training_date) = ${year}
            </if>
        </where>
    </select>
    <!--根据用户id和年份查询人员明细 åŸ¹è®­è®°å½•-->
    <select id="queryPersonnelDetailsOfUserIdAndYear"
            resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto">
        select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks
        from cnas_person_training_record cptr
        inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
        <where>
            <if test="userId != null and userId != ''">
                and cptr.user_id = #{userId}
            </if>
            <if test="year!= null and year!= ''">
                and YEAR(cptd.training_date) = ${year}
            </if>
        </where>
    </select>
    <!-- æ ¹æ®ç”¨æˆ·id和年份查询人员明细 åŸ¹è®­è®°å½•导出 -->
    <select id="selectPersonDetailedDtosByTrainingDate"
            resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto">
        select cptd.training_date,
        cptd.training_content,
        cptd.class_hour,
        cptr.examination_results,
        cptd.remarks,
        DATE_FORMAT(cptd.training_date, '%Y-%m-%d') AS trainingDateString
        from cnas_person_training_record cptr
        inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
        and cptr.user_id = #{userId}
        <where>
            <if test="year!= null and year!= ''">
                and YEAR(cptd.training_date) = ${year}
            </if>
        </where>
    </select>
</mapper>
cnas-personnel/src/main/resources/static/communication-deal.docx
Binary files differ
cnas-personnel/src/main/resources/static/credentials-deal.docx
Binary files differ
cnas-personnel/src/main/resources/static/explain-deal.docx
Binary files differ
cnas-personnel/src/main/resources/static/person-basic-info.docx
Binary files differ
cnas-personnel/src/main/resources/static/person-training-record.docx
Binary files differ
cnas-personnel/src/main/resources/static/person-training.docx
Binary files differ
cnas-personnel/src/main/resources/static/personnel-capacity.docx
Binary files differ
cnas-personnel/src/main/resources/static/super-vise-plan.docx
Binary files differ
cnas-personnel/src/main/resources/static/supervision-control-sheet.docx
Binary files differ
cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx
Binary files differ
cnas-personnel/src/main/resources/static/supervision-record.docx
Binary files differ
cnas-personnel/src/main/resources/static/training-record.docx
Binary files differ
cnas-process/pom.xml
@@ -25,6 +25,10 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>inspect-server</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>cnas-device</artifactId>
        </dependency>
    </dependencies>
</project>
cnas-process/src/main/java/com/ruoyi/process/controller/InconsistentDistributionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.process.dto.InconsistentDistributionDto;
import com.ruoyi.process.pojo.InconsistentDistribution;
import com.ruoyi.process.service.InconsistentDistributionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * <p>
 * ä¸ç¬¦åˆé¡¹çš„分布 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 09:53:20
 */
@Api(tags = "不符合项的分布")
@AllArgsConstructor
@RestController
@RequestMapping("/inconsistentDistribution")
public class InconsistentDistributionController {
    private InconsistentDistributionService inconsistentDistributionService;
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布分页查询
     * @param
     * @return
     */
    @ApiOperation(value = "不符合项的分布分页查询")
    @GetMapping("/pageInconsistentDistribution")
    public Result<IPage<InconsistentDistributionDto>> pageInconsistentDistribution(Page page, InconsistentDistribution inconsistentDistribution) throws Exception {
        return Result.success(inconsistentDistributionService.pageInconsistentDistribution(page, inconsistentDistribution));
    }
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布新增
     * @return
     */
    @ApiOperation(value = "不符合项的分布新增")
    @PostMapping("/addInconsistentDistribution")
    public Result addInconsistentDistribution(@RequestBody InconsistentDistributionDto inconsistentDistribution){
        return Result.success(inconsistentDistributionService.addInconsistentDistribution(inconsistentDistribution));
    }
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布修改
     * @return
     */
    @ApiOperation(value = "不符合项的分布修改")
    @PostMapping("/updateInconsistentDistribution")
    public Result updateInconsistentDistribution(@RequestBody InconsistentDistributionDto inconsistentDistribution){
        return Result.success(inconsistentDistributionService.updateInconsistentDistribution(inconsistentDistribution));
    }
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布删除
     * @return
     */
    @ApiOperation(value = "不符合项的分布删除")
    @DeleteMapping("/delInconsistentDistribution")
    public Result delInconsistentDistribution(Integer distributionId){
        return Result.success(inconsistentDistributionService.delInconsistentDistribution(distributionId));
    }
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布查看详情
     * @return
     */
    @ApiOperation(value = "不符合项的分布查看详情")
    @GetMapping("/getInconsistentDistributionOne")
    public Result<InconsistentDistributionDto> getInconsistentDistributionOne(Integer distributionId){
        return Result.success(inconsistentDistributionService.getInconsistentDistributionOne(distributionId));
    }
    /**
     * å¯¼å‡ºä¸ç¬¦åˆé¡¹çš„分布
     * @return
     */
    @ApiOperation(value = "导出不符合项的分布")
    @GetMapping("/exportInconsistentDistribution")
    public void exportInconsistentDistribution(Integer distributionId, HttpServletResponse response){
        inconsistentDistributionService.exportInconsistentDistribution(distributionId, response);
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.process.dto.InspectionOrderDto;
import com.ruoyi.process.pojo.InspectionOrder;
import com.ruoyi.process.service.InspectionOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * <p>
 * æ£€éªŒå§”托单 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-09
 */
@Api(tags = "检验委托单")
@AllArgsConstructor
@RestController
@RequestMapping("/inspectionOrder")
public class InspectionOrderController {
    private InspectionOrderService inspectionOrderService;
    /**
     * å§”托单检验分页查询
     * @return
     */
    @ApiOperation(value = "委托单检验分页查询")
    @GetMapping("/pageInspectionOrder")
    public Result<IPage<InspectionOrderDto>> pageInspectionOrder(InspectionOrder inspectionOrder,Page page) throws Exception {
        return Result.success(inspectionOrderService.pageInspectionOrder(page, inspectionOrder));
    }
    /**
     * å§”托单检验新增
     * @return
     */
    @ApiOperation(value = "委托单检验新增")
    @PostMapping("/addInspectionOrder")
    public Result addInspectionOrder(@RequestBody InspectionOrderDto InspectionOrder){
        return Result.success(inspectionOrderService.addInspectionOrder(InspectionOrder));
    }
    /**
     * å§”托单检验修改
     * @return
     */
    @ApiOperation(value = "委托单检验修改")
    @PostMapping("/updateInspectionOrder")
    public Result updateInspectionOrder(@RequestBody InspectionOrderDto InspectionOrder){
        return Result.success(inspectionOrderService.updateInspectionOrder(InspectionOrder));
    }
    /**
     * å§”托单检验删除
     * @return
     */
    @ApiOperation(value = "委托单检验删除")
    @DeleteMapping("/delInspectionOrder")
    public Result delInspectionOrder(Integer inspectionOrderId){
        return Result.success(inspectionOrderService.delInspectionOrder(inspectionOrderId));
    }
    /**
     * å§”托单检验查看详情
     * @return
     */
    @ApiOperation(value = "委托单检验查看详情")
    @GetMapping("/getInspectionOrderOne")
    public Result<InspectionOrderDto> getInspectionOrderOne(Integer inspectionOrderId){
        return Result.success(inspectionOrderService.getInspectionOrderOne(inspectionOrderId));
    }
    /**
     * å§”托单检验查看详情
     * @return
     */
    @ApiOperation(value = "根据成品订单查询委托单详情")
    @GetMapping("/getInspectionOrderByInsOderId")
    public Result<InspectionOrderDto> getInspectionOrderByInsOderId(Integer insOrderId){
        return Result.success(inspectionOrderService.getInspectionOrderByInsOderId(insOrderId));
    }
    /**
     * å§”托单查询成品订单
     * @return
     */
    @ApiOperation(value = "委托单查询成品订单")
    @PostMapping("/getInsOrderOnInspection")
    public Result<IPage<InsOrder>> getInsOrderOnInspection(@RequestBody Map<String, Object> data) throws Exception {
        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
        InsOrder insOrder = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), InsOrder.class);
        return Result.success(inspectionOrderService.getInsOrderOnInspection(page, insOrder));
    }
    /**
     * å§”托单成品报告上传
     * @return
     */
    @ApiOperation(value = "委托单成品报告上传")
    @PostMapping("/uploadInspectionOrderFile")
    public Result uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId) {
        return Result.success(inspectionOrderService.uploadInspectionOrderFile(file, inspectionOrderId));
    }
    /**
     * å¯¼å‡ºæ£€éªŒå§”托单
     * @return
     */
    @ApiOperation(value = "导出检验委托单")
    @GetMapping("/exportInspectionOrder")
    public void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response){
        inspectionOrderService.exportInspectionOrder(inspectionOrderId, response);
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessComplainController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.process.pojo.ProcessComplain;
import com.ruoyi.process.service.ProcessComplainService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * <p>
 * æŠ•诉 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 09:29:11
 */
@RestController
@RequestMapping("/processComplain")
@Api(tags = "投诉")
public class ProcessComplainController {
    @Resource
    private ProcessComplainService processComplainService;
    @ApiOperation(value = "投诉情况汇总表")
    @GetMapping("/pageProcessComplain")
    public Result pageProcessComplain( ProcessComplain processComplain,Page page) throws Exception {
        return Result.success(processComplainService.pageProcessComplain(page, processComplain));
    }
    @ApiOperation(value = "新增投诉")
    @PostMapping("/addProcessComplain")
    public Result addProcessComplain(@RequestBody ProcessComplain processComplain ) {
        return Result.success(processComplainService.addProcessComplain(processComplain));
    }
    @ApiOperation(value = "删除投诉")
    @DeleteMapping("/delProcessComplain")
    public Result delProcessComplain(Long id) {
        return Result.success(processComplainService.removeById(id));
    }
    @ApiOperation(value = "投诉详情")
    @PostMapping("/getProcessComplain")
    public Result getProcessComplain(Long id) {
        return Result.success(processComplainService.getProcessComplain(id));
    }
    @ApiOperation(value = "处理投诉")
    @PostMapping("/doProcessComplain")
    public Result doProcessComplain(@RequestBody ProcessComplain processComplain) {
        return Result.success(processComplainService.doProcessComplain(processComplain));
    }
    @ApiOperation(value = "导出列表")
    @PostMapping("/exportProcessComplain")
    public void exportProcessComplain(@RequestBody Map<String, Object> data,HttpServletResponse response) throws Exception {
        ProcessComplain processComplain = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), ProcessComplain.class);
        processComplainService.exportProcessComplain(processComplain,response);
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessDealController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.process.pojo.ProcessDeal;
import com.ruoyi.process.service.ProcessDealService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 02:50:19
 */
@RestController
@RequestMapping("/processDeal")
@Api(tags = "检测或校准物品的处置")
public class ProcessDealController {
    @Resource
    private ProcessDealService processDealService;
    @ApiOperation(value = "查询检测或校准物品的处置详情")
    @PostMapping("/pageProcessDeal")
    public Result pageProcessDeal(ProcessDeal processDeal, Page page) throws Exception {
        return Result.success(processDealService.pageProcessDeal(page, processDeal));
    }
    @ApiOperation(value = "新增检测或校准物品的处置")
    @PostMapping("/addProcessDeal")
    public Result addProcessDeal(@RequestBody ProcessDeal processDeal) {
        return Result.success(processDealService.addProcessDeal(processDeal));
    }
    @ApiOperation(value = "删除检测或校准物品的处置")
    @DeleteMapping("/delProcessDeal")
    public Result delProcessDeal(Integer id) {
        return Result.success(processDealService.delProcessDeal(id));
    }
    @ApiOperation(value = "修改检测或校准物品的处置")
    @PostMapping("/doProcessDeal")
    public Result doProcessDeal(@RequestBody ProcessDeal processDeal) {
        return Result.success(processDealService.doProcessDeal(processDeal));
    }
    @ApiOperation(value = "查看检测或校准物品的处置")
    @PostMapping("/getProcessDeal")
    public Result getProcessDeal(Integer id) {
        return Result.success(processDealService.getById(id));
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessEvaluateController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.process.pojo.ProcessEvaluate;
import com.ruoyi.process.service.ProcessEvaluateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * <p>
 * æµ‹é‡ä¸ç¡®å®šåº¦çš„评价 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 01:10:43
 */
@RestController
@RequestMapping("/processEvaluate")
@Api(tags = "测量不确定度的评价")
public class ProcessEvaluateController {
    @Resource
    private ProcessEvaluateService processEvaluateService;
    @ApiOperation(value = "查询测量不确定度的评定列表")
    @PostMapping("/pageProcessEvaluate")
    public Result pageProcessEvaluate(ProcessEvaluate processEvaluate,Page page) throws Exception {
        return Result.success(processEvaluateService.pageProcessEvaluate(page, processEvaluate));
    }
    @ApiOperation(value = "新增测量不确定度的评定")
    @PostMapping("/addProcessEvaluate")
    public Result addProcessEvaluate(MultipartFile file){
        return Result.success(processEvaluateService.addProcessEvaluate(file));
    }
    @ApiOperation(value = "评价")
    @PostMapping("/doProcessEvaluate")
    public Result doProcessEvaluate(@RequestBody ProcessEvaluate processEvaluate){
        return Result.success(processEvaluateService.doProcessEvaluate(processEvaluate));
    }
    @ApiOperation(value = "删除测量不确定度的评定")
    @DeleteMapping("/delProcessEvaluate")
    public Result delProcessEvaluate(Long id){
        return Result.success(processEvaluateService.removeById(id));
    }
    @ApiOperation(value = "导出测量不确定度的评定")
    @GetMapping("/exportProcessEvaluate")
    public void exportProcessEvaluate(ProcessEvaluate processEvaluate, HttpServletResponse response) throws Exception{
        processEvaluateService.exportProcessEvaluate(processEvaluate,response);
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.process.dto.ProcessMethodSearchNewArchivedDto;
import com.ruoyi.process.dto.ProcessMethodSearchNewBackupsDto;
import com.ruoyi.process.pojo.ProcessMethodSearchNew;
import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
import com.ruoyi.process.service.ProcessMethodSearchNewService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * æ ‡å‡†æŸ¥æ–°
 *
 * @author zhuo
 * @since 2024-11-04
 */
@Api(tags = "标准查新")
@AllArgsConstructor
@RestController
@RequestMapping("/processMethodSearchNew")
public class ProcessMethodSearchNewController {
    private ProcessMethodSearchNewService processMethodSearchNewService;
    /**
     * æ–°å¢žæ ‡å‡†æŸ¥æ–°
     * @param processMethodSearchNewList
     * @return
     */
    @ApiOperation(value = "新增标准查新")
    @PostMapping("/addMethodSearchNew")
    public Result addMethodSearchNew(@RequestBody List<ProcessMethodSearchNew> processMethodSearchNewList ) {
        return Result.success(processMethodSearchNewService.addMethodSearchNew(processMethodSearchNewList));
    }
    /**
     * ä¿®æ”¹æ ‡å‡†æŸ¥æ–°
     * @param processMethodSearchNew
     * @return
     */
    @ApiOperation(value = "修改标准查新")
    @PostMapping("/updateMethodSearchNew")
    public Result updateMethodSearchNew(@RequestBody ProcessMethodSearchNew processMethodSearchNew ) {
        return Result.success(processMethodSearchNewService.updateById(processMethodSearchNew));
    }
    /**
     * æ ‡å‡†æŸ¥æ–°åˆ—表
     */
    @ApiOperation(value = "标准查新列表")
    @GetMapping("/pageMethodSearchNew")
    public Result<IPage<ProcessMethodSearchNew>> pageMethodSearchNew(ProcessMethodSearchNewBackupsDto processMethodSearchNew,Page page) throws Exception {
        return Result.success(processMethodSearchNewService.pageMethodSearchNew(page, processMethodSearchNew));
    }
    @ApiOperation(value = "标准查新导出")
    @GetMapping("/exportMethodSearchNew")
    public void exportMethodSearchNew(Integer archivedId, HttpServletResponse response) throws Exception {
        processMethodSearchNewService.exportMethodSearchNew(archivedId, response);
    }
    /**
     * å¯¼å…¥æ ‡å‡†æŸ¥æ–°
     * @return
     */
    @ApiOperation(value = "导入标准查新")
    @GetMapping("/importMethodSearchNew")
    public Result importMethodSearchNew(MultipartFile file){
        return Result.success(processMethodSearchNewService.importMethodSearchNew(file));
    }
    /**
     * æ–°å¢žå­˜æ¡£
     * @param archived
     * @return
     */
    @ApiOperation(value = "新增存档")
    @PostMapping("/addSearchNewArchived")
    public Result addSearchNewApprovalProcess(@RequestBody ProcessMethodSearchNewArchived archived) {
        return Result.success(processMethodSearchNewService.addSearchNewArchived(archived));
    }
    /**
     * æ–°å¢žå­˜æ¡£
     * @return
     */
    @ApiOperation(value = "查询存档")
    @GetMapping("/pageSearchNewArchived")
    public Result<IPage<ProcessMethodSearchNewArchivedDto>> pageSearchNewArchived(ProcessMethodSearchNewArchivedDto archived,Page page) throws Exception {
        return Result.success(processMethodSearchNewService.pageSearchNewArchived(page, archived));
    }
    /**
     * æ ‡å‡†æŸ¥æ–°åˆ—表
     * @return
     */
    @ApiOperation(value = "查询存档备份列表")
    @GetMapping("/pageSearchNewBackups")
    public Result<IPage<ProcessMethodSearchNewBackups>> pageSearchNewBackups(ProcessMethodSearchNewBackups backups,Page page) throws Exception {
        return Result.success(processMethodSearchNewService.pageSearchNewBackups(page, backups));
    }
    /**
     * å­˜æ¡£æ‰¹å‡†
     * @return
     */
    @ApiOperation(value = "存档批准")
    @PostMapping("/ratifySearchNewArchivedr")
    public Result ratifySearchNewArchivedr(@RequestBody ProcessMethodSearchNewArchived archived) {
        return Result.success(processMethodSearchNewService.ratifySearchNewArchivedr(archived));
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodVerifyController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,156 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.process.dto.ProcessMethodVerifyDto;
import com.ruoyi.process.pojo.ProcessMethodVerify;
import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
import com.ruoyi.process.service.ProcessMethodVerifyMethodFileService;
import com.ruoyi.process.service.ProcessMethodVerifyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * æ ‡å‡†æ–¹æ³•验证
 *
 * @author zhuo
 * @since 2024-11-05
 */
@RestController
@RequestMapping("/processMethodVerify")
@Api(tags = "标准方法验证")
@AllArgsConstructor
public class ProcessMethodVerifyController {
    @Resource
    private ProcessMethodVerifyService processMethodVerifyService;
    @Resource
    private ProcessMethodVerifyMethodFileService processMethodVerifyMethodFileService;
    /**
     * æ ‡å‡†æŸ¥æ–°åˆ—表
     * @return
     */
    @ApiOperation(value = "标准方法更新验证列表")
    @PostMapping("/pagesMethodVerify")
    public Result<IPage<ProcessMethodVerify>> pagesMethodVerify(ProcessMethodVerifyDto methodVerifyDto,Page page) throws Exception {
        return Result.success(processMethodVerifyService.pagesMethodVerify(page, methodVerifyDto));
    }
    /**
     * æ–°å¢žæ ‡å‡†æ–¹æ³•验证
     * @param methodVerifyDto
     * @return
     */
    @ApiOperation(value = "新增标准方法验证")
    @PostMapping("/addMethodVerify")
    public Result addMethodVerify(@RequestBody ProcessMethodVerifyDto methodVerifyDto ) {
        return Result.success(processMethodVerifyService.addMethodSearchNew(methodVerifyDto));
    }
    /**
     * æŸ¥è¯¢æ ‡å‡†æ–¹æ³•验证详情
     * @param methodVerifyId
     * @return
     */
    @ApiOperation(value = "查询标准方法验证详情")
    @GetMapping("/getMethodVerifyOne")
    public Result<ProcessMethodVerifyDto> getMethodVerifyOne(Integer methodVerifyId) {
        return Result.success(processMethodVerifyService.getMethodVerifyOne(methodVerifyId));
    }
    /**
     * ä¿®æ”¹æ ‡å‡†æ–¹æ³•验证
     * @param methodVerifyDto
     * @return
     */
    @ApiOperation(value = "修改标准方法验证")
    @PostMapping("/updateMethodVerify")
    public Result updateMethodVerify(@RequestBody ProcessMethodVerifyDto methodVerifyDto ) {
        return Result.success(processMethodVerifyService.updateMethodVerify(methodVerifyDto));
    }
    /**
     * åˆ é™¤æ ‡å‡†æ–¹æ³•更新验证
     * @param methodVerifyId
     * @return
     */
    @ApiOperation(value = "删除标准方法更新验证")
    @DeleteMapping("/delMethodVerify")
    public Result delMethodVerify(Integer methodVerifyId){
        return Result.success(processMethodVerifyService.delMethodVerify(methodVerifyId));
    }
    /**
     * å¯¼å‡ºæ ‡å‡†æ–¹æ³•更新验证
     * @param methodVerifyId æ ‡å‡†æ–¹æ³•验证id
     */
    @ApiOperation(value = "导出标准方法更新验证")
    @GetMapping("/exportMethodVerify")
    public void exportMethodVerify(Integer methodVerifyId, HttpServletResponse response){
        processMethodVerifyService.exportMethodVerify(methodVerifyId, response);
    }
    /**
     * éªŒè¯ç¡®è®¤
     * @param methodVerifyId
     * @return
     */
    @ApiOperation(value = "验证确认")
    @GetMapping("/methodVerifyAffirm")
    public Result methodVerifyAffirm(Integer methodVerifyId) {
        return Result.success(processMethodVerifyService.methodVerifyAffirm(methodVerifyId));
    }
    /**
     * æ–¹æ³•验证新增原始记录
     * @param methodVerifyId
     * @param file
     * @return
     */
    @ApiOperation(value = "方法验证新增原始记录")
    @PostMapping("/uploadVerifyMethodFile")
    public Result<?> uploadVerifyMethodFile(Integer methodVerifyId, MultipartFile file) {
        return Result.success(processMethodVerifyService.uploadVerifyMethodFile(methodVerifyId, file));
    }
    /**
     * æ ‡å‡†æ–¹æ³•更新验证原始记录列表
     * @return
     */
    @ApiOperation(value = "标准方法更新验证原始记录列表")
    @GetMapping("/getVerifyMethodFileList")
    public Result<List<ProcessMethodVerifyMethodFile>> getVerifyMethodFileList(Integer methodVerifyId){
        return Result.success(processMethodVerifyService.getVerifyMethodFileList(methodVerifyId));
    }
    /**
     * æ ‡å‡†æ–¹æ³•删除验证原始记录列表
     * @return
     */
    @ApiOperation(value = "标准方法删除验证原始记录列表")
    @GetMapping("/delVerifyMethodFileList")
    public Result delVerifyMethodFileList(Integer methodFileId){
        return Result.success(processMethodVerifyMethodFileService.removeById(methodFileId));
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessReportController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.process.dto.ProcessReportDto;
import com.ruoyi.process.pojo.ProcessReport;
import com.ruoyi.process.service.ProcessReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Map;
/**
 * <p>
 * æ£€éªŒæŠ¥å‘Šå‘放登记表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-05 08:58:39
 */
@RestController
@RequestMapping("/processReport")
@Api(tags = "检验报告发放登记表")
public class ProcessReportController {
    @Resource
    private ProcessReportService processReportService;
    @ApiOperation(value = "查询检验报告发放登记列表")
    @PostMapping("/pageProcessReport")
    public Result pageProcessReport(ProcessReport processReport , Page page) throws Exception {
        return Result.success(processReportService.pageProcessReport(page, processReport));
    }
    @ApiOperation(value = "新增检验报告发放登记")
    @PostMapping("/addProcessReport")
    public Result  addProcessReport(@RequestBody ProcessReport processReport) {
        return Result.success(processReportService.save(processReport));
    }
    @ApiOperation(value = "删除检验报告发放登记")
    @PostMapping("/delProcessReport")
    public Result delProcessReport(Long id) {
        return Result.success(processReportService.removeById(id));
    }
    @ApiOperation(value = "查看检验报告发放登记详情")
    @PostMapping("/getProcessReport")
    public Result getProcessReport(Long id)  {
        return Result.success(processReportService.getById(id));
    }
    @ApiOperation(value = "修改检验报告发放登记")
    @PostMapping("/doProcessReport")
    public Result doProcessReport(@RequestBody ProcessReport processReport) {
        return Result.success(processReportService.updateById(processReport));
    }
    @ApiOperation(value = "导出检验报告发放登记表")
    @PostMapping("/exportProcessReport")
    public Result exportProcessReport(@RequestBody ProcessReportDto processReportDto) {
        return Result.success(processReportService.exportProcessReport(processReportDto.getIds()));
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessSampleController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.process.pojo.ProcessSample;
import com.ruoyi.process.service.ProcessSampleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:49
 */
@RestController
@RequestMapping("/processSample")
@Api(tags = "样品接收")
public class ProcessSampleController {
    @Resource
    private ProcessSampleService processSampleService;
    @ApiOperation(value = "查询样品接收详情")
    @GetMapping("/pageProcessSample")
    public Result pageProcessSample(ProcessSample processSample, Page page) throws Exception {
        return Result.success(processSampleService.pageProcessSample(page, processSample));
    }
    @ApiOperation(value = "新增样品接收详情")
    @PostMapping("/addProcessSample")
    public Result addProcessSample(@RequestBody ProcessSample processSample) {
        return Result.success(processSampleService.addProcessSample(processSample));
    }
    @ApiOperation(value = "删除样品接收")
    @DeleteMapping("/delProcessSample")
    public Result delProcessSample(Integer id) {
        return Result.success(processSampleService.delProcessSample(id));
    }
    @ApiOperation(value = "修改样品接收")
    @PostMapping("/doProcessSample")
    public Result doProcessSample(@RequestBody ProcessSample processSample) {
        return Result.success(processSampleService.doProcessSample(processSample));
    }
    @ApiOperation(value = "查看样品接收")
    @GetMapping("/getProcessSample")
    public Result getProcessSample(Integer id) {
        return Result.success(processSampleService.getById(id));
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotalSampleController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.process.pojo.ProcessTotalSample;
import com.ruoyi.process.service.ProcessTotalSampleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶æ€»è¡¨ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:58
 */
@RestController
@RequestMapping("/processTotalSample")
@Api(tags = "样品接收总表")
public class ProcessTotalSampleController {
    @Resource
    private ProcessTotalSampleService processTotalSampleService;
    @ApiOperation(value = "查询样品接收列表")
    @GetMapping("/pageProcessTotalSample")
    public Result pageProcessTotalSample(ProcessTotalSample processTotalSample,Page page) throws Exception {
        return Result.success(processTotalSampleService.pageProcessTotalSample(page, processTotalSample));
    }
    @ApiOperation(value = "提交样品接收")
    @PostMapping("/submitProcessTotalSample")
    public Result submitProcessTotalSample(Integer id) {
        return Result.success(processTotalSampleService.submitProcessTotalSample(id));
    }
    @ApiOperation(value = "审核样品接收")
    @PostMapping("/checkProcessTotalSample")
    public Result checkProcessTotalSample(Integer id, String state) {
        return Result.success(processTotalSampleService.checkProcessTotalSample(id, state));
    }
    @ApiOperation(value = "批准样品接收")
    @PostMapping("/ratifyProcessTotalSample")
    public Result ratifyProcessTotalSample(Integer id,String state) {
        return Result.success(processTotalSampleService.ratifyProcessTotalSample(id,state));
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessTotaldealController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.process.pojo.ProcessTotaldeal;
import com.ruoyi.process.service.ProcessTotaldealService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置总表(历史) å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 03:59:09
 */
@RestController
@RequestMapping("/processTotaldeal")
@Api(tags = "检测或校准物品的处置")
public class ProcessTotaldealController {
    @Resource
    private ProcessTotaldealService processTotaldealService;
    @ApiOperation(value = "查询检测或校准物品的处置列表")
    @GetMapping("/pageProcessTotaldeal")
    public Result pageProcessTotaldeal(ProcessTotaldeal processTotaldeal , Page page) throws Exception {
        return Result.success(processTotaldealService.pageProcessTotaldeal(page, processTotaldeal));
    }
    @ApiOperation(value = "提交检测或校准物品的处置")
    @PostMapping("/submitProcessTotaldeal")
    public Result submitProcessTotaldeal(Integer id) {
        return Result.success(processTotaldealService.submitProcessTotaldeal(id));
    }
    @ApiOperation(value = "审核检测或校准物品的处置")
    @PostMapping("/checkProcessTotaldeal")
    public Result checkProcessTotaldeal(Integer id, String state) {
        return Result.success(processTotaldealService.checkProcessTotaldeal(id, state));
    }
    @ApiOperation(value = "批准检测或校准物品的处置")
    @PostMapping("/ratifyProcessTotaldeal")
    public Result ratifyProcessTotaldeal(Integer id,String state) {
        return Result.success(processTotaldealService.ratifyProcessTotaldeal(id,state));
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,295 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.process.dto.QualityMonitorDto;
import com.ruoyi.process.mapper.QualityMonitorDetailsEvaluateFileMapper;
import com.ruoyi.process.pojo.*;
import com.ruoyi.process.service.QualityMonitorDetailsService;
import com.ruoyi.process.service.QualityMonitorService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * è´¨é‡ç›‘控计划主表
 *
 * @author zhuo
 * @since 2024-11-06
 */
@Api(tags = "质量监控计划")
@AllArgsConstructor
@RestController
@RequestMapping("/qualityMonitor")
public class QualityMonitorController {
    @Resource
    private QualityMonitorService qualityMonitorService;
    @Resource
    private QualityMonitorDetailsService qualityMonitorDetailsService;
    @Resource
    private QualityMonitorDetailsEvaluateFileMapper qualityMonitorDetailsEvaluateFileMapper;
    /**
     * å¯¼å…¥ç›‘控计划
     * @return
     */
    @ApiOperation(value = "导入监控计划")
    @PostMapping("/importQualityMonitor")
    public Result importQualityMonitor(MultipartFile file, QualityMonitor qualityMonitor) {
        return Result.success(qualityMonitorService.importQualityMonitor(file, qualityMonitor));
    }
    /**
     * ç›‘控计划审核
     * @return
     */
    @ApiOperation(value = "监控计划审核")
    @PostMapping("/examineQualityMonitor")
    public Result examineQualityMonitor(@RequestBody QualityMonitor qualityMonitor) {
        return Result.success(qualityMonitorService.examineQualityMonitor(qualityMonitor));
    }
    /**
     * ç›‘控计划删除
     * @return
     */
    @ApiOperation(value = "监控计划删除")
    @GetMapping("/delQualitySupervise")
    public Result delQualitySupervise(Integer qualityMonitorId) {
        return Result.success(qualityMonitorService.removeById(qualityMonitorId));
    }
    /**
     * ç›‘控计划批准
     * @return
     */
    @ApiOperation(value = "监控计划批准")
    @PostMapping("/ratifyQualityMonitor")
    public Result ratifyQualityMonitor(@RequestBody QualityMonitor qualityMonitor) {
        return Result.success(qualityMonitorService.ratifyQualityMonitor(qualityMonitor));
    }
    /**
     * ç›‘控计划列表
     * @return
     */
    @ApiOperation(value = "监控计划列表")
    @GetMapping("/pageQualityMonitor")
    public Result<IPage<QualityMonitorDto>> pageQualityMonitor(QualityMonitor qualityMonitor,Page page) throws Exception {
        return Result.success(qualityMonitorService.pageQualityMonitor(page, qualityMonitor));
    }
    /**
     * ç›‘控计划详情列表
     * @param data
     * @return
     */
    @ApiOperation(value = "监控计划详情列表")
    @GetMapping("/pageQualityMonitorDetail")
    public Result<IPage<QualityMonitorDetails>> pageQualityMonitorDetail(QualityMonitorDetails qualityMonitorDetails,Page page) throws Exception {
        return Result.success(qualityMonitorService.pageQualityMonitorDetail(page, qualityMonitorDetails));
    }
    /**
     * æ–°å¢žç›‘控计划详情
     * @return
     */
    @ApiOperation(value = "新增监控计划详情")
    @PostMapping("/addQualityMonitorDetail")
    public Result addQualityMonitorDetail(@RequestBody QualityMonitorDetails qualityMonitorDetails) {
        if (qualityMonitorDetails.getQualityMonitorId() == null) {
            throw new ErrorException("缺少监控计划主表id");
        }
        return Result.success(qualityMonitorDetailsService.save(qualityMonitorDetails));
    }
    /**
     * ä¿®æ”¹ç›‘控计划详情
     * @return
     */
    @ApiOperation(value = "修改监控计划详情")
    @PostMapping("/updateQualityMonitorDetail")
    public Result updateQualityMonitorDetail(@RequestBody QualityMonitorDetails qualityMonitorDetails) {
        return Result.success(qualityMonitorDetailsService.updateById(qualityMonitorDetails));
    }
    /**
     * åˆ é™¤ç›‘控计划详情
     * @return
     */
    @ApiOperation(value = "删除监控计划详情")
    @DeleteMapping("/delQualityMonitorDetail")
    public Result delQualityMonitorDetail(Integer qualityMonitorDetailsId) {
        return Result.success(qualityMonitorDetailsService.removeById(qualityMonitorDetailsId));
    }
    /**
     * å¯¼å‡ºç›‘控计划
     * @return
     */
    @ApiOperation(value = "导出监控计划")
    @GetMapping("/exportQualityMonitorDetail")
    public void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response) {
        qualityMonitorService.exportQualityMonitorDetail(qualityMonitorId, response);
    }
    /************************************************************  å®žæ–½  *******************************************************************/
    /**
     * æŸ¥è¯¢ç›‘控计划详情实施信息
     * @return
     */
    @ApiOperation(value = "查询监控计划详情实施信息")
    @GetMapping("/getQualityMonitorRatify")
    public Result<QualityMonitorDetailsRatify> getQualityMonitorRatify(Integer qualityMonitorDetailsId) {
        return Result.success(qualityMonitorService.getQualityMonitorRatify(qualityMonitorDetailsId));
    }
    /**
     * æ–°å¢žç›‘控计划详情实施信息
     * @return
     */
    @ApiOperation(value = "新增监控计划详情实施信息")
    @PostMapping("/addQualityMonitorRatify")
    public Result addQualityMonitorRatify(@RequestBody QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
        return Result.success(qualityMonitorService.addQualityMonitorRatify(qualityMonitorDetailsRatify));
    }
    /**
     * ç›‘控计划详情提交批准意见
     * @return
     */
    @ApiOperation(value = "监控计划详情提交批准意见")
    @PostMapping("/addQualityMonitorRatifyOpinion")
    public Result addQualityMonitorRatifyOpinion(@RequestBody QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
        return Result.success(qualityMonitorService.addQualityMonitorRatifyOpinion(qualityMonitorDetailsRatify));
    }
    /**
     * å¯¼å‡ºç›‘控计划详情实施信息
     * @param qualityMonitorDetailsId ç›‘控计划详情实施id
     */
    @ApiOperation(value = "导出监控计划详情实施信息")
    @GetMapping("/exportQualityMonitorRatify")
    public void exportQualityMonitorRatify(Integer qualityMonitorDetailsId, HttpServletResponse response){
        qualityMonitorService.exportQualityMonitorRatify(qualityMonitorDetailsId, response);
    }
    /************************************************************  è¯„ä»·  *******************************************************************/
    /**
     * æŸ¥è¯¢ç›‘控评价
     * @return
     */
    @ApiOperation(value = "查询监控评价")
    @GetMapping("/getQualityMonitorEvaluate")
    public Result<QualityMonitorDetailsEvaluate> getQualityMonitorEvaluate(Integer qualityMonitorDetailsId) {
        return Result.success(qualityMonitorService.getQualityMonitorEvaluate(qualityMonitorDetailsId));
    }
    /**
     * æ–°å¢žç›‘控评价
     * @return
     */
    @ApiOperation(value = "新增监控评价")
    @PostMapping("/addQualityMonitorEvaluate")
    public Result addQualityMonitorEvaluate(@RequestBody QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
        return Result.success(qualityMonitorService.addQualityMonitorEvaluate(qualityMonitorDetailsEvaluate));
    }
    /**
     * å¯¼å‡ºç›‘控评价
     * @param qualityMonitorDetailsId ç›‘控评价id
     */
    @ApiOperation(value = "导出监控评价")
    @GetMapping("/exportQualityMonitorEvaluate")
    public void exportQualityMonitorEvaluate(Integer qualityMonitorDetailsId, HttpServletResponse response){
        qualityMonitorService.exportQualityMonitorEvaluate(qualityMonitorDetailsId, response);
    }
    /**
     * ç›‘控评价批准意见
     * @return
     */
    @ApiOperation(value = "监控评价批准意见")
    @PostMapping("/addMonitorEvaluateOpinion")
    public Result addMonitorEvaluateOpinion(@RequestBody QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
        return Result.success(qualityMonitorService.addMonitorEvaluateOpinion(qualityMonitorDetailsEvaluate));
    }
    /**
     * æ–°å¢žç›‘控评价附件表
     * @param detailsEvaluateId
     * @param file
     * @return
     */
    @ApiOperation(value = "新增监控评价附件表")
    @PostMapping("/uploadEvaluateFile")
    public Result<?> uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file) {
        return Result.success(qualityMonitorService.uploadEvaluateFile(detailsEvaluateId, file));
    }
    /**
     * æŸ¥è¯¢ç›‘控评价附件列表
     * @return
     */
    @ApiOperation(value = "查询监控评价附件列表")
    @GetMapping("/getEvaluateFileList")
    public Result<List<QualityMonitorDetailsEvaluateFile>> getEvaluateFileList(Integer detailsEvaluateId) {
        return Result.success(qualityMonitorService.getEvaluateFileList(detailsEvaluateId));
    }
    /**
     * åˆ é™¤ç›‘控评价附件表
     * @return
     */
    @ApiOperation(value = "删除监控评价附件表")
    @GetMapping("/delVerifyEvaluateFileList")
    public Result delVerifyMethodFileList(Integer evaluateFileId) {
        return Result.success(qualityMonitorDetailsEvaluateFileMapper.deleteById(evaluateFileId));
    }
    /******************************************************** å®ŒæˆæŠ¥å‘Š ***************************************************************/
    /**
     * ä¸Šä¼ ç›‘控完成报告
     * @param file
     * @param qualityMonitorDetailsId
     * @return
     */
    @ApiOperation(value = "上传监控完成报告")
    @PostMapping("/uploadFinishReport")
    public Result uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId) {
        return Result.success(qualityMonitorService.uploadFinishReport(file, qualityMonitorDetailsId));
    }
    /**
     * ç›‘控计划批准
     * @return
     */
    @ApiOperation(value = "批准完成报告")
    @PostMapping("/ratifyFinishReport")
    public Result ratifyFinishReport(@RequestBody QualityMonitorDetails qualityMonitorDetails) {
        return Result.success(qualityMonitorService.ratifyFinishReport(qualityMonitorDetails));
    }
}
cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,353 @@
package com.ruoyi.process.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.process.dto.QualitySuperviseDetailsDto;
import com.ruoyi.process.mapper.QualitySuperviseDetailsCorrectMapper;
import com.ruoyi.process.pojo.*;
import com.ruoyi.process.service.QualitySuperviseDetailsService;
import com.ruoyi.process.service.QualitySuperviseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * è´¨é‡ç›‘督主表
 *
 * @author zhuo
 * @since 2024-11-07
 */
@Api(tags = "质量监督计划")
@AllArgsConstructor
@RestController
@RequestMapping("/qualitySupervise")
public class QualitySuperviseController {
    @Resource
    private QualitySuperviseService qualitySuperviseService;
    @Resource
    private QualitySuperviseDetailsService qualitySuperviseDetailsService;
    @Resource
    private QualitySuperviseDetailsCorrectMapper qualitySuperviseDetailsCorrectMapper;
    /**
     * å¯¼å…¥ç›‘督计划
     * @return
     */
    @ApiOperation(value = "导入监督计划")
    @PostMapping("/importQualitySupervise")
    public Result importQualitySupervise(MultipartFile file, QualitySupervise qualitySupervise){
        return Result.success(qualitySuperviseService.importQualitySupervise(file, qualitySupervise));
    }
    /**
     * ç›‘督计划列表
     * @return
     */
    @ApiOperation(value = "监督计划列表")
    @GetMapping("/pageQualitySupervise")
    public Result<IPage<QualitySupervise>> pageQualitySupervise(QualitySupervise qualitySupervise ,Page page) throws Exception {
        return Result.success(qualitySuperviseService.pageQualitySupervise(page, qualitySupervise));
    }
    /**
     * ç›‘督计划批准
     * @return
     */
    @ApiOperation(value = "监督计划批准")
    @PostMapping("/ratifyQualitySupervise")
    public Result ratifyQualitySupervise(@RequestBody QualitySupervise qualitySupervise){
        return Result.success(qualitySuperviseService.ratifyQualitySupervise(qualitySupervise));
    }
    /**
     * ç›‘督计划删除
     * @return
     */
    @ApiOperation(value = "监督计划删除")
    @DeleteMapping("/delQualitySupervise")
    public Result delQualitySupervise(Integer superviseId){
        return Result.success(qualitySuperviseService.removeById(superviseId));
    }
    /**
     * ç›‘督计划详情列表
     * @param data
     * @return
     */
    @ApiOperation(value = "监督计划详情列表")
    @PostMapping("/pageQualitySuperviseDetail")
    public Result<IPage<QualitySuperviseDetailsDto>> pageQualitySuperviseDetail(QualitySuperviseDetailsDto qualitySuperviseDetails,Page page) throws Exception {
        return Result.success(qualitySuperviseService.pageQualitySuperviseDetail(page, qualitySuperviseDetails));
    }
    /**
     * æ–°å¢žç›‘督计划详情
     * @return
     */
    @ApiOperation(value = "新增监督计划详情")
    @PostMapping("/addQualitySuperviseDetail")
    public Result addQualitySuperviseDetail(@RequestBody QualitySuperviseDetails qualitySuperviseDetails){
        if (qualitySuperviseDetails.getSuperviseId() == null) {
            throw new ErrorException("缺少监督计划主表id");
        }
        return Result.success(qualitySuperviseDetailsService.save(qualitySuperviseDetails));
    }
    /**
     * ä¿®æ”¹ç›‘督计划详情
     * @return
     */
    @ApiOperation(value = "修改监督计划详情")
    @PostMapping("/updateQualitySuperviseDetail")
    public Result updateQualitySuperviseDetail(@RequestBody QualitySuperviseDetails qualitySuperviseDetails){
        return Result.success(qualitySuperviseDetailsService.updateById(qualitySuperviseDetails));
    }
    /**
     * åˆ é™¤ç›‘督计划详情
     * @return
     */
    @ApiOperation(value = "删除监督计划详情")
    @GetMapping("/delQualitySuperviseDetail")
    public Result delQualitySuperviseDetail(Integer superviseDetailsId){
        return Result.success(qualitySuperviseDetailsService.removeById(superviseDetailsId));
    }
    /**
     * æŸ¥è¯¢è¯¥è®¡åˆ’监督员
     * @return
     */
    @ApiOperation(value = "查询该计划监督员")
    @GetMapping("/getRecordUser")
    public Result getRecordUser(Integer superviseDetailsId){
        return Result.success(qualitySuperviseService.getRecordUser(superviseDetailsId));
    }
    /**
     * å¯¼å‡ºç›‘督计划
     * @return
     */
    @ApiOperation(value = "导出监督计划")
    @GetMapping("/exportQualitySupervise")
    public void exportQualitySupervise(Integer superviseId, HttpServletResponse response){
        qualitySuperviseService.exportQualitySupervise(superviseId, response);
    }
    /************************************************* è®°å½• *********************************************************/
    /**
     * æŸ¥è¯¢ç›‘督记录信息
     * @return
     */
    @ApiOperation(value = "查询监督记录信息")
    @GetMapping("/getSuperviseDetailRecord")
    public Result<QualitySuperviseDetailsRecord> getSuperviseDetailRecord(Integer superviseDetailsId){
        return Result.success(qualitySuperviseService.getSuperviseDetailRecord(superviseDetailsId));
    }
    /**
     * æ–°å¢žç›‘督记录信息
     * @return
     */
    @ApiOperation(value = "新增监督记录信息")
    @PostMapping("/addSuperviseDetailRecord")
    public Result addSuperviseDetailRecord(@RequestBody QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord){
        return Result.success(qualitySuperviseService.addSuperviseDetailRecord(qualitySuperviseDetailsRecord));
    }
    /**
     * ç›‘督记录批准
     * @return
     */
    @ApiOperation(value = "监督记录批准")
    @PostMapping("/addSuperviseRecordOpinion")
    public Result addSuperviseRecordOpinion(@RequestBody QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord){
        return Result.success(qualitySuperviseService.addSuperviseRecordOpinion(qualitySuperviseDetailsRecord));
    }
    /**
     * å¯¼å‡ºè´¨é‡ç›‘督详情记录表
     * @return
     */
    @ApiOperation(value = "导出监督记录表")
    @GetMapping("/exportSuperviseDetailRecord")
    public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response){
        qualitySuperviseService.exportSuperviseDetailRecord(superviseDetailsId, response);
    }
    /*************************************************  ä¸åˆæ ¼å·¥ä½œæŽ§åˆ¶å• ********************************************************/
    /**
     * æ–°å¢žç›‘督记录不符合控制信息
     * @return
     */
    @ApiOperation(value = "新增监督记录不符合控制信息")
    @PostMapping("/addSuperviseDetailAccording")
    public Result addSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
        return Result.success(qualitySuperviseService.addSuperviseDetailAccording(qualitySuperviseDetailsAccording));
    }
    /**
     * æ–°å¢žç›‘督记录不符合控制信息(装备流程)
     * @return
     */
    @ApiOperation(value = "(装备流程)新增监督记录不符合控制信息")
    @PostMapping("/addEquipSuperviseDetailAccording")
    public Result addEquipSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
        return Result.success(qualitySuperviseService.addEquipSuperviseDetailAccording(qualitySuperviseDetailsAccording));
    }
    /**
     * (装备流程)批准监督记录不符合控制信息
     * @return
     */
    @ApiOperation(value = "(装备流程)批准监督记录不符合控制信息")
    @PostMapping("/approverEquipSuperviseDetailAccording")
    public Result approverEquipSuperviseDetailAccording(@RequestBody QualitySuperviseDetailsAccording qualitySuperviseDetailsAccording){
        return Result.success(qualitySuperviseService.approverEquipSuperviseDetailAccording(qualitySuperviseDetailsAccording));
    }
    /**
     * æŸ¥è¯¢ç›‘督记录不符合控制信息
     * @return
     */
    @ApiOperation(value = "查询监督记录不符合控制信息")
    @GetMapping("/getSuperviseDetailAccording")
    public Result<QualitySuperviseDetailsAccording> getSuperviseDetailAccording(Integer superviseDetailsId){
        return Result.success(qualitySuperviseService.getSuperviseDetailAccording(superviseDetailsId));
    }
    /**
     * æŸ¥è¯¢ç›‘督记录不符合控制信息列表
     * @return
     */
    @ApiOperation(value = "查询监督记录不符合控制信息列表")
    @GetMapping("/pageSuperviseDetailAccording")
    public Result<IPage<QualitySuperviseDetailsAccording>> pageSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording,Page page) throws Exception {
        return Result.success(qualitySuperviseService.pageSuperviseDetailAccording(page, detailsAccording));
    }
    /**
     * å¯¼å‡ºç›‘督记录不符合控制信息
     * @return
     */
    @ApiOperation(value = "导出监督记录不符合控制信息")
    @GetMapping("/superviseDetailAccordingExport")
    public void superviseDetailAccordingExport(@RequestParam("superviseDetailsId") Integer id, HttpServletResponse response){
        qualitySuperviseService.superviseDetailAccordingExport(id, response);
    }
    /*************************************************  çº æ­£æŽªæ–½å¤„理单 ********************************************************/
    /**
     * æ–°å¢žç›‘督纠正处理信息
     * @return
     */
    @ApiOperation(value = "新增监督纠正处理")
    @PostMapping("/addSuperviseDetailCorrect")
    public Result addSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
        return Result.success(qualitySuperviseService.addSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
    }
    /**
     * (装备流程)新增监督纠正处理信息
     * @return
     */
    @ApiOperation(value = "(装备流程)新增监督纠正处理")
    @PostMapping("/addEquipSuperviseDetailCorrect")
    public Result addEquipSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
        return Result.success(qualitySuperviseService.addEquipSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
    }
    /**
     * (装备流程)批准监督纠正处理
     * @return
     */
    @ApiOperation(value = "(装备流程)批准监督纠正处理")
    @PostMapping("/approveEquipSuperviseDetailCorrect")
    public Result approveEquipSuperviseDetailCorrect(@RequestBody QualitySuperviseDetailsCorrect qualitySuperviseDetailsCorrect){
        return Result.success(qualitySuperviseService.approveEquipSuperviseDetailCorrect(qualitySuperviseDetailsCorrect));
    }
    /**
     * æŸ¥è¯¢ç›‘督纠正处理
     * @return
     */
    @ApiOperation(value = "查询监督纠正处理")
    @GetMapping("/getSuperviseDetailCorrect")
    public Result<QualitySuperviseDetailsCorrect> getSuperviseDetailCorrect(Integer superviseDetailsId){
        return Result.success(qualitySuperviseService.getSuperviseDetailCorrect(superviseDetailsId));
    }
    /**
     * æŸ¥è¯¢ç›‘督纠正措施列表
     * @return
     */
    @ApiOperation(value = "查询监督纠正措施列表")
    @GetMapping("/pageSuperviseDetailCorrect")
    public Result<IPage<QualitySuperviseDetailsCorrect>> pageSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect,Page page) throws Exception {
        return Result.success(qualitySuperviseService.pageSuperviseDetailCorrect(page, detailsCorrect));
    }
    /**
     * æ–°å¢žç›‘督纠正措施附件
     * @param superviseDetailsCorrectId
     * @param file
     * @return
     */
    @ApiOperation(value = "新增监督纠正措施附件")
    @PostMapping("/uploadSuperviseDetailCorrectFile")
    public Result<?> uploadSuperviseDetailCorrectFile(Integer superviseDetailsCorrectId, MultipartFile file) {
        return Result.success(qualitySuperviseService.uploadSuperviseDetailCorrectFile(superviseDetailsCorrectId, file));
    }
    /**
     * æŸ¥è¯¢ç›‘督纠正措施附件
     * @return
     */
    @ApiOperation(value = "查询监督纠正措施附件")
    @GetMapping("/getSuperviseDetailCorrectFileList")
    public Result<List<QualitySuperviseDetailsCorrectFile>> getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId){
        return Result.success(qualitySuperviseService.getSuperviseDetailCorrectFileList(superviseDetailsCorrectId));
    }
    /**
     * åˆ é™¤ç›‘督纠正措施附件
     * @return
     */
    @ApiOperation(value = "删除监督纠正措施附件")
    @DeleteMapping("/delSuperviseDetailCorrectFile")
    public Result delSuperviseDetailCorrectFile(Integer superviseDetailsCorrectFileId){
        return Result.success(qualitySuperviseDetailsCorrectMapper.deleteById(superviseDetailsCorrectFileId));
    }
    /**
     * å¯¼å‡ºç›‘督纠正措施
     * @return
     */
    @ApiOperation(value = "导出监督纠正措施")
    @GetMapping("/exportSuperviseDetaillCorrect")
    public void exportSuperviseDetaillCorrect(Integer superviseDetailsCorrectId, HttpServletResponse response){
        qualitySuperviseService.exportSuperviseDetaillCorrect(superviseDetailsCorrectId, response);
    }
}
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默认转换成string
     */
    @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;
}
cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.InconsistentDistribution;
import com.ruoyi.process.pojo.InconsistentDistributionDetail;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/11/15
 */
@Data
public class InconsistentDistributionDto extends InconsistentDistribution {
    @ApiModelProperty("分布详情")
    private List<InconsistentDistributionDetail> distributionDetailList;
    @ApiModelProperty("占比对象")
    private InconsistentDistributionProportionDto distributionProportion;
    @ApiModelProperty("创建人名称")
    private String createUserName;
    @ApiModelProperty("修改人名称")
    private String updateUserName;
}
cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.process.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * å æ¯”对象
 *
 * @Author zhuo
 * @Date 2024/11/15
 */
@Data
public class InconsistentDistributionProportionDto {
    @ApiModelProperty("章节号")
    private String chapterNumber;
    @ApiModelProperty("要素")
    private String essentials;
    @ApiModelProperty("主任")
    private BigDecimal director;
    @ApiModelProperty("技术负责人")
    private BigDecimal technology;
    @ApiModelProperty("质量负责人")
    private BigDecimal quality;
    @ApiModelProperty("综合室")
    private BigDecimal comprehensive;
    @ApiModelProperty("试验室")
    private BigDecimal testing;
    @ApiModelProperty("合计")
    private Integer total;
    @ApiModelProperty("占比")
    private BigDecimal proportion;
}
cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.InspectionOrder;
import com.ruoyi.process.pojo.InspectionOrderDetail;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/12/9
 */
@Data
public class InspectionOrderDto extends InspectionOrder {
    @ApiModelProperty("委托检验单详情")
    private List<InspectionOrderDetail> orderDetailList;
}
cnas-process/src/main/java/com/ruoyi/process/dto/InspectionOrderExportDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.InspectionOrder;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Author: yuan
 * Date: 2024-12-10 æ˜ŸæœŸäºŒ
 * Description:
 */
@Data
public class InspectionOrderExportDto extends InspectionOrder {
    @ApiModelProperty("留样:1 æ˜¯")
    private String isLeave1 = "□";
    @ApiModelProperty("留样:0 å¦")
    private String isLeave2 = "□";
    @ApiModelProperty("报告发送方式 1:自取")
    private String send1 = "□";
    @ApiModelProperty("报告发送方式 0:其他")
    private String send0 = "□";
    @ApiModelProperty("样品处理方式 1:实验室处理")
    private String processing1 = "□";
    @ApiModelProperty("样品处理方式 0:委托单位取回")
    private String processing0 = "□";
    @ApiModelProperty("判断规则 1:考虑不确定度")
    private String criterionRule1 = "□";
    @ApiModelProperty("判断规则 0:不考虑不确定度")
    private String criterionRule0 = "□";
    @ApiModelProperty("委托时间 å­—符串格式:yyyyå¹´MM月dd")
    private String commissionDateString;
    @ApiModelProperty("接收日期 å­—符串格式:yyyyå¹´MM月dd")
    private String receiptDataString;
    @ApiModelProperty("领样日期 å­—符串格式:yyyyå¹´MM月dd")
    private String sampleDataString;
    @ApiModelProperty("约定时间 å­—符串格式:yyyyå¹´MM月dd")
    private String appointedString;
}
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;
}
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewArchivedDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/12/25
 */
@Data
public class ProcessMethodSearchNewArchivedDto extends ProcessMethodSearchNewArchived {
    @ApiModelProperty("编制人")
    private String writeName;
    @ApiModelProperty("批准人")
    private String ratifyName;
}
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewBackupsDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.ruoyi.process.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/4
 */
@Data
@ExcelIgnoreUnannotated
public class ProcessMethodSearchNewBackupsDto extends ProcessMethodSearchNewBackups {
    @ApiModelProperty("开始时间")
    private String beginDate;
    @ApiModelProperty("结束时间")
    private String endDate;
    @ApiModelProperty("编制人id")
    private Integer writeUserId;
    @ApiModelProperty("批准人id")
    private Integer ratifyUserId;
    @ApiModelProperty("编制人日期")
    private String writeDate;
    @ApiModelProperty("批准人日期")
    private String ratifyDate;
    @ExcelProperty(value = {"是否有更新标准", "是否有更新标准"}, index = 4)
    @ApiModelProperty("是否有更新标准")
    private String isNewStandardString;
    @ExcelProperty(value = {"查新记录", "标准网"}, index = 7)
    @ApiModelProperty("标准网")
    private String standardNet;
    @ExcelProperty(value = {"查新记录", "委托情报所"}, index = 8)
    @ApiModelProperty("委托情报所")
    private String informationOffices;
    @ExcelProperty(value = {"查新记录", "标准书店"}, index = 9)
    @ApiModelProperty("标准书店")
    private String standardBookstore;
    @ExcelProperty(value = {"查新记录", "其他"}, index = 10)
    @ApiModelProperty("其他")
    private String other;
    @ExcelProperty(value = {"备注", "备注"}, index = 11)
    @ApiModelProperty("备注")
    private String remarkString;
    @ExcelProperty(value = {"序号", "序号"}, index = 0)
    @ApiModelProperty("序号")
    private Integer index;
}
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyCalibrationsFileDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.ProcessMethodVerifyCalibrationsFile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/12
 */
@Data
public class ProcessMethodVerifyCalibrationsFileDto extends ProcessMethodVerifyCalibrationsFile {
    @ApiModelProperty("设备名称")
    private String deviceName;
    @ApiModelProperty("设备编号")
    private String managementNumber;
}
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.ProcessMethodVerify;
import com.ruoyi.process.pojo.ProcessMethodVerifyMachineAttachment;
import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
import com.ruoyi.process.pojo.ProcessMethodVerifyWorkFile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/11/5
 */
@Data
public class ProcessMethodVerifyDto extends ProcessMethodVerify {
    @ApiModelProperty("设备附件")
    private List<ProcessMethodVerifyMachineAttachment> machineAttachmentList;
    @ApiModelProperty("原始记录附件")
    private List<ProcessMethodVerifyMethodFile> methodFileList;
    @ApiModelProperty("上岗证")
    private List<ProcessMethodVerifyWorkFile> workFileList;
    @ApiModelProperty("校准证书")
    private List<ProcessMethodVerifyCalibrationsFileDto> calibrationsFileList;
}
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodVerifyExportWordDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.ProcessMethodVerify;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Author: yuan
 * Date: 2024-12-19 æ˜ŸæœŸå›› 15:55:46
 * Description:
 */
@Data
public class ProcessMethodVerifyExportWordDto extends ProcessMethodVerify {
    @ApiModelProperty("(人)是否满足 1满足 0不满足")
    private String personIsSatisfiedStr;
    @ApiModelProperty("(机)是否满足")
    private String machineIsSatisfiedStr;
    @ApiModelProperty("(料)是否满足")
    private String materialIsSatisfiedStr;
    @ApiModelProperty("(法)是否满足")
    private String methodIsSatisfiedStr;
    @ApiModelProperty("(环)是否满足")
    private String environmentIsSatisfiedStr;
    @ApiModelProperty("(测量溯源性)是否满足")
    private String traceabilityIsSatisfiedStr;
    @ApiModelProperty("(样品管理需求)是否满足")
    private String managementIsSatisfiedStr;
    @ApiModelProperty("(其他)是否满足")
    private String otherIsSatisfiedStr;
    @ApiModelProperty("确认时间")
    private String confirmDateStr;
}
cnas-process/src/main/java/com/ruoyi/process/dto/ProcessReportDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.ruoyi.process.dto;
import lombok.Data;
import java.util.List;
@Data
//导出
public class ProcessReportDto {
    private List<Integer> ids;
}
cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsEvaluateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.QualityMonitorDetailsEvaluate;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Author: yuan
 * Date: 2024-12-20 æ˜ŸæœŸäº” 9:08:38
 * Description:
 */
@Data
public class QualityMonitorDetailsEvaluateDto extends QualityMonitorDetailsEvaluate {
    @ApiModelProperty("批准时间")
    private String ratifyTimeStr;
}
cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.QualityMonitor;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/6
 */
@Data
public class QualityMonitorDto extends QualityMonitor {
    @ApiModelProperty("编制人")
    private String writeName;
    @ApiModelProperty("审核人")
    private String examineName;
    @ApiModelProperty("批准人")
    private String ratifyName;
}
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsAccordingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.QualitySuperviseDetailsAccording;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Author: yuan
 * Date: 2024-12-11 æ˜ŸæœŸä¸‰ 16:26:41
 * Description:
 */
@Data
public class QualitySuperviseDetailsAccordingDto extends QualitySuperviseDetailsAccording {
    @ApiModelProperty("1发现部门-日期")
    private String discovererDateString;
    @ApiModelProperty("3责任部门 æ—¥æœŸ")
    private String responsibleDepartmentDateString;
    @ApiModelProperty("4纠正措施 æ—¥æœŸ")
    private String correctiveMeasureDateString;
    @ApiModelProperty("5质量负责人日期")
    private String qualitySupervisorDateString;
    @ApiModelProperty("0被监督时间 æ—¥æœŸ")
    private String supervisedTimeString;
    @ApiModelProperty("4纠正措施处理单跟踪(是)")
    private String correctiveMeasureFollowTracksYes = "□";
    @ApiModelProperty("4纠正措施处理单跟踪(否)")
    private String correctiveMeasureFollowTracksNo = "□";
    @ApiModelProperty("5是否通知客户(是)")
    private String whetherInformCustomerYes = "□";
    @ApiModelProperty("5是否通知客户(否)")
    private String whetherInformCustomerNo = "□";
    @ApiModelProperty("5是否恢复工作(1:是;2:否)")
    private String whetherResumeWorkYes = "□";
    @ApiModelProperty("5是否恢复工作(1:是;2:否)")
    private String whetherResumeWorkNo = "□";
    @ApiModelProperty("1不符合工作发现途径0(管理评审)")
    private String discoveryApproach0 = "□";
    @ApiModelProperty("1不符合工作发现途径1(内部审核)")
    private String discoveryApproach1 = "□";
    @ApiModelProperty("1不符合工作发现途径2(检测过程控制)")
    private String discoveryApproach2 = "□";
    @ApiModelProperty("1不符合工作发现途径3(内部质量控制)")
    private String discoveryApproach3 = "□";
    @ApiModelProperty("1不符合工作发现途径4(内部监督)")
    private String discoveryApproach4 = "□";
    @ApiModelProperty("1不符合工作发现途径5(外部评审/检查)")
    private String discoveryApproach5 = "□";
    @ApiModelProperty("1不符合工作发现途径6(顾客投诉/意见反馈)")
    private String discoveryApproach6 = "□";
    @ApiModelProperty("1不符合工作发现途径7(其他)")
    private String discoveryApproach7 = "□";
}
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsCorrectDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.QualitySuperviseDetailsCorrect;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/12/2
 */
@Data
public class QualitySuperviseDetailsCorrectDto extends QualitySuperviseDetailsCorrect {
    @ApiModelProperty("提出时间")
    private String raiseTimeString;
    @ApiModelProperty("原因分析时间")
    private String causeTimeString;
    @ApiModelProperty("纠正时间")
    private String correctTimeString;
    @ApiModelProperty("验证时间")
    private String validationTimeString;
}
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.process.dto;
import com.ruoyi.process.pojo.QualitySuperviseDetails;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/7
 */
@Data
public class QualitySuperviseDetailsDto extends QualitySuperviseDetails {
    @ApiModelProperty("是否符合,0 ä¸ç¬¦åˆ, 1符合")
    private Integer isAccording;
    @ApiModelProperty("2是否纠正处理, 0否, 1是")
    private Integer isCorrect;
    @ApiModelProperty("质量监督详情纠正处理id")
    private Integer superviseDetailsCorrectId;
    @ApiModelProperty("监督原因类型, 1:定期监督, 2:动态监督")
    private Integer causeType;
}
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;
}
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;
}
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("被监督人员")
    private String supervisee;
    @ExcelProperty("监督原因")
    private String superviseReason;
    @ExcelProperty("备注")
    private String remark;
}
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> {
}
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);
}
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> {
}
cnas-process/src/main/java/com/ruoyi/process/mapper/InspectionOrderMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.ruoyi.process.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.process.dto.InspectionOrderDto;
import com.ruoyi.process.pojo.InspectionOrder;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ£€éªŒå§”托单 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-09
 */
public interface InspectionOrderMapper extends BaseMapper<InspectionOrder> {
    /**
     * æ£€éªŒå§”托单分页查询
     * @param page
     * @param ew
     * @return
     */
    IPage<InspectionOrderDto> pageInspectionOrder(Page page, @Param("ew") QueryWrapper<InspectionOrder> ew);
    /**
     * å§”托单查询成品订单
     * @param page
     * @param insOrderQueryWrapper
     * @return
     */
    IPage<InsOrder> getInsOrderOnInspection(Page page, @Param("ew") QueryWrapper<InsOrder> insOrderQueryWrapper);
}
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);
}
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessDealMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.process.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.process.pojo.ProcessDeal;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 02:50:19
 */
public interface ProcessDealMapper extends BaseMapper<ProcessDeal> {
    IPage<ProcessDeal> pageProcessDeal(Page page, @Param("ew") QueryWrapper<ProcessDeal> queryWrappers);
}
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);
}
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);
}
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewBackupsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.process.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
/**
 * <p>
 * æ ‡å‡†æŸ¥æ–°å¤‡ä»½è¡¨ Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-25 05:29:02
 */
public interface ProcessMethodSearchNewBackupsMapper extends BaseMapper<ProcessMethodSearchNewBackups> {
    /**
     * æŸ¥è¯¢å­˜æ¡£å¤‡ä»½åˆ—表
     * @param page
     * @param ew
     * @return
     */
    IPage<ProcessMethodSearchNewBackups> pageSearchNewBackups(Page page, QueryWrapper<ProcessMethodSearchNewBackups> ew);
}
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);
}
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);
}
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> {
}
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);
}
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> {
}
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);
}
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessReportMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.process.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.process.pojo.ProcessReport;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * æ£€éªŒæŠ¥å‘Šå‘放登记表 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-05 08:58:39
 */
public interface ProcessReportMapper extends BaseMapper<ProcessReport> {
    IPage<ProcessReport> pageProcessReport(Page page, @Param("ew") QueryWrapper<ProcessReport> queryWrappers);
    List<ProcessReport> getIds(List<Integer> ids);
}
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);
}
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessTotalSampleMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.process.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.process.pojo.ProcessTotalSample;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶æ€»è¡¨ Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:58
 */
public interface ProcessTotalSampleMapper extends BaseMapper<ProcessTotalSample> {
    IPage<ProcessTotalSample> pageProcessTotalSample(Page page, @Param("ew") QueryWrapper<ProcessTotalSample> ew);
}
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);
}
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> {
}
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);
}
cnas-process/src/main/java/com/ruoyi/process/mapper/QualityMonitorDetailsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.process.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.process.pojo.QualityMonitorDetails;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * è´¨é‡ç›‘控计划详情表
 *
 * @author zhuo
 * @since 2024-11-06
 */
@Mapper
public interface QualityMonitorDetailsMapper extends BaseMapper<QualityMonitorDetails> {
    /**
     * è´¨é‡ç›‘控计划列表
     * @param page
     * @param qualityMonitorDetailsQueryWrapper
     * @return
     */
    IPage<QualityMonitorDetails> pageQualityMonitorDetail(Page page, @Param("ew") QueryWrapper<QualityMonitorDetails> qualityMonitorDetailsQueryWrapper);
}
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> {
}
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);
}
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);
}
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> {
}
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);
}
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);
}
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);
}
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);
    /**
     * æŸ¥è¯¢è¯¥è®¡åˆ’监督员
     * @param superviseDetailsId
     * @return
     */
    List<Map<String, String>> getRecordUser(Integer superviseDetailsId);
}
cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistribution.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * <p>
 * ä¸ç¬¦åˆé¡¹çš„分布
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 09:53:20
 */
@Data
@TableName("cnas_inconsistent_distribution")
@ApiModel(value = "InconsistentDistribution对象", description = "不符合项的分布")
public class InconsistentDistribution {
    @TableId(value = "distribution_id", type = IdType.AUTO)
    private Integer distributionId;
    @ApiModelProperty("年份")
    private String distributionYear;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * <p>
 * ä¸ç¬¦åˆé¡¹çš„分布详情
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 09:53:33
 */
@Data
@TableName("cnas_inconsistent_distribution_detail")
@ApiModel(value = "InconsistentDistributionDetail对象", description = "不符合项的分布详情")
public class InconsistentDistributionDetail {
    @TableId(value = "distribution_detail_id", type = IdType.AUTO)
    private Integer distributionDetailId;
    @ApiModelProperty("主表id")
    private Integer distributionId;
    @ApiModelProperty("章节号")
    private String chapterNumber;
    @ApiModelProperty("要素")
    private String essentials;
    @ApiModelProperty("主任")
    private Integer director;
    @ApiModelProperty("技术负责人")
    private Integer technology;
    @ApiModelProperty("质量负责人")
    private Integer quality;
    @ApiModelProperty("综合室")
    private Integer comprehensive;
    @ApiModelProperty("试验室")
    private Integer testing;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("合计")
    @TableField(select = false,exist = false)
    private Integer total;
    @ApiModelProperty("占比")
    @TableField(select = false,exist = false)
    private BigDecimal proportion;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æ£€éªŒå§”托单
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-09
 */
@Getter
@Setter
@TableName("cnas_inspection_order")
@ApiModel(value = "InspectionOrder对象", description = "检验委托单")
public class InspectionOrder {
    @TableId(value = "inspection_order_id", type = IdType.AUTO)
    private Integer inspectionOrderId;
    @ApiModelProperty("成品订单id")
    private Integer insOrderId;
    @ApiModelProperty("委托编号")
    private String entrustCode;
    @ApiModelProperty("试样名称")
    private String sampleName;
    @ApiModelProperty("型号")
    private String modelNo;
    @ApiModelProperty("生产单位")
    private String production;
    @ApiModelProperty("样品数量")
    private String quantity;
    @ApiModelProperty("委托时间")
    private LocalDate commissionDate;
    @ApiModelProperty("委托单位")
    private String commissionUnit;
    @ApiModelProperty("委托人")
    private String commissionUser;
    @ApiModelProperty("委托人联系方式")
    private String commissionPhone;
    @ApiModelProperty("样品状态")
    private String sampleStatus;
    @ApiModelProperty("是否留样1: æ˜¯, 2:否")
    private Integer isLeave;
    @ApiModelProperty("样品处理方式 1:实验室处理 0:委托单位取回")
    private Integer processing;
    @ApiModelProperty("约定时间")
    private LocalDate appointed;
    @ApiModelProperty("报告发送方式 1:自取 0:其他")
    private Integer send;
    @ApiModelProperty("判断规则 1:考虑不确定度 0:不考虑不确定度")
    private Integer criterionRule;
    @ApiModelProperty("判断规则考虑不确定度备注")
    private String criterionRuleRemark;
    @ApiModelProperty("综合室人员")
    private String generalOfficeUser;
    @ApiModelProperty("接收日期")
    private LocalDate receiptData;
    @ApiModelProperty("领样人员")
    private String sampleTakerUser;
    @ApiModelProperty("领样日期")
    private LocalDate sampleData;
    @ApiModelProperty("报告文件地址")
    private String fileUrl;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/InspectionOrderDetail.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
 * <p>
 * æ£€éªŒå§”托单详情表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-09
 */
@Getter
@Setter
@TableName("cnas_inspection_order_detail")
@ApiModel(value = "InspectionOrderDetail对象", description = "检验委托单详情表")
public class InspectionOrderDetail {
    @TableId(value = "inspection_order_detail_id", type = IdType.AUTO)
    private Integer inspectionOrderDetailId;
    @ApiModelProperty("委托单id")
    private Integer inspectionOrderId;
    @ApiModelProperty("样品编号")
    private String sampleNumber;
    @ApiModelProperty("试验项目")
    private String testItem;
    @ApiModelProperty("试验依据")
    private String testStandard;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    // å¯¼å‡ºä½¿ç”¨
    @TableField(select = false, exist = false)
    private Integer index;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessComplain.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
package com.ruoyi.process.pojo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æŠ•诉
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 09:29:11
 */
@Getter
@Setter
@TableName("cnas_process_complain")
@ApiModel(value = "ProcessComplain对象", description = "投诉")
public class ProcessComplain  implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ExcelIgnore
    private Integer id;
    @ApiModelProperty("投诉编号")
    @ExcelIgnore
    private String complainNo;
    @ApiModelProperty("投诉名称")
    @ExcelProperty(value = "投诉名称")
    private String complainName;
    @ApiModelProperty("外键关联(检测报告id)")
    @ExcelIgnore
    private Integer insReportId;
    @ExcelIgnore
    @TableField(select = false,exist = false)
    //用来新增传参的报告编号
    private String code;
    @ApiModelProperty("样品编号")
    @ExcelIgnore
    private String sampleCode;
    @ApiModelProperty("投诉人")
    @TableField(fill = FieldFill.INSERT)
    @ExcelIgnore
    private Integer createUser;
    @ExcelProperty(value = "投诉人")
    @TableField(select = false,exist = false)
    private String complainant;
    @ApiModelProperty("投诉日期")
    @ExcelProperty(value = "投诉日期")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ExcelIgnore
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ExcelIgnore
    private LocalDateTime updateTime;
    @ApiModelProperty("投诉方式")
    @ExcelIgnore
    private String complainMethod;
    @ApiModelProperty("问题记录")
    @ExcelIgnore
    private String problemRecords;
    @ApiModelProperty("问题记录-质量负责人")
    @ExcelIgnore
    private Integer problemRecordsUser;
    @ApiModelProperty("问题记录-日期")
    @ExcelIgnore
    private LocalDate problemRecordsTime;
    @ApiModelProperty("责任归属及投诉是否成立")
    @ExcelIgnore
    private String dutyOwnership;
    @ApiModelProperty("责任归属及投诉是否成立_质量负责人")
    @ExcelIgnore
    private Integer dutyOwnershipUser;
    @ApiModelProperty("责任归属及投诉是否成立_日期")
    @ExcelIgnore
    private LocalDate dutyOwnershipTime;
    @ApiModelProperty("原因分析")
    @ExcelIgnore
    private String causeAnalysis;
    @ApiModelProperty("原因分析_责任部门负责人")
    @ExcelIgnore
    private Integer causeAnalysisUser;
    @ApiModelProperty("原因分析_日期")
    @ExcelIgnore
    private LocalDate causeAnalysisTime;
    @ApiModelProperty("纠正措施")
    @ExcelIgnore
    private String correctiveAction;
    @ApiModelProperty("纠正措施_责任部门负责人")
    @ExcelIgnore
    private Integer correctiveActionUser;
    @ApiModelProperty("纠正措施_日期")
    @ExcelIgnore
    private LocalDate correctiveActionTime;
    @ApiModelProperty("纠正措施确认")
    @ExcelIgnore
    private String correctiveActionConfirmation;
    @ApiModelProperty("纠正措施确认_质量负责人")
    @ExcelIgnore
    private Integer correctiveActionConfirmationUser;
    @ApiModelProperty("纠正措施确认_日期")
    @ExcelIgnore
    private LocalDate correctiveActionConfirmationTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessDeal.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 02:50:19
 */
@Getter
@Setter
@TableName("cnas_process_deal")
@ApiModel(value = "ProcessDeal对象", description = "检测或校准物品的处置")
public class ProcessDeal implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("样品名称")
    private String sampleName;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("供样单位")
    private String sampleSupplier;
    @ApiModelProperty("数量")
    private Integer num;
    @ApiModelProperty("处理方式")
    private String dealMethod;
    @ApiModelProperty("时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate dealTime;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("关联的历史总表id")
    private Integer totaldealId;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessEvaluate.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.ruoyi.process.pojo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æµ‹é‡ä¸ç¡®å®šåº¦çš„评价
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 01:10:43
 */
@Getter
@Setter
@TableName("cnas_process_evaluate")
@ApiModel(value = "ProcessEvaluate对象", description = "测量不确定度的评价")
public class ProcessEvaluate  implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ExcelIgnore
    private Integer id;
    @ApiModelProperty("报告名称")
    @ExcelProperty(value = "报告名称")
    private String reportName;
    @ApiModelProperty("报告路径")
    @ExcelIgnore
    private String reportUrl;
    @ApiModelProperty("评价人")
    @ExcelIgnore
    private Integer evaluateUser;
    @TableField(select = false,exist = false)
    @ExcelProperty(value = "评价人")
    private String evaluateUserName;
    @ApiModelProperty("评价日期")
    @ExcelProperty(value = "评价日期")
    private LocalDate evaluateTime;
    @ApiModelProperty("备注")
    @ExcelProperty(value = "备注")
    private String note;
    @TableField(fill = FieldFill.INSERT)
    @ExcelIgnore
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ExcelIgnore
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT)
    @ExcelIgnore
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ExcelIgnore
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * æ ‡å‡†æŸ¥æ–°
 *
 * @author zhuo
 * @since 2024-11-04
 */
@Data
@TableName("cnas_process_method_search_new")
@ApiModel(value = "标准查新对象", description = "标准查新表")
public class ProcessMethodSearchNew {
    @TableId(type = IdType.AUTO)
    private Integer methodSearchNewId;
    @ApiModelProperty("标准方法验证id")
    private Integer verifyId;
    @ApiModelProperty("标准名称")
    private String methodName;
    @ApiModelProperty("标准号")
    private String standardNo;
    @ApiModelProperty("文件编号")
    private String fileNo;
    @ApiModelProperty("是否是新标准, 0否,1是")
    private Integer isNewStandard;
    @ApiModelProperty("新标准名称")
    private String newMethodName;
    @ApiModelProperty("新标准号")
    private String newStandardNo;
    @ApiModelProperty("查新记录来源, 0,标准网, 1委托情报, 2标准数, 3其他")
    private Integer searchNewSource;
    @ApiModelProperty("备注,0作废, 1替换")
    private Integer remark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewArchived.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ‡å‡†æŸ¥æ–°å­˜æ¡£è¡¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-25 05:28:42
 */
@Getter
@Setter
@TableName("cnas_process_method_search_new_archived")
@ApiModel(value = "ProcessMethodSearchNewArchived对象", description = "标准查新存档表")
public class ProcessMethodSearchNewArchived implements Serializable {
    @TableId(value = "archived_id", type = IdType.AUTO)
    private Integer archivedId;
    @ApiModelProperty("存档名称")
    private String archivedName;
    @ApiModelProperty("编制人")
    private Integer writeUserId;
    @ApiModelProperty("编制时间")
    private LocalDateTime writeTime;
    @ApiModelProperty("批准人")
    private Integer ratifyUserId;
    @ApiModelProperty("批准时间")
    private LocalDateTime ratifyTime;
    @ApiModelProperty("批准状态,0 ä¸é€šè¿‡, 1 é€šè¿‡")
    private Integer ratifyStatus;
    @ApiModelProperty("批准信息")
    private String ratifyRemark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNewBackups.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
package com.ruoyi.process.pojo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ‡å‡†æŸ¥æ–°å¤‡ä»½è¡¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-25 05:29:02
 */
@Getter
@Setter
@ExcelIgnoreUnannotated
@TableName("cnas_process_method_search_new_backups")
@ApiModel(value = "ProcessMethodSearchNewBackups对象", description = "标准查新备份表")
public class ProcessMethodSearchNewBackups{
    @TableId(value = "backups_id", type = IdType.AUTO)
    private Integer backupsId;
    @ApiModelProperty("存档id")
    private Integer archivedId;
    @ApiModelProperty("标准方法验证id")
    private Integer verifyId;
    @ExcelProperty(value = {"标准名称", "标准名称"}, index = 1)
    @ApiModelProperty("标准名称")
    private String methodName;
    @ExcelProperty(value = {"标准号", "标准号"}, index = 2)
    @ApiModelProperty("标准号")
    private String standardNo;
    @ExcelProperty(value = {"文件编号", "文件编号"}, index = 3)
    @ApiModelProperty("文件编号")
    private String fileNo;
    @ApiModelProperty("是否是新标准, 0否,1是")
    private Integer isNewStandard;
    @ExcelProperty(value = {"新标准名称", "新标准名称"}, index = 5)
    @ApiModelProperty("新标准名称")
    private String newMethodName;
    @ExcelProperty(value = {"新标准号", "新标准号"}, index =6)
    @ApiModelProperty("新标准号")
    private String newStandardNo;
    @ApiModelProperty("查新记录来源, 0,标准网, 1委托情报, 2标准数, 3其他")
    private Integer searchNewSource;
    @ApiModelProperty("备注,0作废, 1替换")
    private Integer remark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerify.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,133 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * æ ‡å‡†æ–¹æ³•验证
 *
 * @author zhuo
 * @since 2024-11-05
 */
@Data
@TableName("cnas_process_method_verify")
public class ProcessMethodVerify {
    @TableId(type = IdType.AUTO)
    private Integer methodVerifyId;
    @ApiModelProperty("0变更,1验证")
    private Integer operationType;
    @ApiModelProperty("标准方法")
    private String methodName;
    @ApiModelProperty("验证原因")
    private String verifyReason;
    @ApiModelProperty("主要技术变化")
    private String technologyChange;
    @ApiModelProperty("(人)标准要求")
    private String personRequirements;
    @ApiModelProperty("(人)准备情况")
    private String personReadiness;
    @ApiModelProperty("(人)是否满足")
    private Integer personIsSatisfied;
    @ApiModelProperty("(人)备注")
    private String personRemark;
    @ApiModelProperty("(机)标准要求")
    private String machineRequirements;
    @ApiModelProperty("(机)准备情况")
    private String machineReadiness;
    @ApiModelProperty("(机)是否满足")
    private Integer machineIsSatisfied;
    @ApiModelProperty("(机)备注")
    private String machineRemark;
    @ApiModelProperty("(料)标准要求")
    private String materialRequirements;
    @ApiModelProperty("(料)准备情况")
    private String materialReadiness;
    @ApiModelProperty("(料)是否满足")
    private Integer materialIsSatisfied;
    @ApiModelProperty("(料)备注")
    private String materialRemark;
    @ApiModelProperty("(法)标准要求")
    private String methodRequirements;
    @ApiModelProperty("(法)准备情况")
    private String methodReadiness;
    @ApiModelProperty("(法)是否满足")
    private Integer methodIsSatisfied;
    @ApiModelProperty("(法)备注")
    private String methodRemark;
    @ApiModelProperty("(环)标准要求")
    private String environmentRequirements;
    @ApiModelProperty("(环)准备情况")
    private String environmentReadiness;
    @ApiModelProperty("(环)是否满足")
    private Integer environmentIsSatisfied;
    @ApiModelProperty("(环)备注")
    private String environmentRemark;
    @ApiModelProperty("(测量溯源性)标准要求")
    private String traceabilityRequirements;
    @ApiModelProperty("(测量溯源性)准备情况")
    private String traceabilityReadiness;
    @ApiModelProperty("(测量溯源性)是否满足")
    private Integer traceabilityIsSatisfied;
    @ApiModelProperty("(测量溯源性)备注")
    private String traceabilityRemark;
    @ApiModelProperty("(样品管理需求)标准要求")
    private String managementRequirements;
    @ApiModelProperty("(样品管理需求)准备情况")
    private String managementReadiness;
    @ApiModelProperty("(样品管理需求)是否满足")
    private Integer managementIsSatisfied;
    @ApiModelProperty("(样品管理需求)备注")
    private String managementRemark;
    @ApiModelProperty("(其他)标准要求")
    private String otherRequirements;
    @ApiModelProperty("(其他)准备情况")
    private String otherReadiness;
    @ApiModelProperty("(其他)是否满足")
    private Integer otherIsSatisfied;
    @ApiModelProperty("(其他)备注")
    private String otherRemark;
    @ApiModelProperty("确认时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime confirmDate;
    @ApiModelProperty("确认人员")
    private String confirmUser;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyCalibrationsFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * æ ‡å‡†æ–¹æ³•验证设备校准附件表
 *
 * @author zhuo
 * @since 2024-11-12
 */
@Data
@TableName("cnas_process_method_verify_calibrations_file")
public class ProcessMethodVerifyCalibrationsFile {
    @TableId(type = IdType.AUTO)
    private Integer calibrationsFileId;
    @ApiModelProperty("方法验证id")
    private Integer methodVerifyId;
    @ApiModelProperty("类型:1图片/2文件")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMachineAttachment.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * æ ‡å‡†æ–¹æ³•验证设备附件表
 *
 * @author zhuo
 * @since 2024-11-05
 */
@Data
@TableName("cnas_process_method_verify_machine_attachment")
public class ProcessMethodVerifyMachineAttachment {
    @TableId(type = IdType.AUTO)
    private Integer machineAttachmentId;
    @ApiModelProperty("方法验证id")
    private Integer methodVerifyId;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("设备名称")
    private String machineName;
    @ApiModelProperty("规格型号")
    private String machineSpecification;
    @ApiModelProperty("策略范围")
    private String machineMeasuringRange;
    @ApiModelProperty("扩展信息")
    private String other;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyMethodFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * æ ‡å‡†æ–¹æ³•验证(法)附件表
 *
 * @author zhuo
 * @since 2024-11-05
 */
@Data
@TableName("cnas_process_method_verify_method_file")
public class ProcessMethodVerifyMethodFile {
    @TableId(type = IdType.AUTO)
    private Integer methodFileId;
    @ApiModelProperty("方法验证id")
    private Integer methodVerifyId;
    @ApiModelProperty("类型:1图片/2文件")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodVerifyWorkFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * æ ‡å‡†æ–¹æ³•验证上岗证附件表
 *
 * @author zhuo
 * @since 2024-11-12
 */
@Data
@TableName("cnas_process_method_verify_work_file")
public class ProcessMethodVerifyWorkFile {
    @TableId(type = IdType.AUTO)
    private Integer workFileId;
    @ApiModelProperty("方法验证id")
    private Integer methodVerifyId;
    @ApiModelProperty("类型:1图片/2文件")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @ApiModelProperty("持有人id")
    private Integer userId;
    @ApiModelProperty("持有人")
    private String userName;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessReport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æ£€éªŒæŠ¥å‘Šå‘放登记表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-05 08:58:39
 */
@Getter
@Setter
@TableName("cnas_process_report")
@ApiModel(value = "ProcessReport对象", description = "检验报告发放登记表")
public class ProcessReport  implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("检验报告编号")
    private String insReportCode;
    @ApiModelProperty("页数")
    private String pages;
    @ApiModelProperty("发送份数")
    private String number;
    @ApiModelProperty("发往何处")
    private String send;
    @ApiModelProperty("发送方式")
    private String method;
    @ApiModelProperty("发送日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate sendTime;
    @ApiModelProperty("发送人")
    private Integer sendUser;
    @TableField(select = false,exist = false)
    private String sendUserName;
    @ApiModelProperty("签收人")
    private String signatory;
    @TableField(select = false,exist = false)
    private String signatoryUrl;
    @TableField(select = false,exist = false)
    private String signatoryName;
    @ApiModelProperty("备注")
    private String remark;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSample.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:49
 */
@Getter
@Setter
@TableName("cnas_process_sample")
@ApiModel(value = "ProcessSample对象", description = "样品接收")
public class ProcessSample  implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("样品名称")
    private String sampleName;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("来样单位")
    private String sampleSupplier;
    @ApiModelProperty("样品数量")
    private Integer num;
    @ApiModelProperty("样品状态")
    private String sampleState;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("关联总表历史id")
    private Integer totalSampleId;
    @ApiModelProperty("收样日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate receiveDate;
    @ApiModelProperty("留样日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate leaveDate;
    @ApiModelProperty("退样签收/处理日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate dealTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotalSample.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶æ€»è¡¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:58
 */
@Getter
@Setter
@TableName("cnas_process_total_sample")
@ApiModel(value = "ProcessTotalSample对象", description = "样品接收总表")
public class ProcessTotalSample  implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("审核人")
    private Integer examineUser;
    @ApiModelProperty("审核结果")
    private String examineState;
    @ApiModelProperty("审核人电子签名url")
    private String examineUrl;
    @TableField(select = false, exist = false)
    private String examineUserName;
    @ApiModelProperty("批准人")
    private Integer ratifyUser;
    @ApiModelProperty("批准结果")
    private String ratifyState;
    @ApiModelProperty("批准人电子签名url")
    private String ratifyUrl;
    @TableField(select = false, exist = false)
    private String ratifyUserName;
    @ApiModelProperty("提交人")
    private Integer submitUser;
    @TableField(select = false, exist = false)
    private String submitUserName;
    @ApiModelProperty("提交结果")
    private String submitState;
    @ApiModelProperty("提交人电子签名url")
    private String submitUrl;
    @ApiModelProperty("总数量")
    private Integer totalNum;
    @ApiModelProperty("月份")
    private String month;
    @ApiModelProperty("生成申请表的路径")
    private String url;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessTotaldeal.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置总表(历史)
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 03:59:09
 */
@Getter
@Setter
@TableName("cnas_process_totaldeal")
@ApiModel(value = "ProcessTotaldeal对象", description = "检测或校准物品的处置总表(历史)")
public class ProcessTotaldeal  implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("审核人")
    private Integer examineUser;
    @ApiModelProperty("审核结果")
    private String examineState;
    @ApiModelProperty("审核人电子签名url")
    private String examineUrl;
    @TableField(select = false, exist = false)
    private String examineUserName;
    @ApiModelProperty("批准人")
    private Integer ratifyUser;
    @ApiModelProperty("批准结果")
    private String ratifyState;
    @ApiModelProperty("批准人电子签名url")
    private String ratifyUrl;
    @TableField(select = false, exist = false)
    private String ratifyUserName;
    @ApiModelProperty("提交人")
    private Integer submitUser;
    @TableField(select = false, exist = false)
    private String submitUserName;
    @ApiModelProperty("提交结果")
    private String submitState;
    @ApiModelProperty("提交人电子签名url")
    private String submitUrl;
    @ApiModelProperty("总数量")
    private Integer totalNum;
    @ApiModelProperty("月份")
    private String month;
    @ApiModelProperty("生成申请表的路径")
    private String url;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitor.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘控计划主表
 *
 * @author zhuo
 * @since 2024-11-06
 */
@Data
@TableName("cnas_quality_monitor")
@ApiModel(value = "QualityMonitor对象", description = "质量监控计划主表")
public class QualityMonitor {
    @TableId(type = IdType.AUTO)
    private Integer qualityMonitorId;
    @ApiModelProperty("计划名称")
    private String monitorName;
    @ApiModelProperty("计划年份")
    private String monitorYear;
    @ApiModelProperty("外键:用户id(编制人)")
    private Integer writeUserId;
    @ApiModelProperty("编制时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime writeTime;
    @ApiModelProperty("外键:用户id(审核人)")
    private Integer examineUserId;
    @ApiModelProperty("审核时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime examineTime;
    @ApiModelProperty("审核状态 , 0 ä¸é€šè¿‡, 1通过")
    private Integer examineStatus;
    @ApiModelProperty("审核内容")
    private String examineRemark;
    @ApiModelProperty("外键:用户id(批准人)")
    private Integer ratifyUserId;
    @ApiModelProperty("批准时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime ratifyTime;
    @ApiModelProperty("批准状态, 0 ä¸é€šè¿‡, 1通过")
    private Integer ratifyStatus;
    @ApiModelProperty("批准内容")
    private String ratifyRemark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetails.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘控计划详情表
 *
 * @author zhuo
 * @since 2024-11-06
 */
@Data
@TableName("cnas_quality_monitor_details")
@ApiModel(value = "QualityMonitorDetails对象", description = "质量监控计划详情表")
public class QualityMonitorDetails {
    @TableId(type = IdType.AUTO)
    private Integer qualityMonitorDetailsId;
    @ApiModelProperty("监控计划id")
    private Integer qualityMonitorId;
    @ApiModelProperty("监控目的")
    private String monitorPurpose;
    @ApiModelProperty("计划开展时间")
    private String plannedTime;
    @ApiModelProperty("监控项目")
    private String monitorProject;
    @ApiModelProperty("参加人员")
    private String participant;
    @ApiModelProperty("预算")
    private String budget;
    @ApiModelProperty("组织人员")
    private String organization;
    @ApiModelProperty("监控方式")
    private String monitorWay;
    @ApiModelProperty("完成报告地址")
    private String finishReportUrl;
    @ApiModelProperty("完成报告批准人")
    private Integer ratifyUserId;
    @ApiModelProperty("完成报告批准时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime ratifyTime;
    @ApiModelProperty("完成报告批准状态, 0 ä¸é€šè¿‡, 1通过")
    private Integer ratifyStatus;
    @ApiModelProperty("完成报告批准内容")
    private String ratifyRemark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    // å¯¼å‡ºä½¿ç”¨
    @TableField(select = false, exist = false)
    private Integer index;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluate.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘控计划详情评价表
 *
 * @author zhuo
 * @since 2024-11-06
 */
@Data
@TableName("cnas_quality_monitor_details_evaluate")
@ApiModel(value = "QualityMonitorDetailsEvaluate对象", description = "质量监控计划详情评价表")
public class QualityMonitorDetailsEvaluate {
    @TableId(type = IdType.AUTO)
    private Integer detailsEvaluateId;
    @ApiModelProperty("监控计划详情id")
    private Integer qualityMonitorDetailsId;
    @ApiModelProperty("评审目的")
    private String reviewPurpose;
    @ApiModelProperty("评审人员")
    private String reviewUser;
    @ApiModelProperty("评审日期")
    private String reviewTime;
    @ApiModelProperty("实施情况")
    private String implementCondition;
    @ApiModelProperty("实施部门")
    private String implementDepartment;
    @ApiModelProperty("实施结果")
    private String implementResult;
    @ApiModelProperty("实施技术负责人")
    private Integer implementUserId;
    @ApiModelProperty("批准结论")
    private String ratifyOpinion;
    @ApiModelProperty("批准技术负责人")
    private Integer ratifyUserId;
    @ApiModelProperty("批准时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDateTime ratifyTime;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("是否结束0:未结束, 1:已结束")
    private Integer isFinish;
    @ApiModelProperty("实施技术负责人名称")
    @TableField(exist = false,select = false)
    private String implementName;
    @ApiModelProperty("批准技术负责人名称")
    @TableField(exist = false,select = false)
    private String ratifyUserName;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsEvaluateFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘控计划详情评价附件表
 *
 * @author zhuo
 * @since 2024-11-07
 */
@Data
@TableName("cnas_quality_monitor_details_evaluate_file")
@ApiModel(value = "QualityMonitorDetailsEvaluateFile对象", description = "质量监控计划详情评价附件表")
public class QualityMonitorDetailsEvaluateFile {
    @TableId(type = IdType.AUTO)
    private Integer evaluateFileId;
    @ApiModelProperty("评价id")
    private Integer detailsEvaluateId;
    @ApiModelProperty("类型:1图片/2文件")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualityMonitorDetailsRatify.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘控计划详情批准表
 *
 * @author zhuo
 * @since 2024-11-06
 */
@Data
@TableName("cnas_quality_monitor_details_ratify")
@ApiModel(value = "QualityMonitorDetailsRatify对象", description = "质量监控计划详情批准表")
public class QualityMonitorDetailsRatify {
    @TableId(type = IdType.AUTO)
    private Integer detailsRatifyId;
    @ApiModelProperty("监控计划详情id")
    private Integer qualityMonitorDetailsId;
    @ApiModelProperty("监控项目")
    private String monitorProject;
    @ApiModelProperty("监控目的")
    private String monitorPurpose;
    @ApiModelProperty("监控时间")
    private String monitorData;
    @ApiModelProperty("监控方法")
    private String monitorMethod;
    @ApiModelProperty("参加人员")
    private String participant;
    @ApiModelProperty("过程控制")
    private String processControl;
    @ApiModelProperty("如何评价")
    private String howEvaluate;
    @ApiModelProperty("预算")
    private String budget;
    @ApiModelProperty("检测部门")
    private String inspectionDepartment;
    @ApiModelProperty("批准意见")
    private String ratifyOpinion;
    @ApiModelProperty("技术负责人")
    private Integer ratifyUserId;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("是否结束0:未结束, 1:已结束")
    private Integer isFinish;
    @ApiModelProperty("技术负责人")
    @TableField(exist = false,select = false)
    private String ratifyName;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySupervise.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘督主表
 *
 * @author zhuo
 * @since 2024-11-07
 */
@Data
@TableName("cnas_quality_supervise")
@ApiModel(value = "QualitySupervise对象", description = "质量监督主表")
public class QualitySupervise {
    @TableId(type = IdType.AUTO)
    private Integer superviseId;
    @ApiModelProperty("监督名称")
    private String superviseName;
    @ApiModelProperty("年份")
    private String superviseYear;
    @ApiModelProperty("监督人id(多个)")
    private String recordUserIds;
    @ApiModelProperty("外键:用户id(编制人)")
    private Integer writeUserId;
    @ApiModelProperty("编制人")
    private String writeUserName;
    @ApiModelProperty("编制时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime writeTime;
    @ApiModelProperty("外键:用户id(批准人)")
    private Integer ratifyUserId;
    @ApiModelProperty("批准人")
    private String ratifyUserName;
    @ApiModelProperty("批准时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime ratifyTime;
    @ApiModelProperty("批准状态, 0 ä¸é€šè¿‡, 1通过")
    private Integer ratifyStatus;
    @ApiModelProperty("批准内容")
    private String ratifyRemark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetails.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘督详情表
 *
 * @author zhuo
 * @since 2024-11-07
 */
@Data
@TableName("cnas_quality_supervise_details")
@ApiModel(value = "QualitySuperviseDetails对象", description = "质量监督详情表")
public class QualitySuperviseDetails {
    @TableId(type = IdType.AUTO)
    private Integer superviseDetailsId;
    @ApiModelProperty("监督计划id")
    private Integer superviseId;
    @ApiModelProperty("监督日期")
    private String superviseTime;
    @ApiModelProperty("监督目的")
    private String supervisePurpose;
    @ApiModelProperty("监督项目")
    private String superviseProject;
    @ApiModelProperty("被监督人id")
    private Integer supervisedUserId;
    @ApiModelProperty("被监督人")
    private String supervisee;
    @ApiModelProperty("监督原因")
    private String superviseReason;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("监督员id")
    private Integer recordUserId;
    @ApiModelProperty("监督员名称")
    private Integer recordUserName;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    // å¯¼å‡ºä½¿ç”¨
    @TableField(select = false, exist = false)
    private Integer index;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsAccording.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘督详情不符合项控制表
 *
 * @author zhuo
 * @since 2024-11-07
 */
@Data
@TableName("cnas_quality_supervise_details_according")
@ApiModel(value = "QualitySuperviseDetailsAccording对象", description = "质量监督详情不符合项控制表")
public class QualitySuperviseDetailsAccording {
    @TableId(type = IdType.AUTO)
    private Integer superviseDetailsAccordingId;
    @ApiModelProperty("监督详情id")
    private Integer superviseDetailsId;
    @ApiModelProperty("0发生部门")
    private String occurrenceDepartment;
    @ApiModelProperty("0部门负责人")
    private String headDepartment;
    @ApiModelProperty("0发现途径,0:管理评审,1:内部审核,2:检测过程控制,3:内部质量控制,4:内部监督,5:外部评审,6:外部投诉,7:其他")
    private Integer findWay;
    @ApiModelProperty("0不符合记录详情")
    private String recordDetail;
    @ApiModelProperty("0不合格记录依据")
    private String recordAccording;
    @ApiModelProperty("0发现部门")
    private String foundDepartment;
    @ApiModelProperty("0记录人id")
    private Integer recordUserId;
    @ApiModelProperty("0记录人")
    private String recordUserName;
    @ApiModelProperty("0记录时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate recordTime;
    @ApiModelProperty("0被监督人id")
    private Integer supervisedUserId;
    @ApiModelProperty("0被监督人")
    private String supervisedUserName;
    @ApiModelProperty("0被监督时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate supervisedTime;
    @ApiModelProperty("1清除不符合措施")
    private String eliminateMeasure;
    @ApiModelProperty("1责任部门")
    private String responsibleDepartment;
    @ApiModelProperty("1处理人id")
    private Integer actionsUserId;
    @ApiModelProperty("1处理人")
    private String actionsUserName;
    @ApiModelProperty("1处理时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate actionsTime;
    @ApiModelProperty("2纠正措施内容")
    private String correctContent;
    @ApiModelProperty("2是否纠正处理, 0否, 1是")
    private Integer isCorrect;
    @ApiModelProperty("2纠正技术负责人id")
    private Integer correctUserId;
    @ApiModelProperty("2纠正技术负责人")
    private String correctUserName;
    @ApiModelProperty("2纠正填写时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate correctTime;
    @ApiModelProperty("3是否通知客户, 0否, 1是")
    private Integer notifyCustomer;
    @ApiModelProperty("3是否恢复工作, 0否, 1是")
    private Integer backToWork;
    @ApiModelProperty("3质量负责人id")
    private Integer qualityManagerUserId;
    @ApiModelProperty("3质量负责人")
    private String qualityManagerUserName;
    @ApiModelProperty("3质量负责人填写时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate qualityManagerTime;
    @ApiModelProperty("是否结束,0: æœªç»“束, 1:结束")
    private Integer isFinish;
    @ApiModelProperty("批准人")
    private Integer approverUserId;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @TableField(exist = false,select = false)
    @ApiModelProperty("流程, 0:不符合工作情况记录, 1处理措施, 2:纠正措施, 3:是否通知客户可恢复工作")
    private Integer flowType;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘督详情纠正处理表
 *
 * @author zhuo
 * @since 2024-11-07
 */
@Data
@TableName("cnas_quality_supervise_details_correct")
@ApiModel(value = "QualitySuperviseDetailsCorrect对象", description = "质量监督详情纠正处理表")
public class QualitySuperviseDetailsCorrect {
    @TableId(type = IdType.AUTO)
    private Integer superviseDetailsCorrectId;
    @ApiModelProperty("监督详情id")
    private Integer superviseDetailsId;
    @ApiModelProperty("人员培训详情Id")
    private Integer personTrainingDetailedId;
    @ApiModelProperty("0不合格描述")
    private String raiseResult;
    @ApiModelProperty("0vde专家发现")
    private String vdeRaiseResult;
    @ApiModelProperty("0提出部门")
    private String raiseDepartment;
    @ApiModelProperty("0提出人id")
    private Integer raiseUserId;
    @ApiModelProperty("0提出人")
    private String raiseUserName;
    @ApiModelProperty("0提出时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate raiseTime;
    @ApiModelProperty("1原因分析")
    private String causeResult;
    @ApiModelProperty("1原因分析责任部门")
    private String causeDepartment;
    @ApiModelProperty("1原因分析人id")
    private Integer causeUserId;
    @ApiModelProperty("1原因分析人")
    private String causeUserName;
    @ApiModelProperty("1原因分析时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate causeTime;
    @ApiModelProperty("2纠正措施")
    private String correctResult;
    @ApiModelProperty("2提出部门确认")
    private String raiseDepartmentAffirm;
    @ApiModelProperty("2纠正责任部门")
    private String correctDepartment;
    @ApiModelProperty("2纠正人id")
    private Integer correctUserId;
    @ApiModelProperty("2纠正人")
    private String correctUserName;
    @ApiModelProperty("2纠正时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate correctTime;
    @ApiModelProperty("3验证结果")
    private String validationResult;
    @ApiModelProperty("3验证部门")
    private String validationDepartment;
    @ApiModelProperty("3验证人id")
    private Integer validationUserId;
    @ApiModelProperty("3验证人")
    private String validationUserName;
    @ApiModelProperty("3验证时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate validationTime;
    @ApiModelProperty("是否结束, 0: æœªç»“束, 1:已结束")
    private Integer isFinish;
    @ApiModelProperty("批准人")
    private Integer approverUserId;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @TableField(exist = false,select = false)
    @ApiModelProperty("流程, 0:不合格提出, 1:原因分析, 2:纠正措施, 3:验证结果")
    private Integer flowType;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsCorrectFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘督详情纠正措施附件表
 *
 * @author zhuo
 * @since 2024-11-09
 */
@Data
@TableName("cnas_quality_supervise_details_correct_file")
@ApiModel(value = "QualitySuperviseDetailsCorrectFile对象", description = "质量监督详情纠正措施附件表")
public class QualitySuperviseDetailsCorrectFile {
    @TableId(type = IdType.AUTO)
    private Integer superviseDetailsCorrectFileId;
    @ApiModelProperty("监督详情纠正措施id")
    private Integer superviseDetailsCorrectId;
    @ApiModelProperty("类型:1图片/2文件")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseDetailsRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * è´¨é‡ç›‘督详情记录表
 *
 * @author zhuo
 * @since 2024-11-07
 */
@Data
@TableName("cnas_quality_supervise_details_record")
@ApiModel(value = "QualitySuperviseDetailsRecord对象", description = "质量监督详情记录表")
public class QualitySuperviseDetailsRecord {
    @TableId(type = IdType.AUTO)
    private Integer superviseDetailsRecordId;
    @ApiModelProperty("监督详情id")
    private Integer superviseDetailsId;
    @ApiModelProperty("检测人员")
    private String testMember;
    @ApiModelProperty("监督员")
    private String supervisor;
    @ApiModelProperty("检测项目")
    private String testItem;
    @ApiModelProperty("样品编号")
    private String sampleNumber;
    @ApiModelProperty("检测日期")
    private String testDate;
    @ApiModelProperty("检测过程")
    private String testingProcess;
    @ApiModelProperty("情况记录")
    private String caseReload;
    @ApiModelProperty("人员")
    private String personnel;
    @ApiModelProperty("仪器设备")
    private String device;
    @ApiModelProperty("环境")
    private String environment;
    @ApiModelProperty("样品采集")
    private String sampleCollection;
    @ApiModelProperty("样品准备")
    private String samplePreparation;
    @ApiModelProperty("检测方法")
    private String detectionMethod;
    @ApiModelProperty("检测记录")
    private String inspectionRecord;
    @ApiModelProperty("检测报告")
    private String examiningReport;
    @ApiModelProperty("监督情况评价")
    private String supervisionEvaluation;
    @ApiModelProperty("不合格处理意见")
    private String handlingAdvice;
    @ApiModelProperty("批准结论")
    private String ratifyOpinion;
    @ApiModelProperty("批准技术负责人")
    private Integer ratifyUserId;
    @ApiModelProperty("批准时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDateTime ratifyTime;
    @ApiModelProperty("是否符合,0 ä¸ç¬¦åˆ, 1符合")
    private Integer isAccording;
    @ApiModelProperty("是否结束0:未结束, 1:已结束")
    private Integer isFinish;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("批准技术负责人")
    @TableField(exist = false,select = false)
    private String ratifyUserName;
}
cnas-process/src/main/java/com/ruoyi/process/schedule/ProcessTotaldealSchedule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.ruoyi.process.schedule;
import com.ruoyi.process.pojo.ProcessTotalSample;
import com.ruoyi.process.pojo.ProcessTotaldeal;
import com.ruoyi.process.service.ProcessTotalSampleService;
import com.ruoyi.process.service.ProcessTotaldealService;
import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@Component
public class ProcessTotaldealSchedule {
    @Resource
    private ProcessTotaldealService processTotaldealService;
    @Resource
    private ProcessTotalSampleService processTotalSampleService;
    @Scheduled(cron = "0 0 2 1 * ?") //每月1号2点
    public void processTotaldeal() {
        ProcessTotaldeal processTotaldeal = new ProcessTotaldeal();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Calendar calendar = Calendar.getInstance();
        String formattedDate = sdf.format(calendar.getTime());
        processTotaldeal.setMonth(formattedDate);
        processTotaldeal.setSubmitState("待提交");
        processTotaldealService.save(processTotaldeal);
        ProcessTotalSample processTotalSample = new ProcessTotalSample();
        BeanUtils.copyProperties(processTotaldeal,processTotalSample);
        processTotalSampleService.save(processTotalSample);
    }
}
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> {
}
cnas-process/src/main/java/com/ruoyi/process/service/InconsistentDistributionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.dto.InconsistentDistributionDto;
import com.ruoyi.process.pojo.InconsistentDistribution;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * ä¸ç¬¦åˆé¡¹çš„分布 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 09:53:20
 */
public interface InconsistentDistributionService extends IService<InconsistentDistribution> {
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布分页查询
     * @param page
     * @param inconsistentDistribution
     * @return
     */
    IPage<InconsistentDistributionDto> pageInconsistentDistribution(Page page, InconsistentDistribution inconsistentDistribution);
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布新增
     * @param inconsistentDistribution
     * @return
     */
    boolean addInconsistentDistribution(InconsistentDistributionDto inconsistentDistribution);
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布修改
     * @param inconsistentDistribution
     * @return
     */
    boolean updateInconsistentDistribution(InconsistentDistributionDto inconsistentDistribution);
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布删除
     * @param distributionId
     * @return
     */
    boolean delInconsistentDistribution(Integer distributionId);
    /**
     * ä¸ç¬¦åˆé¡¹çš„分布查看详情
     * @param distributionId
     * @return
     */
    InconsistentDistributionDto getInconsistentDistributionOne(Integer distributionId);
    /**
     * å¯¼å‡ºä¸ç¬¦åˆé¡¹çš„分布
     * @param distributionId
     * @param response
     */
    void exportInconsistentDistribution(Integer distributionId, HttpServletResponse response);
}
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> {
}
cnas-process/src/main/java/com/ruoyi/process/service/InspectionOrderService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.process.dto.InspectionOrderDto;
import com.ruoyi.process.pojo.InspectionOrder;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æ£€éªŒå§”托单 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-09
 */
public interface InspectionOrderService extends IService<InspectionOrder> {
    /**
     * æ£€éªŒå§”托单分页查询
     * @param page
     * @param inspectionOrder
     * @return
     */
    IPage<InspectionOrderDto> pageInspectionOrder(Page page, InspectionOrder inspectionOrder);
    /**
     * æ£€éªŒå§”托单新增
     * @param InspectionOrder
     * @return
     */
    boolean addInspectionOrder(InspectionOrderDto InspectionOrder);
    /**
     * æ£€éªŒå§”托单修改
     * @param InspectionOrder
     * @return
     */
    boolean updateInspectionOrder(InspectionOrderDto InspectionOrder);
    /**
     * æ£€éªŒå§”托单删除
     * @param inspectionOrderId
     * @return
     */
    boolean delInspectionOrder(Integer inspectionOrderId);
    /**
     * æ£€éªŒå§”托单查看详情
     * @param inspectionOrderId
     * @return
     */
    InspectionOrderDto getInspectionOrderOne(Integer inspectionOrderId);
    /**
     * æ ¹æ®æˆå“è®¢å•id查询委托单信息
     * @param insOrderId
     * @return
     */
    InspectionOrderDto getInspectionOrderByInsOderId(Integer insOrderId);
    /**
     * å§”托单查询成品订单
     * @return
     */
    IPage<InsOrder> getInsOrderOnInspection(Page page, InsOrder insOrder);
    /**
     * å§”托单成品报告上传
     * @param file
     * @param inspectionOrderId
     * @return
     */
    boolean uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId);
    /**
     * å¯¼å‡ºæ£€éªŒå§”托单
     * @param inspectionOrderId
     * @param response
     */
    void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response);
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessComplainService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.dto.ProcessComplainDto;
import com.ruoyi.process.pojo.ProcessComplain;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * <p>
 * æŠ•诉 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 09:29:11
 */
public interface ProcessComplainService extends IService<ProcessComplain> {
    IPage<ProcessComplain> pageProcessComplain(Page page, ProcessComplain processComplain);
    int addProcessComplain(ProcessComplain processComplain);
    ProcessComplainDto getProcessComplain(Long id);
    int doProcessComplain(ProcessComplain processComplain);
    void exportProcessComplain(ProcessComplain processComplain, HttpServletResponse response) throws Exception;
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessDealService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.pojo.ProcessDeal;
import java.util.Map;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 02:50:19
 */
public interface ProcessDealService extends IService<ProcessDeal> {
    IPage<ProcessDeal> pageProcessDeal(Page page, ProcessDeal processDeal);
    int addProcessDeal(ProcessDeal processDeal);
    int delProcessDeal(Integer id);
    int doProcessDeal(ProcessDeal processDeal);
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessEvaluateService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.pojo.ProcessEvaluate;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * <p>
 * æµ‹é‡ä¸ç¡®å®šåº¦çš„评价 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 01:10:43
 */
public interface ProcessEvaluateService extends IService<ProcessEvaluate> {
    IPage<ProcessEvaluate> pageProcessEvaluate(Page page, ProcessEvaluate processEvaluate);
    int addProcessEvaluate(MultipartFile file);
    int doProcessEvaluate(ProcessEvaluate processEvaluate);
    void exportProcessEvaluate(ProcessEvaluate processEvaluate, HttpServletResponse response) throws Exception;
}
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> {
}
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> {
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.dto.ProcessMethodSearchNewArchivedDto;
import com.ruoyi.process.dto.ProcessMethodSearchNewBackupsDto;
import com.ruoyi.process.pojo.ProcessMethodSearchNew;
import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * æ ‡å‡†æŸ¥æ–°
 *
 * @author zhuo
 * @since 2024-11-04
 */
public interface ProcessMethodSearchNewService extends IService<ProcessMethodSearchNew> {
    /**
     * æ–°å¢žæ ‡å‡†æŸ¥æ–°
     * @param processMethodSearchNewList
     * @return
     */
    boolean addMethodSearchNew(List<ProcessMethodSearchNew> processMethodSearchNewList);
    /**
     * æ ‡å‡†æŸ¥æ–°åˆ—表
     * @param processMethodSearchNew
     * @return
     */
    IPage<ProcessMethodSearchNew> pageMethodSearchNew(Page page, ProcessMethodSearchNewBackupsDto processMethodSearchNew);
    /**
     * æ ‡å‡†æŸ¥æ–°å¯¼å‡º
     * @param archivedId
     * @param response
     */
    void exportMethodSearchNew(Integer archivedId, HttpServletResponse response);
    /**
     * å¯¼å…¥æ ‡å‡†æŸ¥æ–°
     * @param file
     * @return
     */
    boolean importMethodSearchNew(MultipartFile file);
    /**
     * æ–°å¢žæ ‡å‡†æŸ¥æ–°å®¡æ‰¹æµç¨‹
     * @param archived
     * @return
     */
    boolean addSearchNewArchived(ProcessMethodSearchNewArchived archived);
    /**
     * æŸ¥è¯¢å­˜æ¡£
     * @param page
     * @param archived
     * @return
     */
    IPage<ProcessMethodSearchNewArchivedDto> pageSearchNewArchived(Page page, ProcessMethodSearchNewArchivedDto archived);
    /**
     * æŸ¥è¯¢å­˜æ¡£å¤‡ä»½åˆ—表
     * @param page
     * @param backups
     * @return
     */
    IPage<ProcessMethodSearchNewBackups> pageSearchNewBackups(Page page, ProcessMethodSearchNewBackups backups);
    /**
     * å­˜æ¡£æ‰¹å‡†
     * @param archived
     * @return
     */
    boolean ratifySearchNewArchivedr(ProcessMethodSearchNewArchived archived);
}
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> {
}
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> {
}
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> {
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodVerifyService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.dto.ProcessMethodVerifyDto;
import com.ruoyi.process.pojo.ProcessMethodVerify;
import com.ruoyi.process.pojo.ProcessMethodVerifyMethodFile;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * æ ‡å‡†æ–¹æ³•验证
 *
 * @author zhuo
 * @since 2024-11-05
 */
public interface ProcessMethodVerifyService extends IService<ProcessMethodVerify> {
    /**
     * æ ‡å‡†æ–¹æ³•跟新验证列表
     * @param page
     * @param methodVerifyDto
     * @return
     */
    IPage<ProcessMethodVerify> pagesMethodVerify(Page page, ProcessMethodVerifyDto methodVerifyDto);
    /**
     * æ–°å¢žæ ‡å‡†æ–¹æ³•验证
     * @param methodVerifyDto
     * @return
     */
    boolean addMethodSearchNew(ProcessMethodVerifyDto methodVerifyDto);
    /**
     * æŸ¥è¯¢æ ‡å‡†æ–¹æ³•验证详情
     * @param methodVerifyId
     * @return
     */
    ProcessMethodVerifyDto getMethodVerifyOne(Integer methodVerifyId);
    /**
     * ä¿®æ”¹æ ‡å‡†æ–¹æ³•验证
     * @param methodVerifyDto
     * @return
     */
    boolean updateMethodVerify(ProcessMethodVerifyDto methodVerifyDto);
    /**
     * åˆ é™¤æ ‡å‡†æ–¹æ³•验证
     * @param methodVerifyId
     * @return
     */
    boolean delMethodVerify(Integer methodVerifyId);
    /**
     * æ ‡å‡†æ–¹æ³•验证确认
     * @param methodVerifyId
     * @return
     */
    boolean methodVerifyAffirm(Integer methodVerifyId);
    /**
     * æ ‡å‡†æ–¹æ³•验证新增原始记录
     * @param methodVerifyId
     * @param file
     * @return
     */
    boolean uploadVerifyMethodFile(Integer methodVerifyId, MultipartFile file);
    /**
     * æ ‡å‡†æ–¹æ³•更新验证原始记录列表
     * @return
     */
    List<ProcessMethodVerifyMethodFile> getVerifyMethodFileList(Integer methodVerifyId);
    /**
     * å¯¼å‡ºæ ‡å‡†æ–¹æ³•更新验证
     *
     * @param methodVerifyId æ ‡å‡†æ–¹æ³•验证id
     * @param response
     */
    void exportMethodVerify(Integer methodVerifyId, HttpServletResponse response);
}
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> {
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessReportService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.pojo.ProcessReport;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æ£€éªŒæŠ¥å‘Šå‘放登记表 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-05 08:58:39
 */
public interface ProcessReportService extends IService<ProcessReport> {
    IPage<ProcessReport> pageProcessReport(Page page, ProcessReport processReport);
    String exportProcessReport(List<Integer> ids);
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessSampleService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.pojo.ProcessSample;
import java.util.Map;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶ æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:49
 */
public interface ProcessSampleService extends IService<ProcessSample> {
    IPage<ProcessSample> pageProcessSample(Page page, ProcessSample processSample);
    int addProcessSample(ProcessSample processSample);
    int delProcessSample(Integer id);
    int doProcessSample(ProcessSample processSample);
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotalSampleService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.pojo.ProcessTotalSample;
import java.util.Map;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶æ€»è¡¨ æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:58
 */
public interface ProcessTotalSampleService extends IService<ProcessTotalSample> {
    IPage<ProcessTotalSample> pageProcessTotalSample(Page page, ProcessTotalSample processTotalSample);
    int submitProcessTotalSample(Integer id);
    int checkProcessTotalSample(Integer id, String state);
    int ratifyProcessTotalSample(Integer id, String state);
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessTotaldealService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.pojo.ProcessTotaldeal;
import java.util.Map;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置总表(历史) æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 03:59:09
 */
public interface ProcessTotaldealService extends IService<ProcessTotaldeal> {
    IPage<ProcessTotaldeal> pageProcessTotaldeal(Page page, ProcessTotaldeal processTotaldeal);
    int checkProcessTotaldeal(Integer id, String state);
    int submitProcessTotaldeal(Integer id);
    int ratifyProcessTotaldeal(Integer id, String state);
}
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> {
}
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> {
}
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> {
}
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,160 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.dto.QualityMonitorDto;
import com.ruoyi.process.pojo.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * è´¨é‡ç›‘控计划主表
 *
 * @author zhuo
 * @since 2024-11-06
 */
public interface QualityMonitorService extends IService<QualityMonitor> {
    /**
     * å¯¼å…¥ç›‘控计划
     * @param file
     * @return
     */
    boolean importQualityMonitor(MultipartFile file, QualityMonitor qualityMonitor);
    /**
     * ç›‘控计划审核
     * @param qualityMonitor
     * @return
     */
    boolean examineQualityMonitor(QualityMonitor qualityMonitor);
    /**
     * ç›‘控计划批准
     * @param qualityMonitor
     * @return
     */
    boolean ratifyQualityMonitor(QualityMonitor qualityMonitor);
    /**
     * ç›‘控计划列表
     * @param page
     * @param qualityMonitor
     * @return
     */
    IPage<QualityMonitorDto> pageQualityMonitor(Page page, QualityMonitor qualityMonitor);
    /**
     * ç›‘控计划详情列表
     * @param page
     * @param qualityMonitorDetails
     * @return
     */
    IPage<QualityMonitorDetails> pageQualityMonitorDetail(Page page, QualityMonitorDetails qualityMonitorDetails);
    /**
     * å¯¼å‡ºç›‘控计划
     *
     * @param qualityMonitorId
     * @param response
     */
    void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response);
    /************************************************************  å®žæ–½  *******************************************************************/
    /**
     * æŸ¥è¯¢ç›‘控计划详情实施信息
     * @param qualityMonitorDetailsId
     * @return
     */
    QualityMonitorDetailsRatify getQualityMonitorRatify(Integer qualityMonitorDetailsId);
    /**
     * æ–°å¢žç›‘控详情实施
     * @param qualityMonitorDetailsRatify
     * @return
     */
    boolean addQualityMonitorRatify(QualityMonitorDetailsRatify qualityMonitorDetailsRatify);
    /**
     * ç›‘控计划详情实施意见
     * @param qualityMonitorDetailsRatify
     * @return
     */
    boolean addQualityMonitorRatifyOpinion(QualityMonitorDetailsRatify qualityMonitorDetailsRatify);
    /**
     * å¯¼å‡ºç›‘控计划详情实施信息
     *
     * @param detailsRatifyId ç›‘控计划详情实施id
     * @param response
     */
    void exportQualityMonitorRatify(Integer detailsRatifyId, HttpServletResponse response);
    /************************************************************  è¯„ä»·  *******************************************************************/
    /**
     *
     * @param qualityMonitorDetailsId
     * @return
     */
    QualityMonitorDetailsEvaluate getQualityMonitorEvaluate(Integer qualityMonitorDetailsId);
    /**
     * æ–°å¢žç›‘控评价
     * @param qualityMonitorDetailsEvaluate
     * @return
     */
    boolean addQualityMonitorEvaluate(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate);
    /**
     * ç›‘控评价审批意见
     * @param qualityMonitorDetailsEvaluate
     * @return
     */
    boolean addMonitorEvaluateOpinion(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate);
    /**
     * æ–°å¢žç›‘控评价附件表
     * @param detailsEvaluateId
     * @param file
     * @return
     */
    boolean uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file);
    /**
     * æŸ¥è¯¢ç›‘控评价附件列表
     * @return
     */
    List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer detailsEvaluateId);
    /**
     * å¯¼å‡ºç›‘控评价
     * @param detailsEvaluateId ç›‘控评价id
     */
    void exportQualityMonitorEvaluate(Integer detailsEvaluateId, HttpServletResponse response);
    /**
     * ä¸Šä¼ ç›‘控完成报告
     * @param file
     * @param qualityMonitorDetailsId
     * @return
     */
    boolean uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId);
    /**
     * æ‰¹å‡†å®ŒæˆæŠ¥å‘Š
     * @param qualityMonitorDetails
     * @return
     */
    boolean ratifyFinishReport(QualityMonitorDetails qualityMonitorDetails);
}
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> {
}
cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,201 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.dto.QualitySuperviseDetailsDto;
import com.ruoyi.process.pojo.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * è´¨é‡ç›‘督主表
 *
 * @author zhuo
 * @since 2024-11-07
 */
public interface QualitySuperviseService extends IService<QualitySupervise> {
    /**
     * å¯¼å…¥ç›‘督计划
     * @param file
     * @return
     */
    boolean importQualitySupervise(MultipartFile file, QualitySupervise qualitySupervise);
    /**
     * ç›‘督计划批准
     * @param qualitySupervise
     * @return
     */
    boolean ratifyQualitySupervise(QualitySupervise qualitySupervise);
    /**
     * ç›‘督计划列表
     * @return
     */
    IPage<QualitySupervise> pageQualitySupervise(Page page, QualitySupervise qualitySupervise);
    /**
     * ç›‘督计划详情列表
     * @return
     */
    IPage<QualitySuperviseDetailsDto> pageQualitySuperviseDetail(Page page, QualitySuperviseDetailsDto qualitySuperviseDetails);
    /**
     * æŸ¥è¯¢è¯¥è®¡åˆ’监督员
     * @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);
    /*************************************************  è´¨é‡ç›‘督记录 ********************************************************/
}
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 {
}
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 {
}
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 {
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
package com.ruoyi.process.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.process.dto.InconsistentDistributionDto;
import com.ruoyi.process.dto.InconsistentDistributionProportionDto;
import com.ruoyi.process.mapper.InconsistentDistributionMapper;
import com.ruoyi.process.pojo.InconsistentDistribution;
import com.ruoyi.process.pojo.InconsistentDistributionDetail;
import com.ruoyi.process.service.InconsistentDistributionDetailService;
import com.ruoyi.process.service.InconsistentDistributionService;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 * ä¸ç¬¦åˆé¡¹çš„分布 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 09:53:20
 */
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class InconsistentDistributionServiceImpl extends ServiceImpl<InconsistentDistributionMapper, InconsistentDistribution> implements InconsistentDistributionService {
    private InconsistentDistributionDetailService inconsistentDistributionDetailService;
    /**
     * ä¸ç¬¦åˆé¡¹åˆ†å¸ƒæŸ¥è¯¢
     * @param page
     * @param inconsistentDistributionDto
     * @return
     */
    @Override
    public IPage<InconsistentDistributionDto> pageInconsistentDistribution(Page page, InconsistentDistribution inconsistentDistributionDto) {
        return baseMapper.pageInconsistentDistribution(page, QueryWrappers.queryWrappers(inconsistentDistributionDto));
    }
    /**
     * ä¸ç¬¦åˆé¡¹åˆ†å¸ƒæ–°å¢ž
     * @param inconsistentDistributionDto
     * @return
     */
    @Override
    public boolean addInconsistentDistribution(InconsistentDistributionDto inconsistentDistributionDto) {
        baseMapper.insert(inconsistentDistributionDto);
        // æ–°å¢žè¯¦æƒ…
        for (InconsistentDistributionDetail distributionDetail : inconsistentDistributionDto.getDistributionDetailList()) {
            distributionDetail.setDistributionId(inconsistentDistributionDto.getDistributionId());
        }
        inconsistentDistributionDetailService.saveBatch(inconsistentDistributionDto.getDistributionDetailList());
        return true;
    }
    /**
     * ä¸ç¬¦åˆé¡¹åˆ†å¸ƒä¿®æ”¹
     * @param inconsistentDistributionDto
     * @return
     */
    @Override
    public boolean updateInconsistentDistribution(InconsistentDistributionDto inconsistentDistributionDto) {
        inconsistentDistributionDetailService.updateBatchById(inconsistentDistributionDto.getDistributionDetailList());
        return true;
    }
    /**
     * ä¸ç¬¦åˆé¡¹åˆ†å¸ƒåˆ é™¤
     * @param distributionId
     * @return
     */
    @Override
    public boolean delInconsistentDistribution(Integer distributionId) {
        inconsistentDistributionDetailService.remove(Wrappers.<InconsistentDistributionDetail>lambdaQuery()
                .eq(InconsistentDistributionDetail::getDistributionId, distributionId));
        baseMapper.deleteById(distributionId);
        return true;
    }
    /**
     * ä¸ç¬¦åˆé¡¹åˆ†å¸ƒæŸ¥çœ‹è¯¦æƒ…
     * @param distributionId
     * @return
     */
    @Override
    public InconsistentDistributionDto getInconsistentDistributionOne(Integer distributionId) {
        InconsistentDistributionDto distributionDto = new InconsistentDistributionDto();
        InconsistentDistribution inconsistentDistribution = baseMapper.selectById(distributionId);
        BeanUtils.copyProperties(distributionDto, inconsistentDistribution);
        // æŸ¥è¯¢è¯¦ç»†
        List<InconsistentDistributionDetail> distributionDetailList = inconsistentDistributionDetailService.list(Wrappers.<InconsistentDistributionDetail>lambdaQuery()
                .eq(InconsistentDistributionDetail::getDistributionId, distributionId));
        // ä¸»ä»»æ±‡æ€»
        int directorSum = distributionDetailList.stream()
                .filter(detail -> detail.getDirector() != null)
                .mapToInt(InconsistentDistributionDetail::getDirector)
                .sum();
        // æŠ€æœ¯è´Ÿè´£äººæ±‡æ€»
        int technologySum = distributionDetailList.stream()
                .filter(detail -> detail.getTechnology() != null)
                .mapToInt(InconsistentDistributionDetail::getTechnology)
                .sum();
        // è´¨é‡è´Ÿè´£äººæ±‡æ€»
        int qualitySum = distributionDetailList.stream()
                .filter(detail -> detail.getQuality() != null)
                .mapToInt(InconsistentDistributionDetail::getQuality)
                .sum();
        // ç»¼åˆå®¤æ±‡æ€»
        int comprehensiveSum = distributionDetailList.stream()
                .filter(detail -> detail.getComprehensive() != null)
                .mapToInt(InconsistentDistributionDetail::getComprehensive)
                .sum();
        // è¯•验室汇总
        int testingSum = distributionDetailList.stream()
                .filter(detail -> detail.getTesting() != null)
                .mapToInt(InconsistentDistributionDetail::getTesting)
                .sum();
        // æ€»æ•°æ±‡æ€»
        int sum = directorSum + technologySum + qualitySum + comprehensiveSum + testingSum;
        //计算合计
        for (InconsistentDistributionDetail distributionDetail : distributionDetailList) {
            // æ€»æ•°
            Integer total = (distributionDetail.getDirector() != null ? distributionDetail.getDirector() : 0)
                    + (distributionDetail.getTechnology() != null ? distributionDetail.getTechnology() : 0)
                    + (distributionDetail.getQuality() != null ? distributionDetail.getQuality() : 0)
                    + (distributionDetail.getComprehensive() != null ? distributionDetail.getComprehensive() : 0)
                    + (distributionDetail.getTesting() != null ? distributionDetail.getTesting() : 0);
            distributionDetail.setTotal(total);
            // å æ¯”
            distributionDetail.setProportion(calculatePercentage(total, sum));
        }
        // æ·»åŠ æœ€åŽä¸€è¡Œå æ¯”å¯¹è±¡
        InconsistentDistributionProportionDto proportionDto = new InconsistentDistributionProportionDto();
        proportionDto.setEssentials("占比 %");
        proportionDto.setDirector(calculatePercentage(directorSum, sum));
        proportionDto.setTechnology(calculatePercentage(technologySum, sum));
        proportionDto.setQuality(calculatePercentage(qualitySum, sum));
        proportionDto.setComprehensive(calculatePercentage(comprehensiveSum, sum));
        proportionDto.setTesting(calculatePercentage(testingSum, sum));
        proportionDto.setTotal(sum);
        distributionDto.setDistributionDetailList(distributionDetailList);
        distributionDto.setDistributionProportion(proportionDto);
        return distributionDto;
    }
    /**
     * è®¡ç®—占比
     * @return
     */
    public BigDecimal calculatePercentage(Integer numeratorNum, Integer denominatorNum) {
        BigDecimal numerator = new BigDecimal(numeratorNum);
        BigDecimal denominator = new BigDecimal(denominatorNum);
        // æ£€æŸ¥é™¤æ•°æ˜¯å¦ä¸º0
        if (denominator.compareTo(BigDecimal.ZERO) == 0) {
            return BigDecimal.ZERO;
        }
        BigDecimal ratio = numerator.divide(denominator, 4, RoundingMode.HALF_UP); // ä¿ç•™4位小数
        BigDecimal percentage = ratio.multiply(new BigDecimal("100"));
        BigDecimal percentageRounded = percentage.setScale(2, RoundingMode.HALF_UP);
        return percentageRounded;
    }
    /**
     * å¯¼å‡ºä¸ç¬¦åˆçš„分布
     * @param distributionId
     * @param response
     */
    @Override
    public void exportInconsistentDistribution(Integer distributionId, HttpServletResponse response) {
        InconsistentDistributionDto inconsistentDistributionOne = getInconsistentDistributionOne(distributionId);
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/inconsistent-distribution.docx");
        Configure configure = Configure.builder()
                .bind("distributionDetailList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("distributionDetailList", inconsistentDistributionOne.getDistributionDetailList());
                    put("proport", inconsistentDistributionOne.getDistributionProportion());
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "不符合项的分布", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
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 {
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,310 @@
package com.ruoyi.process.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsReportService;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.process.dto.InspectionOrderDto;
import com.ruoyi.process.dto.InspectionOrderExportDto;
import com.ruoyi.process.mapper.InspectionOrderMapper;
import com.ruoyi.process.pojo.InspectionOrder;
import com.ruoyi.process.pojo.InspectionOrderDetail;
import com.ruoyi.process.service.InspectionOrderDetailService;
import com.ruoyi.process.service.InspectionOrderService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 * æ£€éªŒå§”托单 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-09
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class InspectionOrderServiceImpl extends ServiceImpl<InspectionOrderMapper, InspectionOrder> implements InspectionOrderService {
    @Resource
    private InspectionOrderDetailService inspectionOrderDetailService;
    @Resource
    private InsOrderService insOrderService;
    @Resource
    private InsReportService insReportService;
    @Value("${wordUrl}")
    private String wordUrl;
    /**
     * æ£€éªŒå§”托单分页查询
     * @param page
     * @param InspectionOrder
     * @return
     */
    @Override
    public IPage<InspectionOrderDto> pageInspectionOrder(Page page, InspectionOrder InspectionOrder) {
        return baseMapper.pageInspectionOrder(page, QueryWrappers.queryWrappers(InspectionOrder));
    }
    /**
     * æ£€éªŒå§”托单新增
     * @param inspectionOrder
     * @return
     */
    @Override
    public boolean addInspectionOrder(InspectionOrderDto inspectionOrder) {
        if (inspectionOrder.getInsOrderId() == null) {
            throw new ErrorException("缺少订单id");
        }
        // å¤åˆ¶æŠ¥å‘Š
        // æŸ¥è¯¢è®¢å•报告
        InsReport insReport = insReportService.getOne(Wrappers.<InsReport>lambdaQuery()
                .eq(InsReport::getInsOrderId, inspectionOrder.getInsOrderId()));
        String path = wordUrl + insReport.getUrl().replaceFirst("/word", "");
        String fileName =LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + "委托单报告.docx";
        // æºæ–‡ä»¶è·¯å¾„
        Path sourcePath = Paths.get(path);
        // ç›®æ ‡æ–‡ä»¶è·¯å¾„
        Path targetPath = Paths.get(wordUrl + "/" + fileName);
        try {
            // å¤åˆ¶æ–‡ä»¶ï¼Œå¦‚果目标文件已存在,则覆盖
            Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
            // æ·»åŠ æ–‡ä»¶åœ°å€
            inspectionOrder.setFileUrl("/word/" + fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        baseMapper.insert(inspectionOrder);
        // æ–°å¢žè¯¦æƒ…
        if (CollectionUtils.isNotEmpty(inspectionOrder.getOrderDetailList())) {
            for (InspectionOrderDetail InspectionOrderDetail : inspectionOrder.getOrderDetailList()) {
                InspectionOrderDetail.setInspectionOrderId(inspectionOrder.getInspectionOrderId());
            }
            inspectionOrderDetailService.saveBatch(inspectionOrder.getOrderDetailList());
        }
        return true;
    }
    /**
     * æ£€éªŒå§”托单修改
     * @param InspectionOrder
     * @return
     */
    @Override
    public boolean updateInspectionOrder(InspectionOrderDto InspectionOrder) {
        baseMapper.updateById(InspectionOrder);
        // åˆ é™¤ä¹‹å‰çš„详情
        inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
                .eq(InspectionOrderDetail::getInspectionOrderId, InspectionOrder.getInspectionOrderId()));
        // æ–°å¢žè¯¦æƒ…
        for (InspectionOrderDetail InspectionOrderDetail : InspectionOrder.getOrderDetailList()) {
            InspectionOrderDetail.setInspectionOrderId(InspectionOrder.getInspectionOrderId());
        }
        inspectionOrderDetailService.saveBatch(InspectionOrder.getOrderDetailList());
        return true;
    }
    /**
     * æ£€éªŒå§”托单删除
     * @param inspectionOrderId
     * @return
     */
    @Override
    public boolean delInspectionOrder(Integer inspectionOrderId) {
        inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
                .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId));
        baseMapper.deleteById(inspectionOrderId);
        return true;
    }
    /**
     * æ£€éªŒå§”托单查看详情
     * @param inspectionOrderId
     * @return
     */
    @Override
    public InspectionOrderDto getInspectionOrderOne(Integer inspectionOrderId) {
        InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId);
        InspectionOrderDto inspectionOrderDto = new InspectionOrderDto();
        BeanUtils.copyProperties(inspectionOrder, inspectionOrderDto);
        // æŸ¥è¯¢è¯¦ç»†ä¿¡æ¯
        inspectionOrderDto.setOrderDetailList(inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery()
                .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)));
        return inspectionOrderDto;
    }
    /**
     * æ ¹æ®æˆå“è®¢å•id查询委托单详情
     * @param insOrderId
     * @return
     */
    @Override
    public InspectionOrderDto getInspectionOrderByInsOderId(Integer insOrderId) {
        InsOrder order = insOrderService.getById(insOrderId);
        InspectionOrderDto inspectionOrderDto = new InspectionOrderDto();
        inspectionOrderDto.setInsOrderId(order.getId());//成品订单id
        inspectionOrderDto.setEntrustCode(order.getEntrustCode());//委托编号
        inspectionOrderDto.setSampleName(order.getSample());//试样名称
        inspectionOrderDto.setProduction(order.getProduction());//生产单位
        inspectionOrderDto.setCommissionUnit(order.getCompany());//委托单位
        inspectionOrderDto.setCommissionUser(order.getPrepareUser());//委托人
        inspectionOrderDto.setSampleStatus("完好");//样品状态
        inspectionOrderDto.setIsLeave(order.getIsLeave());//是否留样
        inspectionOrderDto.setProcessing(order.getProcessing());//样品处理方式
        inspectionOrderDto.setAppointed(order.getAppointed());//约定时间
        inspectionOrderDto.setSend(order.getSend());//报告发送方式
        inspectionOrderDto.setCommissionPhone(order.getPhone());//报告发送方式
        return inspectionOrderDto;
    }
    /**
     * å§”托单查询成品订单
     * @return
     */
    @Override
    public IPage<InsOrder> getInsOrderOnInspection(Page page, InsOrder insOrder) {
        return baseMapper.getInsOrderOnInspection(page, QueryWrappers.queryWrappers(insOrder));
    }
    /**
     * å§”托单成品报告上传
     * @param file
     * @param inspectionOrderId
     * @return
     */
    @Override
    public boolean uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId) {
        String urlString;
        String pathName;
        try {
            String path = wordUrl;
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            baseMapper.update(null, Wrappers.<InspectionOrder>lambdaUpdate()
                    .eq(InspectionOrder::getInspectionOrderId, inspectionOrderId)
                    .set(InspectionOrder::getFileUrl, "/word/" + pathName));
        } catch (Exception e) {
            throw new ErrorException("文件上传失败");
        }
        return true;
    }
    @Override
    public void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response) {
        InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId);
        InspectionOrderExportDto inspectionOrderExportDto = extracted(inspectionOrder);
        List<InspectionOrderDetail> list = inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery()
                .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId));
        int index = 1;
        for (InspectionOrderDetail inspectionOrderDetail : list) {
            inspectionOrderDetail.setIndex(index);
            index++;
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/inspection-order.docx");
        Configure configure = Configure.builder()
                .bind("inspectionOrderDetailList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("inspectionOrder", inspectionOrderExportDto);
                    put("inspectionOrderDetailList", list);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    inspectionOrderExportDto.getSampleName(), "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    private InspectionOrderExportDto extracted(InspectionOrder inspectionOrder) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
        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;
    }
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessComplainServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.ruoyi.process.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.mapper.InsReportMapper;
import com.ruoyi.inspect.mapper.InsSampleMapper;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.process.dto.ProcessComplainDto;
import com.ruoyi.process.mapper.ProcessComplainMapper;
import com.ruoyi.process.pojo.ProcessComplain;
import com.ruoyi.process.service.ProcessComplainService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
/**
 * <p>
 * æŠ•诉 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 09:29:11
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessComplainServiceImpl extends ServiceImpl<ProcessComplainMapper, ProcessComplain> implements ProcessComplainService {
    @Resource
    private ProcessComplainMapper processComplainMapper;
    @Resource
    private InsReportMapper insReportMapper;
    @Resource
    private InsSampleMapper insSampleMapper;
    @Override
    public IPage<ProcessComplain> pageProcessComplain(Page page, ProcessComplain processComplain) {
        return processComplainMapper.pageProcessComplain(page, QueryWrappers.queryWrappers(processComplain));
    }
    @Override
    public int addProcessComplain(ProcessComplain processComplain) {
        //判断报告编号和样品编号是否存在
        InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, processComplain.getCode()));
        if (ObjectUtils.isEmpty(insReport)) {
            throw new ErrorException("报告编号输入有误");
        }
        processComplain.setInsReportId(insReport.getId());
        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, processComplain.getSampleCode()));
        if (ObjectUtils.isEmpty(insSample)) {
            throw new ErrorException("样品编号输入有误");
        }
        //投诉编号生成
        //todo  giveCode
//        String giveCode = this.giveCode.giveCode("JCZX-", "cnas_process_complain", "", "yyMMdd");
//        processComplain.setComplainNo(giveCode);
        return processComplainMapper.insert(processComplain);
    }
    @Override
    public ProcessComplainDto getProcessComplain(Long id) {
        return processComplainMapper.getProcessComplain(id);
    }
    @Override
    public int doProcessComplain(ProcessComplain processComplain) {
        return processComplainMapper.updateById(processComplain);
    }
    @Override
    public void exportProcessComplain(ProcessComplain processComplain, HttpServletResponse response) throws Exception {
        List<ProcessComplain> data = processComplainMapper.pageProcessComplain(new Page(-1, -1), QueryWrappers.queryWrappers(processComplain)).getRecords();
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        String fileName = URLEncoder.encode("投诉列表导出", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        try {
            // æ–°å»ºExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            WriteSheet mainSheet = EasyExcel.writerSheet(0, "投诉列表导出").head(ProcessComplain.class).build();
            excelWriter.write(data, mainSheet);
            // å…³é—­æµ
            excelWriter.finish();
        } catch (IOException e) {
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessDealServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.ruoyi.process.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.process.mapper.ProcessDealMapper;
import com.ruoyi.process.mapper.ProcessTotaldealMapper;
import com.ruoyi.process.pojo.ProcessDeal;
import com.ruoyi.process.pojo.ProcessTotaldeal;
import com.ruoyi.process.service.ProcessDealService;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 02:50:19
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessDealServiceImpl extends ServiceImpl<ProcessDealMapper, ProcessDeal> implements ProcessDealService {
    @Resource
    private ProcessDealMapper processDealMapper;
    @Autowired
    private UserMapper userMapper;
    @Resource
    private ProcessTotaldealMapper processTotaldealMapper;
    @Override
    public IPage<ProcessDeal> pageProcessDeal(Page page, ProcessDeal processDeal) {
        Integer userId = SecurityUtils.getUserId().intValue();
        processDeal.setCreateUser(userId);
        if (ObjectUtils.isEmpty(processDeal.getTotaldealId())) {
            //获取当前月份
            LocalDate currentDate = LocalDate.now();
            // å®šä¹‰æ—¥æœŸæ ¼å¼
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
            // æ ¼å¼åŒ–当前日期
            String currentMonth = currentDate.format(formatter);
            //查询历史
            ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectOne(Wrappers.<ProcessTotaldeal>lambdaQuery().eq(ProcessTotaldeal::getMonth, currentMonth));
            processDeal.setTotaldealId(processTotaldeal.getId());
        }
        return processDealMapper.pageProcessDeal(page, QueryWrappers.queryWrappers(processDeal));
    }
    @Override
    public int addProcessDeal(ProcessDeal processDeal) {
        ProcessTotaldeal processTotaldeal;
        if (ObjectUtils.isEmpty(processDeal.getTotaldealId())){
            LocalDate dealTime = LocalDate.now();
            // å®šä¹‰æ—¥æœŸæ ¼å¼
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
            // æ ¼å¼åŒ–当前日期
            String currentMonth = dealTime.format(formatter);
            processTotaldeal= processTotaldealMapper.selectOne(Wrappers.<ProcessTotaldeal>lambdaQuery().eq(ProcessTotaldeal::getMonth,currentMonth));
            processDeal.setTotaldealId(processTotaldeal.getId());
        }else {
            processTotaldeal= processTotaldealMapper.selectById(processDeal.getTotaldealId());
        }
        processDealMapper.insert(processDeal);
        processTotaldeal.setTotalNum(processDeal.getNum()+processTotaldeal.getTotalNum());
        return processTotaldealMapper.updateById(processTotaldeal);
    }
    @Override
    public int delProcessDeal(Integer id) {
        ProcessDeal processDeal = processDealMapper.selectById(id);
        processDealMapper.deleteById(id);
        ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(processDeal.getTotaldealId());
        processTotaldeal.setTotalNum(processTotaldeal.getTotalNum()-processDeal.getNum());
        return processTotaldealMapper.updateById(processTotaldeal);
    }
    @Override
    public int doProcessDeal(ProcessDeal processDeal) {
        if (ObjectUtils.isNotEmpty(processDeal.getNum())) {
            ProcessDeal oldProcessDeal = processDealMapper.selectById(processDeal.getId());
            ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(processDeal.getTotaldealId());
            processTotaldeal.setTotalNum(processTotaldeal.getTotalNum() - oldProcessDeal.getNum() + processDeal.getNum());
            processTotaldealMapper.updateById(processTotaldeal);
        }
        return processDealMapper.updateById(processDeal);
    }
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessEvaluateServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
package com.ruoyi.process.service.impl;
import cn.hutool.core.lang.UUID;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.process.mapper.ProcessEvaluateMapper;
import com.ruoyi.process.pojo.ProcessEvaluate;
import com.ruoyi.process.service.ProcessEvaluateService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æµ‹é‡ä¸ç¡®å®šåº¦çš„评价 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 01:10:43
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessEvaluateServiceImpl extends ServiceImpl<ProcessEvaluateMapper, ProcessEvaluate> implements ProcessEvaluateService {
    @Resource
    private ProcessEvaluateMapper processEvaluateMapper;
    @Value("${wordUrl}")
    private String wordUrl;
    @Override
    public IPage<ProcessEvaluate> pageProcessEvaluate(Page page, ProcessEvaluate processEvaluate) {
        return processEvaluateMapper.pageProcessEvaluate(page, QueryWrappers.queryWrappers(processEvaluate));
    }
    @Override
    public int addProcessEvaluate(MultipartFile file) {
        String urlString;
        String pathName;
        String path=wordUrl;
        ProcessEvaluate processEvaluate = new ProcessEvaluate();
        processEvaluate.setReportName(file.getOriginalFilename());
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            processEvaluate.setReportUrl(pathName);
            return processEvaluateMapper.insert(processEvaluate);
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("附件上传错误");
            return 0;
        }
    }
    @Override
    public int doProcessEvaluate(ProcessEvaluate processEvaluate) {
        return processEvaluateMapper.updateById(processEvaluate);
    }
    @Override
    public void exportProcessEvaluate(ProcessEvaluate processEvaluate, HttpServletResponse response) throws Exception{
        List<ProcessEvaluate> data = processEvaluateMapper.pageProcessEvaluate(new Page(-1, -1), QueryWrappers.queryWrappers(processEvaluate)).getRecords();
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        String fileName = URLEncoder.encode("测量不确定度的评定导出", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        try {
            // æ–°å»ºExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            WriteSheet mainSheet = EasyExcel.writerSheet(0, "测量不确定度的评定导出").head(ProcessEvaluate.class).build();
            excelWriter.write(data, mainSheet);
            // å…³é—­æµ
            excelWriter.finish();
        } catch (IOException e) {
            throw new RuntimeException("导出失败");
        }
    }
}
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 {
}
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 {
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,370 @@
package com.ruoyi.process.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.UserUtils;
import com.ruoyi.process.dto.ProcessMethodSearchNewArchivedDto;
import com.ruoyi.process.dto.ProcessMethodSearchNewBackupsDto;
import com.ruoyi.process.mapper.ProcessMethodSearchNewArchivedMapper;
import com.ruoyi.process.mapper.ProcessMethodSearchNewBackupsMapper;
import com.ruoyi.process.mapper.ProcessMethodSearchNewMapper;
import com.ruoyi.process.pojo.ProcessMethodSearchNew;
import com.ruoyi.process.pojo.ProcessMethodSearchNewArchived;
import com.ruoyi.process.pojo.ProcessMethodSearchNewBackups;
import com.ruoyi.process.service.ProcessMethodSearchNewBackupsService;
import com.ruoyi.process.service.ProcessMethodSearchNewService;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * æ ‡å‡†æŸ¥æ–°
 *
 * @author zhuo
 * @since 2024-11-04
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessMethodSearchNewServiceImpl extends ServiceImpl<ProcessMethodSearchNewMapper, ProcessMethodSearchNew> implements ProcessMethodSearchNewService {
    @Resource
    private ProcessMethodSearchNewArchivedMapper processMethodSearchNewArchivedMapper;
    @Resource
    private ProcessMethodSearchNewBackupsService processMethodSearchNewBackupsService;
    @Resource
    private ProcessMethodSearchNewBackupsMapper processMethodSearchNewBackupsMapper;
    /**
     * æ–°å¢žæ ‡å‡†æŸ¥æ–°
     *
     * @param processMethodSearchNewList
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean addMethodSearchNew(List<ProcessMethodSearchNew> processMethodSearchNewList) {
        for (ProcessMethodSearchNew processMethodSearchNew : processMethodSearchNewList) {
            processMethodSearchNew.setIsNewStandard(1);
        }
        // æ–°å¢ž
        this.saveBatch(processMethodSearchNewList);
        return true;
    }
    /**
     * æ ‡å‡†æŸ¥æ–°åˆ—表
     *
     * @param processMethodSearchNew
     * @return
     */
    @Override
    public IPage<ProcessMethodSearchNew> pageMethodSearchNew(Page page, ProcessMethodSearchNewBackupsDto processMethodSearchNew) {
        String beginDate = processMethodSearchNew.getBeginDate();
        String endDate = processMethodSearchNew.getEndDate();
        processMethodSearchNew.setBeginDate(null);
        processMethodSearchNew.setEndDate(null);
        return baseMapper.pageMethodSearchNew(page, QueryWrappers.queryWrappers(processMethodSearchNew), beginDate, endDate);
    }
    /**
     * æ ‡å‡†æŸ¥æ–°å¯¼å‡º
     *
     * @param archivedId
     * @param response
     */
    @Override
    public void exportMethodSearchNew(Integer archivedId, HttpServletResponse response) {
        // æŸ¥è¯¢æ ‡å‡†æŸ¥æ–°å­˜æ¡£ä¿¡æ¯
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        ProcessMethodSearchNewArchived methodSearchNewArchived = processMethodSearchNewArchivedMapper.selectById(archivedId);
        Integer writeUserId = methodSearchNewArchived.getWriteUserId();
        Integer ratifyUserId = methodSearchNewArchived.getRatifyUserId();
        String writeDate = methodSearchNewArchived.getWriteTime() == null ?
                null : methodSearchNewArchived.getWriteTime().format(timeFormatter);
        String ratifyDate =methodSearchNewArchived.getRatifyTime() == null ?
                null :  methodSearchNewArchived.getRatifyTime().format(timeFormatter);
        // æŸ¥è¯¢å­˜æ¡£å¤‡ä»½
        List<ProcessMethodSearchNewBackups> methodSearchNewBackups = processMethodSearchNewBackupsMapper.selectList(Wrappers.<ProcessMethodSearchNewBackups>lambdaQuery()
                .eq(ProcessMethodSearchNewBackups::getArchivedId, archivedId));
        int index = 1;
        // æ ¼å¼åŒ–参数
        List<ProcessMethodSearchNewBackupsDto> methodSearchNews = new ArrayList<>();
        for (ProcessMethodSearchNewBackups methodSearchNew : methodSearchNewBackups) {
            ProcessMethodSearchNewBackupsDto searchNewBackupsDto = new ProcessMethodSearchNewBackupsDto();
            BeanUtils.copyProperties(methodSearchNew, searchNewBackupsDto);
            // æ˜¯å¦æ˜¯è·Ÿæ–°æ ‡å‡†
            if (methodSearchNew.getIsNewStandard().equals(1)) {
                searchNewBackupsDto.setIsNewStandardString("是");
            } else {
                searchNewBackupsDto.setIsNewStandardString("否");
            }
            // å¤‡æ³¨
            if (methodSearchNew.getRemark() != null) {
                if (methodSearchNew.getRemark().equals(1)) {
                    searchNewBackupsDto.setRemarkString("替换");
                } else {
                    searchNewBackupsDto.setRemarkString("作废");
                }
            }
            switch (methodSearchNew.getSearchNewSource()) {
                case 0:
                    searchNewBackupsDto.setStandardNet("√");
                    break;
                case 1:
                    searchNewBackupsDto.setInformationOffices("√");
                    break;
                case 2:
                    searchNewBackupsDto.setStandardBookstore("√");
                    break;
                case 3:
                    searchNewBackupsDto.setOther("√");
                    break;
            }
            searchNewBackupsDto.setIndex(index);
            methodSearchNews.add(searchNewBackupsDto);
            index++;
        }
        // æŸ¥è¯¢ç­¾ååœ°å€
        String writeUserUrl = UserUtils.getUserSignatureUrl(writeUserId);
        String ratifyUserUrl = UserUtils.getUserSignatureUrl(ratifyUserId);
        //创建ExcelWriter å¯ä»¥è‡ªåŠ¨å…³æµä½†è¿˜æ˜¯æ‰‹åŠ¨å…³ä¸€æ¬¡
        ExcelWriter excelWriter = null;
        try {
            // outputStream:要导出的文件的输出流
            OutputStream outputStream = response.getOutputStream();
            // èŽ·å–æ¨¡ç‰ˆæ–‡ä»¶
            ClassPathResource classPathResource = new ClassPathResource("/static/excel/check-records.xlsx");
            // ä½¿ç”¨æ¨¡ç‰ˆæ–‡ä»¶çš„两种方式:
            //     1、文件路径:.withTemplate(templateFileName)
            //     2、输入流:.withTemplate(inputStream)
            // String templateFileName = classPathResource.getFile().getPath();
            InputStream inputStream = classPathResource.getInputStream();
            // åˆ›å»ºExcelWriter
            excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build();
            // èŽ·å–ç¬¬ä¸€ä¸ªsheet页
            WriteSheet writeSheet = EasyExcel.writerSheet(0, "标准查新导出").build();
            //excelWriter.fill() è¿™åœ°æ–¹å°±æ˜¯å¡«å……属性。
//            excelWriter.fill(methodSearchNews, fillConfig, writeSheet); // è¿™é‡ŒfillConfig是配置文件
            excelWriter.fill(methodSearchNews, writeSheet);
            // è¿™é‡Œeasy excel模板导出问题 ä¼šåˆ é™¤åŽé¢å†…容再进行进行填充
            // æ‰€ä»¥list åŽé¢è¿˜æœ‰æ•°æ® æƒ³åŠžæ³•æ‰‹åŠ¨å†™å…¥
            // æ‰‹åŠ¨åˆ›å»ºä¸€ä¸ªlist å­˜æ”¾æ•°æ® ç„¶åŽå†è¿›è¡Œå¡«å……
            // è¿™é‡ŒList<Object>可以用对象代替 å·æ‡’用list
            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);
            // è¿™é‡Œè¿½åŠ æ˜¯write åˆ«å’Œ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 {
            // åƒä¸‡åˆ«å¿˜è®°close关闭流
            if (excelWriter != null) {
                excelWriter.close();
            }
        }
    }
    /**
     * å¯¼å…¥æ ‡å‡†æŸ¥æ–°
     *
     * @param file
     * @return
     */
    @Override
    public boolean importMethodSearchNew(MultipartFile file) {
        List<ProcessMethodSearchNewBackupsDto> searchNewDtoList = new ArrayList<>();
        try {
            // excel解析
            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;
    }
}
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 {
}
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 {
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodVerifyServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,454 @@
package com.ruoyi.process.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.PictureRenderData;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.inspect.util.UserUtils;
import com.ruoyi.process.dto.ProcessMethodVerifyDto;
import com.ruoyi.process.dto.ProcessMethodVerifyExportWordDto;
import com.ruoyi.process.mapper.ProcessMethodVerifyCalibrationsFileMapper;
import com.ruoyi.process.mapper.ProcessMethodVerifyMapper;
import com.ruoyi.process.mapper.ProcessMethodVerifyWorkFileMapper;
import com.ruoyi.process.pojo.*;
import com.ruoyi.process.service.*;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
 * æ ‡å‡†æ–¹æ³•验证
 *
 * @author zhuo
 * @since 2024-11-05
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessMethodVerifyServiceImpl extends ServiceImpl<ProcessMethodVerifyMapper, ProcessMethodVerify> implements ProcessMethodVerifyService {
    @Resource
    private ProcessMethodVerifyCalibrationsFileService processMethodVerifyCalibrationsFileService;
    @Resource
    private ProcessMethodVerifyMethodFileService processMethodVerifyMethodFileService;
    @Resource
    private ProcessMethodVerifyWorkFileService processMethodVerifyWorkFileService;
    @Resource
    private ProcessMethodVerifyMachineAttachmentService processMethodVerifyMachineAttachmentService;
    @Resource
    private ProcessMethodVerifyCalibrationsFileMapper processMethodVerifyCalibrationsFileMapper;
    @Resource
    private ProcessMethodVerifyWorkFileMapper processMethodVerifyWorkFileMapper;
    @Resource
    private DeviceMapper deviceMapper;
    @Resource
    private UserMapper userMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Value("${wordUrl}")
    private String wordUrl;
    /**
     * æ ‡å‡†æ–¹æ³•跟新验证修改
     *
     * @param page
     * @param methodVerifyDto
     * @return
     */
    @Override
    public IPage<ProcessMethodVerify> pagesMethodVerify(Page page, ProcessMethodVerifyDto methodVerifyDto) {
        if (methodVerifyDto.getOperationType() == null) {
            throw new ErrorException("请选择是变更还是验证");
        }
        return baseMapper.pagesMethodVerify(page, QueryWrappers.queryWrappers(methodVerifyDto));
    }
    /**
     * æ–°å¢žæ ‡å‡†æ–¹æ³•验证
     *
     * @param methodVerifyDto
     * @return
     */
    @Override
    public boolean addMethodSearchNew(ProcessMethodVerifyDto methodVerifyDto) {
        if (methodVerifyDto.getOperationType() == null) {
            throw new ErrorException("请选择是变更还是验证");
        }
        // æ–°å¢ž
        baseMapper.insert(methodVerifyDto);
        // åˆ¤æ–­ç¡®è®¤äººæ˜¯å¦ä¸ºç©º
        if (StringUtils.isNotBlank(methodVerifyDto.getConfirmUser())) {
            // æ·»åŠ ä¸Šå²—è¯
            this.addWorkFile(methodVerifyDto);
        }
        // æ–°å¢žè®¾å¤‡ä¿¡æ¯
        if (CollectionUtils.isNotEmpty(methodVerifyDto.getMachineAttachmentList())) {
            this.addDevice(methodVerifyDto);
        }
        return true;
    }
    /**
     * æŸ¥è¯¢æ ‡å‡†æ–¹æ³•验证详情
     *
     * @param methodVerifyId
     * @return
     */
    @Override
    public ProcessMethodVerifyDto getMethodVerifyOne(Integer methodVerifyId) {
        ProcessMethodVerify processMethodVerify = baseMapper.selectById(methodVerifyId);
        ProcessMethodVerifyDto processMethodVerifyDto = new ProcessMethodVerifyDto();
        BeanUtil.copyProperties(processMethodVerify, processMethodVerifyDto);
        // æŸ¥è¯¢è®¾å¤‡è¯¦æƒ…
        processMethodVerifyDto.setMachineAttachmentList(processMethodVerifyMachineAttachmentService.list(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
                .eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId)));
        // æŸ¥è¯¢åŽŸå§‹è®°å½•
        processMethodVerifyDto.setMethodFileList(processMethodVerifyMethodFileService.list(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
                .eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId)));
        // æŸ¥è¯¢ä¸Šå²—证
        processMethodVerifyDto.setWorkFileList(processMethodVerifyWorkFileService.list(Wrappers.<ProcessMethodVerifyWorkFile>lambdaQuery()
                .eq(ProcessMethodVerifyWorkFile::getMethodVerifyId, methodVerifyId)));
        // æŸ¥è¯¢æ ¡å‡†è¯ä¹¦
        processMethodVerifyDto.setCalibrationsFileList(processMethodVerifyCalibrationsFileMapper.selectCalibrationsFileList(methodVerifyId));
        return processMethodVerifyDto;
    }
    /**
     * ä¿®æ”¹æ ‡å‡†æ–¹æ³•验证
     *
     * @param methodVerifyDto
     * @return
     */
    @Override
    public boolean updateMethodVerify(ProcessMethodVerifyDto methodVerifyDto) {
        baseMapper.updateById(methodVerifyDto);
        // åˆ é™¤ä¸Šå²—证
        processMethodVerifyWorkFileService.remove(Wrappers.<ProcessMethodVerifyWorkFile>lambdaQuery()
                .eq(ProcessMethodVerifyWorkFile::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
        // åˆ é™¤åŽŸæœ¬è®¾å¤‡è¯¦æƒ…
        processMethodVerifyMachineAttachmentService.remove(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
                .eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
        // åˆ é™¤å…ƒæ ¡å‡†è¯ä¹¦
        processMethodVerifyCalibrationsFileService.remove(Wrappers.<ProcessMethodVerifyCalibrationsFile>lambdaQuery()
                .eq(ProcessMethodVerifyCalibrationsFile::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
        // åˆ¤æ–­ç¡®è®¤äººæ˜¯å¦ä¸ºç©º
        if (StringUtils.isNotBlank(methodVerifyDto.getConfirmUser())) {
            // æ·»åŠ ä¸Šå²—è¯
            this.addWorkFile(methodVerifyDto);
        }
        // æ–°å¢žè®¾å¤‡ä¿¡æ¯
        if (CollectionUtils.isNotEmpty(methodVerifyDto.getMachineAttachmentList())) {
            this.addDevice(methodVerifyDto);
        }
        return true;
    }
    /**
     * åˆ é™¤æ ‡å‡†æ–¹æ³•验证
     *
     * @param methodVerifyId
     * @return
     */
    @Override
    public boolean delMethodVerify(Integer methodVerifyId) {
        // åˆ é™¤æ‰€æœ‰è®¾å¤‡
        processMethodVerifyMachineAttachmentService.remove(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
                .eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId));
        // åˆ é™¤æ‰€æœ‰åŽŸå§‹è®°å½•
        processMethodVerifyMethodFileService.remove(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
                .eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId));
        baseMapper.deleteById(methodVerifyId);
        return true;
    }
    /**
     * æ–¹æ³•验证确认
     *
     * @param methodVerifyId
     * @return
     */
    @Override
    public boolean methodVerifyAffirm(Integer methodVerifyId) {
        baseMapper.update(null, Wrappers.<ProcessMethodVerify>lambdaUpdate()
                .set(ProcessMethodVerify::getConfirmDate, LocalDateTime.now())
                .eq(ProcessMethodVerify::getMethodVerifyId, methodVerifyId));
        return true;
    }
    /**
     * æ–¹æ³•验证新增原始记录
     *
     * @param methodVerifyId
     * @param file
     * @return
     */
    @Override
    public boolean uploadVerifyMethodFile(Integer methodVerifyId, MultipartFile file) {
        if (methodVerifyId == null) {
            throw new ErrorException("缺少原始记录id");
        }
        String urlString;
        String pathName;
        String path;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        ProcessMethodVerifyMethodFile methodFile = new ProcessMethodVerifyMethodFile();
        methodFile.setMethodVerifyId(methodVerifyId);
        methodFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // æ˜¯å›¾ç‰‡
            path = imgUrl;
            methodFile.setType(1);
        } else {
            // æ˜¯æ–‡ä»¶
            path = wordUrl;
            methodFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            methodFile.setFileUrl(pathName);
            return processMethodVerifyMethodFileService.save(methodFile);
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("附件上传错误");
            return false;
        }
    }
    /**
     * æ ‡å‡†æ–¹æ³•验证原始记录列表
     *
     * @param methodVerifyId
     * @return
     */
    @Override
    public List<ProcessMethodVerifyMethodFile> getVerifyMethodFileList(Integer methodVerifyId) {
        return processMethodVerifyMethodFileService.list(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
                .eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId));
    }
    /**
     * å¯¼å‡ºæ ‡å‡†æ–¹æ³•更新验证
     *
     * @param methodVerifyId æ ‡å‡†æ–¹æ³•验证id
     * @param response
     */
    @Override
    public void exportMethodVerify(Integer methodVerifyId, HttpServletResponse response) {
        // èŽ·å–æ ‡å‡†æ–¹æ³•æ›´æ–°éªŒè¯æ•°æ®
        ProcessMethodVerify processMethodVerify = baseMapper.selectById(methodVerifyId);
        // å°†å†…部字段转换成展示到word中的对象
        ProcessMethodVerifyExportWordDto exportWordTemplate = getExportWordTemplate(processMethodVerify);
        // å®šä¹‰ä¸€ä¸ªé›†åˆå­˜æ”¾äººå‘˜ç­¾å
        ArrayList<PictureRenderData> pictureRenderDataList = new ArrayList<>();
        // TODO:确认最多会有5个人
        String confirmUser = processMethodVerify.getConfirmUser();
        if (StringUtils.isNotBlank(confirmUser)) {
            // å¯¹äººå‘˜id字符串进行分割成数组
            String[] userIds = confirmUser.split(",");
            // å¾ªçŽ¯èŽ·å–äººå‘˜ç­¾å
            for (String userIdStr : userIds) {
                // è½¬æ¢ä¸ºint类型
                Integer userId = Integer.valueOf(userIdStr);
                // èŽ·å–äººå‘˜ç­¾åå¯¹è±¡
                PictureRenderData finalUserSignatureUrl = UserUtils.getFinalUserSignatureUrl(userId);
                // å°†äººå‘˜ç­¾åå¯¹è±¡æ·»åŠ åˆ°é›†åˆä¸­
                pictureRenderDataList.add(finalUserSignatureUrl);
            }
        }
        // åˆ¤æ–­é›†åˆé•¿åº¦ï¼Œå¹¶è¡¥null到5个
        while (pictureRenderDataList.size() < 5) {
            pictureRenderDataList.add(null);
        }
        // èŽ·å–è®¾å¤‡ä¿¡æ¯
        List<ProcessMethodVerifyMachineAttachment> processMethodVerifyMachineAttachmentList = processMethodVerifyMachineAttachmentService.list(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
                .eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId));
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/method-verify.docx");
        Configure configure = Configure.builder()
                .bind("processMethodVerifyMachineAttachmentList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("processMethodVerify", exportWordTemplate);
                    put("processMethodVerifyMachineAttachmentList", processMethodVerifyMachineAttachmentList);
                    put("affirmUserUrl1", pictureRenderDataList.get(0));
                    put("affirmUserUrl2", pictureRenderDataList.get(1));
                    put("affirmUserUrl3", pictureRenderDataList.get(2));
                    put("affirmUserUrl4", pictureRenderDataList.get(3));
                    put("affirmUserUrl5", pictureRenderDataList.get(4));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "标准(方法)确认记录", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    private ProcessMethodVerifyExportWordDto getExportWordTemplate(ProcessMethodVerify processMethodVerify) {
        ProcessMethodVerifyExportWordDto processMethodVerifyExportWordDto = new ProcessMethodVerifyExportWordDto();
        BeanUtil.copyProperties(processMethodVerify, processMethodVerifyExportWordDto);
        // ï¼ˆäººï¼‰æ˜¯å¦æ»¡è¶³
        if (processMethodVerify.getPersonIsSatisfied() != null) {
            processMethodVerifyExportWordDto.setPersonIsSatisfiedStr(processMethodVerify.getPersonIsSatisfied() == 1 ? "√" : "×");
        }
        // ï¼ˆæœºï¼‰æ˜¯å¦æ»¡è¶³
        if (processMethodVerify.getMachineIsSatisfied() != null) {
            processMethodVerifyExportWordDto.setMachineIsSatisfiedStr(processMethodVerify.getMachineIsSatisfied() == 1 ? "√" : "×");
        }
        // ï¼ˆæ–™ï¼‰æ˜¯å¦æ»¡è¶³
        if (processMethodVerify.getMaterialIsSatisfied() != null) {
            processMethodVerifyExportWordDto.setMaterialIsSatisfiedStr(processMethodVerify.getMaterialIsSatisfied() == 1 ? "√" : "×");
        }
        // ï¼ˆæ³•)是否满足
        if (processMethodVerify.getMethodIsSatisfied() != null) {
            processMethodVerifyExportWordDto.setMethodIsSatisfiedStr(processMethodVerify.getMethodIsSatisfied() == 1? "√" : "×");
        }
        // ï¼ˆçŽ¯ï¼‰æ˜¯å¦æ»¡è¶³
        if (processMethodVerify.getEnvironmentIsSatisfied() != null) {
            processMethodVerifyExportWordDto.setEnvironmentIsSatisfiedStr(processMethodVerify.getEnvironmentIsSatisfied() == 1 ? "√" : "×");
        }
        // ï¼ˆæµ‹é‡æº¯æºæ€§ï¼‰æ˜¯å¦æ»¡è¶³
        if (processMethodVerify.getTraceabilityIsSatisfied() != null) {
            processMethodVerifyExportWordDto.setTraceabilityIsSatisfiedStr(processMethodVerify.getTraceabilityIsSatisfied() == 1 ? "√" : "×");
        }
        // ï¼ˆæ ·å“ç®¡ç†éœ€æ±‚)是否满足
        if (processMethodVerify.getManagementIsSatisfied() != null) {
            processMethodVerifyExportWordDto.setManagementIsSatisfiedStr(processMethodVerify.getManagementIsSatisfied() == 1 ? "√" : "×");
        }
        // ï¼ˆå…¶ä»–)是否满足
        if (processMethodVerify.getOtherIsSatisfied() != null) {
            processMethodVerifyExportWordDto.setOtherIsSatisfiedStr(processMethodVerify.getOtherIsSatisfied() == 1 ? "√" : "×");
        }
        // ç¡®è®¤æ—¥æœŸ
        processMethodVerifyExportWordDto.setConfirmDateStr(processMethodVerify.getConfirmDate() != null ? processMethodVerify.getConfirmDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")): null);
        return processMethodVerifyExportWordDto;
    }
    /**
     * æ·»åŠ ä¸Šå²—è¯
     *
     * @param methodVerifyDto
     */
    private void addWorkFile(ProcessMethodVerifyDto methodVerifyDto) {
        List<String> confirmUserIds = StrUtil.split(methodVerifyDto.getConfirmUser(), ",");
        List<ProcessMethodVerifyWorkFile> workFileList = new ArrayList<>();
        for (String confirmUserId : confirmUserIds) {
            Integer userId = Integer.valueOf(confirmUserId);
            String workName = processMethodVerifyWorkFileMapper.selectWorkFile(userId);
            // åˆ¤æ–­æ˜¯å¦æœ‰è¯ä¹¦
            if (StringUtils.isNotBlank(workName)) {
                User user = userMapper.selectById(userId);
                ProcessMethodVerifyWorkFile workFile = new ProcessMethodVerifyWorkFile();
                workFile.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
                workFile.setType(1);
                workFile.setFileUrl(workName);
                workFile.setFileName(workName);
                workFile.setUserId(user.getId());
                workFile.setUserName(user.getName());
                workFileList.add(workFile);
            }
        }
        if (CollectionUtils.isNotEmpty(workFileList)) {
            processMethodVerifyWorkFileService.saveBatch(workFileList);
        }
    }
    /**
     * æ·»åŠ è®¾å¤‡ä¿¡æ¯
     *
     * @param methodVerifyDto
     */
    private void addDevice(ProcessMethodVerifyDto methodVerifyDto) {
        List<ProcessMethodVerifyCalibrationsFile> calibrationsFiles = new ArrayList<>();
        for (ProcessMethodVerifyMachineAttachment machineAttachment : methodVerifyDto.getMachineAttachmentList()) {
            machineAttachment.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
            // æŸ¥è¯¢æ ¡å‡†è¯ä¹¦
            String calibrationsName = processMethodVerifyCalibrationsFileMapper.selectCalibrationsFile(machineAttachment.getDeviceId());
            // åˆ¤æ–­æ˜¯å¦æœ‰è¯ä¹¦
            if (StringUtils.isNotBlank(calibrationsName)) {
                ProcessMethodVerifyCalibrationsFile calibrationsFile = new ProcessMethodVerifyCalibrationsFile();
                calibrationsFile.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
                calibrationsFile.setType(1);
                calibrationsFile.setFileUrl(calibrationsName);
                calibrationsFile.setFileName(calibrationsName);
                calibrationsFile.setDeviceId((machineAttachment.getDeviceId()));
                calibrationsFiles.add(calibrationsFile);
            }
        }
        // æ·»åŠ æ ¡å‡†è¯ä¹¦
        processMethodVerifyCalibrationsFileService.saveBatch(calibrationsFiles);
        // æ·»åŠ è®¾å¤‡
        processMethodVerifyMachineAttachmentService.saveBatch(methodVerifyDto.getMachineAttachmentList());
    }
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,423 @@
package com.ruoyi.process.service.impl;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.process.mapper.ProcessReportMapper;
import com.ruoyi.process.pojo.ProcessReport;
import com.ruoyi.process.service.ProcessReportService;
import com.ruoyi.system.mapper.UserMapper;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * <p>
 * æ£€éªŒæŠ¥å‘Šå‘放登记表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-05 08:58:39
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessReportServiceImpl extends ServiceImpl<ProcessReportMapper, ProcessReport> implements ProcessReportService {
    @Resource
    private ProcessReportMapper processReportMapper;
    @Value("${wordUrl}")
    private String wordUrl;
    @Resource
    private UserMapper userMapper;
    @Override
    public IPage<ProcessReport> pageProcessReport(Page page, ProcessReport processReport) {
        //todo ä»…看我
        IPage<ProcessReport> processReportIPage = processReportMapper.pageProcessReport(page, QueryWrappers.queryWrappers(processReport));
//        for (ProcessReport record : processReportIPage.getRecords()) {
//            List<String> name = new ArrayList<>();
//            for (String s : record.getSignatory().split(",")) {
//                User user = userMapper.selectById(Integer.parseInt(s));
//                name.add(user.getName());
//            }
//            String signatoryName = name.stream().collect(Collectors.joining(","));
//            record.setSignatoryName(signatoryName);
//        }
        return processReportIPage;
    }
    @Override
    public String exportProcessReport(List<Integer> ids) {
        List<ProcessReport> processReports = processReportMapper.getIds(ids);
        for (ProcessReport processReport : processReports) {
            List<String> name = new ArrayList<>();
            for (String s : processReport.getSignatory().split(",")) {
                User user = userMapper.selectById(Integer.parseInt(s));
                name.add(user.getName());
            }
            String signatoryName = name.stream().collect(Collectors.joining(","));
            processReport.setSignatoryName(signatoryName);
        }
        //生成检验报告发放登记表
        String url;
        try {
            InputStream inputStream = this.getClass().getResourceAsStream("/static/report-deal.docx");
            File file = File.createTempFile("temp", ".tmp");
            OutputStream outputStream = new FileOutputStream(file);
            IOUtils.copy(inputStream, outputStream);
            url = file.getAbsolutePath();
        } catch (FileNotFoundException e) {
            throw new ErrorException("找不到模板文件");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        List<Map<String, Object>> reportList = new ArrayList<>();
        Integer index = 1;
        Integer index1 = 1;
        for (int c = 0; c < processReports.size(); c++) {
            //超过15行换页
            if (c % 15 == 0) {
                List<RowRenderData> rows = new ArrayList<>();
                //表格的行数
                for (int i = 0; i < 16; i++) {
                    RowRenderData rowRenderData = new RowRenderData();
                    RowStyle rowStyle = new RowStyle();
                    rowStyle.setHeight(40);
                    rowRenderData.setRowStyle(rowStyle);
                    List<CellRenderData> cells = new ArrayList<>();
                    //表格的列数
                    for (int j = 0; j < 10; j++) {
                        CellRenderData cellRenderData = new CellRenderData();
                        CellStyle cellStyle = new CellStyle();
                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                        cellRenderData.setCellStyle(cellStyle);
                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                        ParagraphStyle paragraphStyle = new ParagraphStyle();
                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                        paragraphRenderData.setParagraphStyle(paragraphStyle);
                        List<RenderData> renderData = new ArrayList<>();
                        TextRenderData textRenderData = new TextRenderData();
                        Style style = new Style();
                        style.setFontFamily("宋体");
                        style.setColor("000000");
                        textRenderData.setStyle(style);
                        if (i == 0) {
                            //第一行
                            if (j == 0) {
                                //第一列序号
                                textRenderData.setText("序号@No.");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                //第二列
                                textRenderData.setText("检验报告编号@Inspection report number");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 2) {
                                //第三列
                                textRenderData.setText("页数@Pages");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 3) {
                                //第四列
                                textRenderData.setText("发送份数@Number of copies sent");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 4) {
                                //第五列
                                textRenderData.setText("发往何处@Where to send to");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 5) {
                                //第六列
                                textRenderData.setText("发送方式@Send method");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 6) {
                                //第七列
                                textRenderData.setText("发送日期@Date sent");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }else if (j == 7) {
                                //第八列
                                textRenderData.setText("发送人@Sender");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }else if (j == 8) {
                                //第九列
                                textRenderData.setText("签收人@Signatory");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }else{
                                //第十列
                                textRenderData.setText("备注@Remark");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                        }
                        else {
                            //其他行
                            if (j == 0) {
                                //第一列
                                try{
                                    String insReportCode = processReports.get((i-1) + (index1 - 1) * 20).getInsReportCode();
                                    textRenderData.setText(index + "");
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                index++;
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getInsReportCode());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 2) {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getPages());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 3) {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getNumber());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 4) {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSend());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 5) {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getMethod());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 6) {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSendTime()+"");
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 7) {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSendUserName());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 8) {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSignatoryName());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else {
                                try{
                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getRemark());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                        }
                    }
                    rowRenderData.setCells(cells);
                    if (rowRenderData.getCells().size() != 0) {
                        rows.add(rowRenderData);
                    }
                }
                TableRenderData tableRenderData = new TableRenderData();
                tableRenderData.setRows(rows);
                int countSize = tableRenderData.getRows().get(0).getCells().size();
                for (RowRenderData row : tableRenderData.getRows()) {
                    if (row.getCells().size() != countSize) {
                        throw new ErrorException("每行单元格不相等");
                    }
                }
                TableStyle tableStyle = new TableStyle();
                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                tableStyle.setAlign(TableRowAlign.CENTER);
                BorderStyle borderStyle = new BorderStyle();
                borderStyle.setColor("000000");
                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                borderStyle.setSize(14);
                tableStyle.setLeftBorder(borderStyle);
                tableStyle.setTopBorder(borderStyle);
                tableStyle.setRightBorder(borderStyle);
                tableStyle.setBottomBorder(borderStyle);
                tableRenderData.setTableStyle(tableStyle);
                Map<String, Object> table = new HashMap<>();
                table.put("report", tableRenderData);
                table.put("index1", index1);
                reportList.add(table);
                index1++;
            }
        }
        Integer finalIndex = index1;
        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("reportList", reportList);
                }});
        String name = UUID.randomUUID() + "_检验报告发放登记表" + ".docx";
        try {
            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //处理中英文换行的问题
        String path = wordUrl + "/" + name;
        try {
            FileInputStream stream1 = new FileInputStream(path);
            XWPFDocument document1 = new XWPFDocument(stream1);
            List<XWPFTable> xwpfTables1 = document1.getTables();
            for (int i = 0; i < xwpfTables1.size(); i++) {
                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
                            String[] split = text.split("@");
                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
                            XWPFRun run = xwpfParagraph.createRun();
                            run.setText(split[0]);
                            if (ObjectUtils.isNotNull(split[1])) {
                                run.addBreak();
                                run.setText(split[1]);
                            }
                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
                        }
                    }
                }
            }
            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
            document1.write(fileOutputStream1);
            fileOutputStream1.close();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return name;
    }
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessSampleServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package com.ruoyi.process.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.process.mapper.ProcessSampleMapper;
import com.ruoyi.process.mapper.ProcessTotalSampleMapper;
import com.ruoyi.process.pojo.ProcessSample;
import com.ruoyi.process.pojo.ProcessTotalSample;
import com.ruoyi.process.service.ProcessSampleService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:49
 */
@Service
public class ProcessSampleServiceImpl extends ServiceImpl<ProcessSampleMapper, ProcessSample> implements ProcessSampleService {
    @Resource
    private ProcessSampleMapper processSampleMapper;
    @Resource
    private ProcessTotalSampleMapper processTotalSampleMapper;
    @Override
    public IPage<ProcessSample> pageProcessSample(Page page, ProcessSample processSample) {
        //todo:仅看我
        if (ObjectUtils.isEmpty(processSample.getTotalSampleId())) {
            //获取当前月份
            LocalDate currentDate = LocalDate.now();
            // å®šä¹‰æ—¥æœŸæ ¼å¼
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
            // æ ¼å¼åŒ–当前日期
            String currentMonth = currentDate.format(formatter);
            //查询历史
            ProcessTotalSample processTotalSample = processTotalSampleMapper.selectOne(Wrappers.<ProcessTotalSample>lambdaQuery().eq(ProcessTotalSample::getMonth, currentMonth));
            processSample.setTotalSampleId(processTotalSample.getId());
        }
        return processSampleMapper.pageProcessSample(page, QueryWrappers.queryWrappers(processSample));
    }
    @Override
    public int addProcessSample(ProcessSample processSample) {
        ProcessTotalSample processTotalSample;
        if (ObjectUtils.isEmpty(processSample.getTotalSampleId())){
            LocalDate dealTime = LocalDate.now();
            // å®šä¹‰æ—¥æœŸæ ¼å¼
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
            // æ ¼å¼åŒ–当前日期
            String currentMonth = dealTime.format(formatter);
            processTotalSample= processTotalSampleMapper.selectOne(Wrappers.<ProcessTotalSample>lambdaQuery().eq(ProcessTotalSample::getMonth,currentMonth));
            processSample.setTotalSampleId(processTotalSample.getId());
        }else {
            processTotalSample= processTotalSampleMapper.selectById(processSample.getTotalSampleId());
        }
        processSampleMapper.insert(processSample);
        processTotalSample.setTotalNum(processSample.getNum()+processTotalSample.getTotalNum());
        return processTotalSampleMapper.updateById(processTotalSample);
    }
    @Override
    public int delProcessSample(Integer id) {
        ProcessSample processSample = processSampleMapper.selectById(id);
        processSampleMapper.deleteById(id);
        ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(processSample.getTotalSampleId());
        processTotalSample.setTotalNum(processTotalSample.getTotalNum()-processSample.getNum());
        return processTotalSampleMapper.updateById(processTotalSample);
    }
    @Override
    public int doProcessSample(ProcessSample processSample) {
        if (ObjectUtils.isNotEmpty(processSample.getNum())) {
            ProcessSample oldProcessSample = processSampleMapper.selectById(processSample.getId());
            ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(processSample.getTotalSampleId());
            processTotalSample.setTotalNum(processTotalSample.getTotalNum() - oldProcessSample.getNum() + processSample.getNum());
            processTotalSampleMapper.updateById(processTotalSample);
        }
        return processSampleMapper.updateById(processSample);
    }
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotalSampleServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,437 @@
package com.ruoyi.process.service.impl;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.process.mapper.ProcessSampleMapper;
import com.ruoyi.process.mapper.ProcessTotalSampleMapper;
import com.ruoyi.process.pojo.ProcessSample;
import com.ruoyi.process.pojo.ProcessTotalSample;
import com.ruoyi.process.service.ProcessTotalSampleService;
import com.ruoyi.system.mapper.UserMapper;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æ ·å“æŽ¥æ”¶æ€»è¡¨ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-12 05:02:58
 */
@Service
public class ProcessTotalSampleServiceImpl extends ServiceImpl<ProcessTotalSampleMapper, ProcessTotalSample> implements ProcessTotalSampleService {
    @Value("${wordUrl}")
    private String wordUrl;
    @Value("${file.path}")
    private String imgUrl;
    @Resource
    private UserMapper userMapper;
    @Resource
    private ProcessTotalSampleMapper processTotalSampleMapper;
    @Resource
    private ProcessSampleMapper processSampleMapper;
    @Override
    public IPage<ProcessTotalSample> pageProcessTotalSample(Page page, ProcessTotalSample processTotalSample) {
        return processTotalSampleMapper.pageProcessTotalSample(page, QueryWrappers.queryWrappers(processTotalSample));
    }
    @Override
    public int submitProcessTotalSample(Integer id) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("未找到填表人的电子签名,请上传自己的电子签名!");
        ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(id);
        processTotalSample.setSubmitUser(userId);
        processTotalSample.setSubmitState("已提交");
        processTotalSample.setSubmitUrl(user.getSignatureUrl());
        //生成样品处理申请表并将填表人的电子签名印上
        processTotalSample.setUrl(processTotalSample(id,user.getSignatureUrl()));
        return processTotalSampleMapper.updateById(processTotalSample);
    }
    @Override
    public int checkProcessTotalSample(Integer id, String state) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("未找到审核人的电子签名,请上传自己的电子签名!");
        ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(id);
        processTotalSample.setExamineUser(userId);
        processTotalSample.setExamineState(state);
        processTotalSample.setExamineUrl(user.getSignatureUrl());
        if (state.equals("不通过")) {
            processTotalSample.setSubmitState("待提交");
        }
        //将审核人的电子签名印上
        wordInsertUrl(new HashMap<String, Object>() {{
            put("examineUrl", new FilePictureRenderData(100,50,imgUrl + "/" + user.getSignatureUrl()));
        }},  wordUrl+"/"+processTotalSample.getUrl());
        return processTotalSampleMapper.updateById(processTotalSample);
    }
    @Override
    public int ratifyProcessTotalSample(Integer id, String state) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("未找到批准人的电子签名,请上传自己的电子签名!");
        ProcessTotalSample processTotalSample = processTotalSampleMapper.selectById(id);
        processTotalSample.setRatifyUser(userId);
        processTotalSample.setRatifyState(state);
        processTotalSample.setRatifyUrl(user.getSignatureUrl());
        if (state.equals("不通过")) {
            processTotalSample.setSubmitState("待提交");
        }
        //将批准人的签名印上
        wordInsertUrl(new HashMap<String, Object>() {{
            put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + user.getSignatureUrl()));
        }},  wordUrl+"/"+processTotalSample.getUrl());
        return processTotalSampleMapper.updateById(processTotalSample);
    }
    //生成样品处理表word
    private String processTotalSample(Integer id,String signatureUrl){
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
        List<ProcessSample> processSamples = processSampleMapper.selectList(Wrappers.<ProcessSample>lambdaQuery().eq(ProcessSample::getTotalSampleId,id));
        String url;
        try {
            InputStream inputStream = this.getClass().getResourceAsStream("/static/sample-receive.docx");
            File file = File.createTempFile("temp", ".tmp");
            OutputStream outputStream = new FileOutputStream(file);
            IOUtils.copy(inputStream, outputStream);
            url = file.getAbsolutePath();
        } catch (FileNotFoundException e) {
            throw new ErrorException("找不到模板文件");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        List<Map<String, Object>> sampleList = new ArrayList<>();
        Integer index = 1;
        Integer index1 = 1;
        for (int c = 0; c < processSamples.size(); c++) {
            //超过20行换页
            if (c % 20 == 0) {
                List<RowRenderData> rows = new ArrayList<>();
                //表格的行数
                for (int i = 0; i < 21; i++) {
                    RowRenderData rowRenderData = new RowRenderData();
                    RowStyle rowStyle = new RowStyle();
                    rowStyle.setHeight(40);
                    rowRenderData.setRowStyle(rowStyle);
                    List<CellRenderData> cells = new ArrayList<>();
                    //表格的列数
                    for (int j = 0; j < 8; j++) {
                        CellRenderData cellRenderData = new CellRenderData();
                        CellStyle cellStyle = new CellStyle();
                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                        cellRenderData.setCellStyle(cellStyle);
                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                        ParagraphStyle paragraphStyle = new ParagraphStyle();
                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                        paragraphRenderData.setParagraphStyle(paragraphStyle);
                        List<RenderData> renderData = new ArrayList<>();
                        TextRenderData textRenderData = new TextRenderData();
                        Style style = new Style();
                        style.setFontFamily("宋体");
                        style.setColor("000000");
                        textRenderData.setStyle(style);
                        if (i == 0) {
                            //第一行
                            if (j == 0) {
                                //第一列序号
                                textRenderData.setText("收样日期@Date of receipt");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                //第二列样品名称
                                textRenderData.setText("样品编号@Sample number");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 2) {
                                //第三列样品编号
                                textRenderData.setText("样品名称@Sample name");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 3) {
                                //第四列供样单位
                                textRenderData.setText("样品数量@Number of samples");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 4) {
                                //第五列数量
                                textRenderData.setText("来样单位@Sample unit");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 5) {
                                //第六列处理方式
                                textRenderData.setText("留样日期@Sample retention date");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 6) {
                                //第六列处理方式
                                textRenderData.setText("样品状态@Sample status");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else {
                                //第七列时间
                                textRenderData.setText("退样签收和/或处理日期@Return signature and/or processing date");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                        }
                        else {
                            //其他行
                            if (j == 0) {
                                //第一列
                                try{
                                    String receiveDate = processSamples.get((i-1) + (index1 - 1) * 20).getReceiveDate().format(formatter);
                                    textRenderData.setText(receiveDate);
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                index++;
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                try{
                                    textRenderData.setText(processSamples.get((i-1) + (index1 - 1) * 20).getSampleCode());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 2) {
                                try{
                                    textRenderData.setText(processSamples.get((i-1) + (index1 - 1) * 20).getSampleName());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 3) {
                                try{
                                    textRenderData.setText(processSamples.get((i-1) + (index1 - 1) * 20).getNum()+"");
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 4) {
                                try{
                                    textRenderData.setText(processSamples.get((i-1) + (index1 - 1) * 20).getSampleSupplier());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 5) {
                                try{
                                    textRenderData.setText(processSamples.get((i-1) + (index1 - 1) * 20).getLeaveDate().format(formatter));
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 5) {
                                try{
                                    textRenderData.setText(processSamples.get((i-1) + (index1 - 1) * 20).getSampleState());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else {
                                try{
                                    textRenderData.setText(processSamples.get((i-1) + (index1 - 1) * 20).getDealTime().format(formatter));
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                        }
                    }
                    rowRenderData.setCells(cells);
                    if (rowRenderData.getCells().size() != 0) {
                        rows.add(rowRenderData);
                    }
                }
                TableRenderData tableRenderData = new TableRenderData();
                tableRenderData.setRows(rows);
                int countSize = tableRenderData.getRows().get(0).getCells().size();
                for (RowRenderData row : tableRenderData.getRows()) {
                    if (row.getCells().size() != countSize) {
                        throw new ErrorException("每行单元格不相等");
                    }
                }
                TableStyle tableStyle = new TableStyle();
                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                tableStyle.setAlign(TableRowAlign.CENTER);
                BorderStyle borderStyle = new BorderStyle();
                borderStyle.setColor("000000");
                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                borderStyle.setSize(14);
                tableStyle.setLeftBorder(borderStyle);
                tableStyle.setTopBorder(borderStyle);
                tableStyle.setRightBorder(borderStyle);
                tableStyle.setBottomBorder(borderStyle);
                tableRenderData.setTableStyle(tableStyle);
                Map<String, Object> table = new HashMap<>();
                table.put("sample", tableRenderData);
                table.put("index1", index1);
                sampleList.add(table);
                index1++;
            }
        }
        Integer finalIndex = index1;
        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("sampleList", sampleList);
                    put("size", finalIndex);
                    put("examineUrl", null);
                    put("ratifyUrl", null);
                    put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
                }});
        String name = UUID.randomUUID() + "_检验样品登记表" + ".docx";
        try {
            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //处理中英文换行的问题
        String path = wordUrl + "/" + name;
        try {
            FileInputStream stream1 = new FileInputStream(path);
            XWPFDocument document1 = new XWPFDocument(stream1);
            List<XWPFTable> xwpfTables1 = document1.getTables();
            for (int i = 0; i < xwpfTables1.size(); i++) {
                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
                            String[] split = text.split("@");
                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
                            XWPFRun run = xwpfParagraph.createRun();
                            run.setText(split[0]);
                            if (ObjectUtils.isNotNull(split[1])) {
                                run.addBreak();
                                run.setText(split[1]);
                            }
                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
                        }
                    }
                }
            }
            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
            document1.write(fileOutputStream1);
            fileOutputStream1.close();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return name;
    }
    public int wordInsertUrl(Map<String, Object> map, String url) {
        XWPFTemplate template = XWPFTemplate.compile(url).render(map);
        try {
            template.writeAndClose(Files.newOutputStream(Paths.get(url)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return 1;
    }
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,416 @@
package com.ruoyi.process.service.impl;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.process.mapper.ProcessDealMapper;
import com.ruoyi.process.mapper.ProcessTotaldealMapper;
import com.ruoyi.process.pojo.ProcessDeal;
import com.ruoyi.process.pojo.ProcessTotaldeal;
import com.ruoyi.process.service.ProcessTotaldealService;
import com.ruoyi.system.mapper.UserMapper;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æ£€æµ‹æˆ–校准物品的处置总表(历史) æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-02 03:59:09
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessTotaldealServiceImpl extends ServiceImpl<ProcessTotaldealMapper, ProcessTotaldeal> implements ProcessTotaldealService {
    @Resource
    private ProcessTotaldealMapper processTotaldealMapper;
    @Resource
    private ProcessDealMapper processDealMapper;
    @Value("${wordUrl}")
    private String wordUrl;
    @Value("${file.path}")
    private String imgUrl;
    @Resource
    private UserMapper userMapper;
    @Override
    public IPage<ProcessTotaldeal> pageProcessTotaldeal(Page page, ProcessTotaldeal processTotaldeal) {
        return processTotaldealMapper.pageProcessTotaldeal(page, QueryWrappers.queryWrappers(processTotaldeal));
    }
    @Override
    public int submitProcessTotaldeal(Integer id) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        if (ObjectUtils.isEmpty(user.getSignatureUrl())) {
            throw new ErrorException("未找到填表人的电子签名,请上传自己的电子签名!");
        }
        ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id);
        processTotaldeal.setSubmitUser(userId);
        processTotaldeal.setSubmitState("已提交");
        processTotaldeal.setSubmitUrl(user.getSignatureUrl());
        //生成样品处理申请表并将填表人的电子签名印上
        processTotaldeal.setUrl(processTotaldeal(id, user.getSignatureUrl()));
        return processTotaldealMapper.updateById(processTotaldeal);
    }
    @Override
    public int checkProcessTotaldeal(Integer id, String state) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        if (ObjectUtils.isEmpty(user.getSignatureUrl())) {
            throw new ErrorException("未找到审核人的电子签名,请上传自己的电子签名!");
        }
        ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id);
        processTotaldeal.setExamineUser(userId);
        processTotaldeal.setExamineState(state);
        processTotaldeal.setExamineUrl(user.getSignatureUrl());
        if (state.equals("不通过")) {
            processTotaldeal.setSubmitState("待提交");
        }
        //将审核人的电子签名印上
        wordInsertUrl(new HashMap<String, Object>() {{
            put("examineUrl", new FilePictureRenderData(100, 50, imgUrl + "/" + user.getSignatureUrl()));
        }}, wordUrl + "/" + processTotaldeal.getUrl());
        return processTotaldealMapper.updateById(processTotaldeal);
    }
    @Override
    public int ratifyProcessTotaldeal(Integer id, String state) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        if (ObjectUtils.isEmpty(user.getSignatureUrl())) {
            throw new ErrorException("未找到批准人的电子签名,请上传自己的电子签名!");
        }
        ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id);
        processTotaldeal.setRatifyUser(userId);
        processTotaldeal.setRatifyState(state);
        processTotaldeal.setRatifyUrl(user.getSignatureUrl());
        if (state.equals("不通过")) {
            processTotaldeal.setSubmitState("待提交");
        }
        //将批准人的签名印上
        wordInsertUrl(new HashMap<String, Object>() {{
            put("ratifyUrl", new FilePictureRenderData(100, 50, imgUrl + "/" + user.getSignatureUrl()));
        }}, wordUrl + "/" + processTotaldeal.getUrl());
        return processTotaldealMapper.updateById(processTotaldeal);
    }
    //生成样品处理表word
    private String processTotaldeal(Integer id, String signatureUrl) {
        List<ProcessDeal> processDeals = processDealMapper.selectList(Wrappers.<ProcessDeal>lambdaQuery().eq(ProcessDeal::getTotaldealId, id));
        String url;
        try {
            InputStream inputStream = this.getClass().getResourceAsStream("/static/sample-deal.docx");
            File file = File.createTempFile("temp", ".tmp");
            OutputStream outputStream = new FileOutputStream(file);
            IOUtils.copy(inputStream, outputStream);
            url = file.getAbsolutePath();
        } catch (FileNotFoundException e) {
            throw new ErrorException("找不到模板文件");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        List<Map<String, Object>> sampleList = new ArrayList<>();
        Integer index = 1;
        Integer index1 = 1;
        for (int c = 0; c < processDeals.size(); c++) {
            //超过20行换页
            if (c % 20 == 0) {
                List<RowRenderData> rows = new ArrayList<>();
                //表格的行数
                for (int i = 0; i < 21; i++) {
                    RowRenderData rowRenderData = new RowRenderData();
                    RowStyle rowStyle = new RowStyle();
                    rowStyle.setHeight(40);
                    rowRenderData.setRowStyle(rowStyle);
                    List<CellRenderData> cells = new ArrayList<>();
                    //表格的列数
                    for (int j = 0; j < 7; j++) {
                        CellRenderData cellRenderData = new CellRenderData();
                        CellStyle cellStyle = new CellStyle();
                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                        cellRenderData.setCellStyle(cellStyle);
                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                        ParagraphStyle paragraphStyle = new ParagraphStyle();
                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                        paragraphRenderData.setParagraphStyle(paragraphStyle);
                        List<RenderData> renderData = new ArrayList<>();
                        TextRenderData textRenderData = new TextRenderData();
                        Style style = new Style();
                        style.setFontFamily("宋体");
                        style.setColor("000000");
                        textRenderData.setStyle(style);
                        if (i == 0) {
                            //第一行
                            if (j == 0) {
                                //第一列序号
                                textRenderData.setText("序号@No.");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                //第二列样品名称
                                textRenderData.setText("样品名称@Sample name");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 2) {
                                //第三列样品编号
                                textRenderData.setText("样品编号@Sample number");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 3) {
                                //第四列供样单位
                                textRenderData.setText("供样单位@Sample unit");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 4) {
                                //第五列数量
                                textRenderData.setText("数量@Quantity");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 5) {
                                //第六列处理方式
                                textRenderData.setText("处理方式@Processing");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else {
                                //第七列时间
                                textRenderData.setText("时间@Date");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                        } else {
                            //其他行
                            if (j == 0) {
                                //第一列
                                try {
                                    String sampleName = processDeals.get((i - 1) + (index1 - 1) * 20).getSampleName();
                                    textRenderData.setText(index + "");
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                index++;
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                try {
                                    textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleName());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 2) {
                                try {
                                    textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleCode());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 3) {
                                try {
                                    textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleSupplier());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 4) {
                                try {
                                    textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getNum() + "");
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 5) {
                                try {
                                    textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getDealMethod());
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else {
                                try {
                                    textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getDealTime() + "");
                                } catch (Exception e) {
                                    textRenderData.setText("");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                        }
                    }
                    rowRenderData.setCells(cells);
                    if (rowRenderData.getCells().size() != 0) {
                        rows.add(rowRenderData);
                    }
                }
                TableRenderData tableRenderData = new TableRenderData();
                tableRenderData.setRows(rows);
                int countSize = tableRenderData.getRows().get(0).getCells().size();
                for (RowRenderData row : tableRenderData.getRows()) {
                    if (row.getCells().size() != countSize) {
                        throw new ErrorException("每行单元格不相等");
                    }
                }
                TableStyle tableStyle = new TableStyle();
                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                tableStyle.setAlign(TableRowAlign.CENTER);
                BorderStyle borderStyle = new BorderStyle();
                borderStyle.setColor("000000");
                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                borderStyle.setSize(14);
                tableStyle.setLeftBorder(borderStyle);
                tableStyle.setTopBorder(borderStyle);
                tableStyle.setRightBorder(borderStyle);
                tableStyle.setBottomBorder(borderStyle);
                tableRenderData.setTableStyle(tableStyle);
                Map<String, Object> table = new HashMap<>();
                table.put("sample", tableRenderData);
                table.put("index1", index1);
                sampleList.add(table);
                index1++;
            }
        }
        Integer finalIndex = index1;
        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("sampleList", sampleList);
                    put("size", finalIndex);
                    put("examineUrl", null);
                    put("ratifyUrl", null);
                    put("writeUrl", new FilePictureRenderData(100, 50, imgUrl + "/" + signatureUrl));
                }});
        String name = UUID.randomUUID() + "_样品处理申请表" + ".docx";
        try {
            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //处理中英文换行的问题
        String path = wordUrl + "/" + name;
        try {
            FileInputStream stream1 = new FileInputStream(path);
            XWPFDocument document1 = new XWPFDocument(stream1);
            List<XWPFTable> xwpfTables1 = document1.getTables();
            for (int i = 0; i < xwpfTables1.size(); i++) {
                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
                            String[] split = text.split("@");
                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
                            XWPFRun run = xwpfParagraph.createRun();
                            run.setText(split[0]);
                            if (ObjectUtils.isNotNull(split[1])) {
                                run.addBreak();
                                run.setText(split[1]);
                            }
                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
                        }
                    }
                }
            }
            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
            document1.write(fileOutputStream1);
            fileOutputStream1.close();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return name;
    }
    public int wordInsertUrl(Map<String, Object> map, String url) {
        XWPFTemplate template = XWPFTemplate.compile(url).render(map);
        try {
            template.writeAndClose(Files.newOutputStream(Paths.get(url)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return 1;
    }
}
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 {
}
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 {
}
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 {
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,812 @@
package com.ruoyi.process.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.core.domain.entity.InformationNotification;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.DateImageUtil;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.inspect.util.UserUtils;
import com.ruoyi.inspect.util.XWPFDocumentUtils;
import com.ruoyi.process.dto.QualityMonitorDetailsEvaluateDto;
import com.ruoyi.process.dto.QualityMonitorDto;
import com.ruoyi.process.excel.QualityMonitorDetailsUpload;
import com.ruoyi.process.mapper.*;
import com.ruoyi.process.pojo.*;
import com.ruoyi.process.service.QualityMonitorDetailsEvaluateService;
import com.ruoyi.process.service.QualityMonitorDetailsRatifyService;
import com.ruoyi.process.service.QualityMonitorDetailsService;
import com.ruoyi.process.service.QualityMonitorService;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.InformationNotificationService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
 * è´¨é‡ç›‘控计划主表
 *
 * @author zhuo
 * @since 2024-11-06
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class QualityMonitorServiceImpl extends ServiceImpl<QualityMonitorMapper, QualityMonitor> implements QualityMonitorService {
    @Resource
    private QualityMonitorDetailsService qualityMonitorDetailsService;
    @Resource
    private QualityMonitorDetailsMapper qualityMonitorDetailsMapper;
    @Resource
    private UserMapper userMapper;
    @Resource
    private QualityMonitorDetailsRatifyMapper qualityMonitorDetailsRatifyMapper;
    @Resource
    private QualityMonitorDetailsRatifyService qualityMonitorDetailsRatifyService;
    @Resource
    private QualityMonitorDetailsEvaluateMapper qualityMonitorDetailsEvaluateMapper;
    @Resource
    private QualityMonitorDetailsEvaluateService qualityMonitorDetailsEvaluateService;
    @Resource
    private QualityMonitorDetailsEvaluateFileMapper qualityMonitorDetailsEvaluateFileMapper;
    @Resource
    private InformationNotificationService informationNotificationService;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Value("${file.path}")
    private String imgUrl;
    @Value("${wordUrl}")
    private String wordUrl;
    /**
     * å¯¼å…¥ç›‘控计划
     * @param file
     * @return
     */
    @Override
    public boolean importQualityMonitor(MultipartFile file, QualityMonitor monitor) {
        // å½“前登录用户
        Integer userId = SecurityUtils.getUserId().intValue();
        // æ–‡ä»¶åç§°
        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
        QualityMonitor qualityMonitor = new QualityMonitor();
        qualityMonitor.setMonitorName(fileName);
        qualityMonitor.setMonitorYear(monitor.getMonitorYear());
        qualityMonitor.setWriteUserId(userId);
        qualityMonitor.setExamineUserId(monitor.getExamineUserId());
        qualityMonitor.setWriteTime(LocalDateTime.now());
        baseMapper.insert(qualityMonitor);
        if (monitor.getExamineUserId() == null) {
            throw new ErrorException("缺少审核人");
        }
        User user = userMapper.selectById(userId);
        // æ¶ˆæ¯å‘送
        InformationNotification info = new InformationNotification();
        // å‘送人
        info.setCreateUser(user.getName());
        info.setMessageType("6");
        info.setTheme("CNAS质量监控计划审核通知");
        info.setContent(fileName + "质量监控计划待审核");
        info.setSenderId(userId);
        // æŽ¥æ”¶äºº
        info.setConsigneeId(monitor.getExamineUserId());
        info.setJumpPath("a7-Ensure-results-validity");
        informationNotificationService.addInformationNotification(info);
        // å‘送企业微信通知
        threadPoolTaskExecutor.execute(() -> {
            // æŸ¥è¯¢å‘送人
            User people = userMapper.selectById(monitor.getExamineUserId());
            String message = "";
            message += "CNAS质量监控计划审核通知";
            message += "\n请去过程要求-质量监控计划";
            message += "\n" + fileName + "质量监控计划待审核";
            //发送企业微信消息通知
            try {
                WxCpUtils.inform(people.getAccount(), message, null);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
        List<QualityMonitorDetails> detailsUploadList = new ArrayList<>();
        // å¯¼å…¥é™„件内容
        try {
            // excel解析
            EasyExcel.read(file.getInputStream(), QualityMonitorDetailsUpload.class, new AnalysisEventListener<QualityMonitorDetailsUpload>() {
                @Override
                public void invoke(QualityMonitorDetailsUpload detailsUpload, AnalysisContext analysisContext) {
                    // åˆ¤æ–­æ˜¯å¦ä¸ºç©º
                    if (StringUtils.isBlank(detailsUpload.getPlannedTime())) {
                        throw new ErrorException("计划开展时间不能为空");
                    }
                        // å¯¹è±¡å¤åˆ¶
                    QualityMonitorDetails monitorDetails = new QualityMonitorDetails();
                    BeanUtils.copyProperties(detailsUpload, monitorDetails);
                    monitorDetails.setQualityMonitorId(qualityMonitor.getQualityMonitorId());
                    detailsUploadList.add(monitorDetails);
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                }
            }).sheet().doRead();
            qualityMonitorDetailsService.saveBatch(detailsUploadList);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return true;
    }
    /**
     * ç›‘控计划审核
     * @param qualityMonitor
     * @return
     */
    @Override
    public boolean examineQualityMonitor(QualityMonitor qualityMonitor) {
        if (qualityMonitor.getRatifyUserId() == null) {
            throw new ErrorException("缺少批准人");
        }
        // å½“前登录用户
        baseMapper.update(null, Wrappers.<QualityMonitor>lambdaUpdate()
                .eq(QualityMonitor::getQualityMonitorId, qualityMonitor.getQualityMonitorId())
                .set(QualityMonitor::getRatifyUserId, qualityMonitor.getRatifyUserId())
                .set(QualityMonitor::getExamineRemark, qualityMonitor.getExamineRemark())
                .set(QualityMonitor::getExamineStatus, qualityMonitor.getExamineStatus())
                .set(QualityMonitor::getExamineTime, LocalDateTime.now())
        );
        QualityMonitor monitor = baseMapper.selectById(qualityMonitor.getQualityMonitorId());
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        // æ¶ˆæ¯å‘送
        InformationNotification info = new InformationNotification();
        // å‘送人
        info.setCreateUser(user.getName());
        info.setMessageType("6");
        info.setTheme("CNAS质量监控计划批准通知");
        info.setContent(monitor.getMonitorName() + "质量监控计划待批准");
        info.setSenderId(userId);
        // æŽ¥æ”¶äºº
        info.setConsigneeId(qualityMonitor.getRatifyUserId());
        info.setJumpPath("a7-Ensure-results-validity");
        informationNotificationService.addInformationNotification(info);
        // å‘送企业微信通知
        threadPoolTaskExecutor.execute(() -> {
            // æŸ¥è¯¢å‘送人
            User people = userMapper.selectById(qualityMonitor.getRatifyUserId());
            String message = "";
            message += "CNAS质量监控计划批准通知";
            message += "\n请去过程要求-质量监控计划";
            message += "\n" + monitor.getMonitorName() + "质量监控计划待批准";
            //发送企业微信消息通知
            try {
                WxCpUtils.inform(people.getAccount(), message, null);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
        return true;
    }
    /**
     * ç›‘控计划批准
     * @param qualityMonitor
     * @return
     */
    @Override
    public boolean ratifyQualityMonitor(QualityMonitor qualityMonitor) {
        // å½“前登录用户
        baseMapper.update(null, Wrappers.<QualityMonitor>lambdaUpdate()
                .eq(QualityMonitor::getQualityMonitorId, qualityMonitor.getQualityMonitorId())
                .set(QualityMonitor::getRatifyRemark, qualityMonitor.getRatifyRemark())
                .set(QualityMonitor::getRatifyStatus, qualityMonitor.getRatifyStatus())
                .set(QualityMonitor::getRatifyTime, LocalDateTime.now())
        );
        return true;
    }
    /**
     * ç›‘控计划列表
     * @param page
     * @param qualityMonitor
     * @return
     */
    @Override
    public IPage<QualityMonitorDto> pageQualityMonitor(Page page, QualityMonitor qualityMonitor) {
        return baseMapper.pageQualityMonitor(page, QueryWrappers.queryWrappers(qualityMonitor));
    }
    /**
     * ç›‘控计划详情列表
     * @param page
     * @param qualityMonitorDetails
     * @return
     */
    @Override
    public IPage<QualityMonitorDetails> pageQualityMonitorDetail(Page page, QualityMonitorDetails qualityMonitorDetails) {
        if (qualityMonitorDetails.getQualityMonitorId() == null) {
            return new Page();
        }
        return qualityMonitorDetailsMapper.pageQualityMonitorDetail(page, QueryWrappers.queryWrappers(qualityMonitorDetails));
    }
    /**
     * å¯¼å‡ºç›‘控计划
     * @param qualityMonitorId
     * @param response
     */
    @Override
    public void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response) {
        // æŸ¥è¯¢è¯¦æƒ…
        QualityMonitor qualityMonitor = baseMapper.selectById(qualityMonitorId);
        //获取提交人的签名地址
        String writeUrl = userMapper.selectById(qualityMonitor.getWriteUserId()).getSignatureUrl();
        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
            throw new ErrorException("找不到检验人的签名");
        }
        //获取复核人的签名地址
        String examineUrl = null;
        if (qualityMonitor.getExamineUserId() != null) {
            examineUrl = userMapper.selectById(qualityMonitor.getExamineUserId()).getSignatureUrl();
            if (StringUtils.isBlank(examineUrl)) {
                throw new ErrorException("找不到复核人的签名");
            }
        }
        //获取批准人的签名地址
        String ratifyUrl = null;
        if (qualityMonitor.getRatifyUserId() != null) {
            ratifyUrl = userMapper.selectById(qualityMonitor.getRatifyUserId()).getSignatureUrl();
            if (StringUtils.isBlank(ratifyUrl)) {
                throw new ErrorException("找不到复核人的签名");
            }
        }
        // æŸ¥è¯¢è¯¦æƒ…
        List<QualityMonitorDetails> qualityMonitorDetails = qualityMonitorDetailsMapper.selectList(Wrappers.<QualityMonitorDetails>lambdaQuery()
                .eq(QualityMonitorDetails::getQualityMonitorId, qualityMonitorId));
        // åˆ¤æ–­ç›‘控目的一样的值
        AtomicInteger count = new AtomicInteger(1);
        Map<String, List<QualityMonitorDetails>> listMap = qualityMonitorDetails.stream().collect(Collectors.groupingBy(QualityMonitorDetails::getMonitorPurpose));
        listMap.forEach((s, details) -> {
            // æŸ¥è¯¢æ•°é‡è¶…过1的
            if (details.size() > 1) {
                for (QualityMonitorDetails detail : details) {
                    detail.setMonitorPurpose(detail.getMonitorPurpose() + "∑" + count);
                }
                count.getAndIncrement();
            }
        });
        int index = 1;
        for (QualityMonitorDetails qualityMonitorDetail : qualityMonitorDetails) {
            qualityMonitorDetail.setIndex(index);
            index++;
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor.docx");
        String finalExamineUrl = examineUrl;
        String finalRatifyUrl = ratifyUrl;
        Configure configure = Configure.builder()
                .bind("monitorDetailList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("year", qualityMonitor.getMonitorYear());
                    put("monitorDetailList", qualityMonitorDetails);
                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
                    put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
                    put("writeDateUrl", qualityMonitor.getWriteTime() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getWriteTime())).create() : null);
                    put("examineDateUrl", qualityMonitor.getExamineTime() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getExamineTime())).create() : null);
                    put("ratifyDateUrl", qualityMonitor.getRatifyTime() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getRatifyTime())).create() : null);
                }});
        // å¤„理换行问题
        XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument());
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    qualityMonitor.getMonitorName(), "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /************************************************************  æ‰¹å‡†  *******************************************************************/
    /**
     * æŸ¥è¯¢ç›‘控计划详情实施信息
     * @param qualityMonitorDetailsId
     * @return
     */
    @Override
    public QualityMonitorDetailsRatify getQualityMonitorRatify(Integer qualityMonitorDetailsId) {
        QualityMonitorDetailsRatify qualityMonitorDetailsRatify;
        // æŸ¥è¯¢ç›‘控部门id
        qualityMonitorDetailsRatify = qualityMonitorDetailsRatifyMapper.selectOne(Wrappers.<QualityMonitorDetailsRatify>lambdaQuery()
                .eq(QualityMonitorDetailsRatify::getQualityMonitorDetailsId, qualityMonitorDetailsId));
        if (qualityMonitorDetailsRatify == null) {
            // æŸ¥è¯¢è¯¦æƒ…计划
            QualityMonitorDetails qualityMonitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsId);
            qualityMonitorDetailsRatify = new QualityMonitorDetailsRatify();
            qualityMonitorDetailsRatify.setQualityMonitorDetailsId(qualityMonitorDetailsId); // è¯¦æƒ…id
            qualityMonitorDetailsRatify.setMonitorProject(qualityMonitorDetails.getMonitorProject()); // ç›‘控项目
            qualityMonitorDetailsRatify.setMonitorData(DateUtil.format(new Date(), "yyyy-MM")); // ç›‘控时间
            qualityMonitorDetailsRatify.setMonitorPurpose(qualityMonitorDetails.getMonitorPurpose()); // ç›‘控目的
            qualityMonitorDetailsRatify.setParticipant(qualityMonitorDetails.getParticipant()); // å‚加人员
            qualityMonitorDetailsRatify.setBudget(qualityMonitorDetails.getBudget()); // é¢„ç®—
            qualityMonitorDetailsRatify.setInspectionDepartment(userMapper.selectUserDepartmentLimsName( SecurityUtils.getUserId().intValue()));
        }
        if (qualityMonitorDetailsRatify.getRatifyUserId() != null) {
            qualityMonitorDetailsRatify.setRatifyName(userMapper.selectById(qualityMonitorDetailsRatify.getRatifyUserId()).getName());
        }
        return qualityMonitorDetailsRatify;
    }
    /**
     * æ–°å¢žç›‘控批准实施
     * @param qualityMonitorDetailsRatify
     * @return
     */
    @Override
    public boolean addQualityMonitorRatify(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
        if (qualityMonitorDetailsRatify.getQualityMonitorDetailsId() == null) {
            throw new ErrorException("缺少监控详细信息id");
        }
        qualityMonitorDetailsRatifyService.saveOrUpdate(qualityMonitorDetailsRatify);
        if (qualityMonitorDetailsRatify.getRatifyUserId() != null) {
            // æŸ¥è¯¢è¯¦æƒ…信息
            QualityMonitorDetails monitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsRatify.getQualityMonitorDetailsId());
            Integer userId =SecurityUtils.getUserId().intValue();
            User user = userMapper.selectById(userId);
            // æ¶ˆæ¯å‘送
            InformationNotification info = new InformationNotification();
            // å‘送人
            info.setCreateUser(user.getName());
            info.setMessageType("6");
            info.setTheme("CNAS质量监控实施批准通知");
            info.setContent("监控项目为: " + monitorDetails.getMonitorProject() + " è´¨é‡ç›‘控实施待批准");
            info.setSenderId(userId);
            // æŽ¥æ”¶äºº
            info.setConsigneeId(qualityMonitorDetailsRatify.getRatifyUserId());
            info.setJumpPath("a7-Ensure-results-validity");
            informationNotificationService.addInformationNotification(info);
            // å‘送企业微信通知
            threadPoolTaskExecutor.execute(() -> {
                // æŸ¥è¯¢å‘送人
                User people = userMapper.selectById(qualityMonitorDetailsRatify.getRatifyUserId());
                String message = "";
                message += "CNAS质量监控实施批准通知";
                message += "\n请去过程要求-质量监控计划";
                message += "\n" + "监控项目为: " + monitorDetails.getMonitorProject() + " è´¨é‡ç›‘控实施待批准";
                //发送企业微信消息通知
                try {
                    WxCpUtils.inform(people.getAccount(), message, null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        }
        return true;
    }
    /**
     * ç›‘控计划详情批准意见
     * @param qualityMonitorDetailsRatify
     * @return
     */
    @Override
    public boolean addQualityMonitorRatifyOpinion(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
        qualityMonitorDetailsRatifyService.update(Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate()
                .eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId())
                .set(QualityMonitorDetailsRatify::getRatifyOpinion, qualityMonitorDetailsRatify.getRatifyOpinion())
                .set(QualityMonitorDetailsRatify::getIsFinish, 1));
        return true;
    }
    /**
     * å¯¼å‡ºç›‘控计划详情实施信息
     *
     * @param detailsRatifyId ç›‘控计划详情实施id
     * @param response  å“åº”
     */
    @Override
    public void exportQualityMonitorRatify(Integer detailsRatifyId, HttpServletResponse response) {
        QualityMonitorDetailsRatify qualityMonitorDetailsRatify = qualityMonitorDetailsRatifyMapper.selectOne(Wrappers.<QualityMonitorDetailsRatify>lambdaQuery().eq(QualityMonitorDetailsRatify::getQualityMonitorDetailsId, detailsRatifyId));
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor-details-ratify.docx");
        Configure configure = Configure.builder()
                .bind("processMethodVerifyMachineAttachmentList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("qualityMonitorDetailsRatify", qualityMonitorDetailsRatify);
                    put("ratifyUserUrl", UserUtils.getFinalUserSignatureUrl(qualityMonitorDetailsRatify.getRatifyUserId()));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "质量监控实施计划", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /************************************************************  è¯„ä»·  *******************************************************************/
    /**
     * æŸ¥è¯¢è´¨é‡ç›‘控评价
     * @param qualityMonitorDetailsId
     * @return
     */
    @Override
    public QualityMonitorDetailsEvaluate getQualityMonitorEvaluate(Integer qualityMonitorDetailsId) {
        return qualityMonitorDetailsEvaluateMapper.getQualityMonitorEvaluate(qualityMonitorDetailsId);
    }
    /**
     * æ–°å¢žç›‘控评价
     * @param qualityMonitorDetailsEvaluate
     * @return
     */
    @Override
    public boolean addQualityMonitorEvaluate(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
        if (qualityMonitorDetailsEvaluate.getQualityMonitorDetailsId() == null) {
            throw new ErrorException("缺少监控详细信息id");
        }
        // æŸ¥è¯¢è¯¦æƒ…信息
        QualityMonitorDetails monitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsEvaluate.getQualityMonitorDetailsId());
        // å‘送消息通知
        // åˆ¤æ–­è¯„审结论人是否为空
        if (qualityMonitorDetailsEvaluate.getRatifyUserId() != null) {
            Integer userId =SecurityUtils.getUserId().intValue();
            User user = userMapper.selectById(userId);
            // æ¶ˆæ¯å‘送
            InformationNotification info = new InformationNotification();
            // å‘送人
            info.setCreateUser(user.getName());
            info.setMessageType("6");
            info.setTheme("CNAS质量监控评价结论通知");
            info.setContent("监控项目为: " + monitorDetails.getMonitorProject() + " è´¨é‡ç›‘控待评价结论");
            info.setSenderId(userId);
            // æŽ¥æ”¶äºº
            info.setConsigneeId(qualityMonitorDetailsEvaluate.getRatifyUserId());
            info.setJumpPath("a7-Ensure-results-validity");
            informationNotificationService.addInformationNotification(info);
            // å‘送企业微信通知
            threadPoolTaskExecutor.execute(() -> {
                // æŸ¥è¯¢å‘送人
                User people = userMapper.selectById(qualityMonitorDetailsEvaluate.getRatifyUserId());
                String message = "";
                message += "CNAS质量监控评价结论通知";
                message += "\n请去过程要求-质量监控计划";
                message += "\n" + "监控项目为: " + monitorDetails.getMonitorProject() + " è´¨é‡ç›‘控待评价结论";
                //发送企业微信消息通知
                try {
                    WxCpUtils.inform(people.getAccount(), message, null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        } else {
            // ç›‘控结果评价
            if (qualityMonitorDetailsEvaluate.getImplementUserId() != null) {
                Integer userId =SecurityUtils.getUserId().intValue();
                User user = userMapper.selectById(userId);
                // æ¶ˆæ¯å‘送
                InformationNotification info = new InformationNotification();
                // å‘送人
                info.setCreateUser(user.getName());
                info.setMessageType("6");
                info.setTheme("CNAS质量监控结果评价");
                info.setContent("监控项目为: " + monitorDetails.getMonitorProject() + " è´¨é‡ç›‘控待评价结论");
                info.setSenderId(userId);
                // æŽ¥æ”¶äºº
                info.setConsigneeId(qualityMonitorDetailsEvaluate.getImplementUserId());
                info.setJumpPath("a7-Ensure-results-validity");
                informationNotificationService.addInformationNotification(info);
                // å‘送企业微信通知
                threadPoolTaskExecutor.execute(() -> {
                    // æŸ¥è¯¢å‘送人
                    User people = userMapper.selectById(qualityMonitorDetailsEvaluate.getImplementUserId());
                    String message = "";
                    message += "CNAS质量监控结果评价";
                    message += "\n请去过程要求-质量监控计划";
                    message += "\n" + "监控项目为: " + monitorDetails.getMonitorProject() + " è´¨é‡ç›‘控待评价结论";
                    //发送企业微信消息通知
                    try {
                        WxCpUtils.inform(people.getAccount(), message, null);
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                });
            }
        }
        return qualityMonitorDetailsEvaluateService.saveOrUpdate(qualityMonitorDetailsEvaluate);
    }
    /**
     * ç›‘控评价审批意见
     * @param qualityMonitorDetailsEvaluate
     * @return
     */
    @Override
    public boolean addMonitorEvaluateOpinion(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
        qualityMonitorDetailsEvaluateService.update(Wrappers.<QualityMonitorDetailsEvaluate>lambdaUpdate()
                .eq(QualityMonitorDetailsEvaluate::getDetailsEvaluateId, qualityMonitorDetailsEvaluate.getDetailsEvaluateId())
                .set(QualityMonitorDetailsEvaluate::getRatifyOpinion, qualityMonitorDetailsEvaluate.getRatifyOpinion())
                .set(QualityMonitorDetailsEvaluate::getRatifyTime, LocalDateTime.now())
                .set(QualityMonitorDetailsEvaluate::getIsFinish, 1));
        return true;
    }
    /**
     * æ–°å¢žç›‘控评价附件表
     * @param detailsEvaluateId
     * @param file
     * @return
     */
    @Override
    public boolean uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file) {
        if (detailsEvaluateId == null) {
            throw new ErrorException("缺少监控详情id");
        }
        String urlString;
        String pathName;
        String path;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        QualityMonitorDetailsEvaluateFile evaluateFile = new QualityMonitorDetailsEvaluateFile();
        evaluateFile.setDetailsEvaluateId(detailsEvaluateId);
        evaluateFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // æ˜¯å›¾ç‰‡
            path = imgUrl;
            evaluateFile.setType(1);
        } else {
            // æ˜¯æ–‡ä»¶
            path = wordUrl;
            evaluateFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            evaluateFile.setFileUrl(pathName);
            qualityMonitorDetailsEvaluateFileMapper.insert(evaluateFile);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("附件上传错误");
            return false;
        }
    }
    /**
     * æŸ¥è¯¢ç›‘控评价附件列表
     * @return
     */
    @Override
    public List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer detailsEvaluateId) {
        return qualityMonitorDetailsEvaluateFileMapper.selectList(Wrappers.<QualityMonitorDetailsEvaluateFile>lambdaQuery()
                .eq(QualityMonitorDetailsEvaluateFile::getDetailsEvaluateId, detailsEvaluateId));
    }
    /**
     * å¯¼å‡ºç›‘控评价
     * @param detailsEvaluateId ç›‘控评价id
     */
    @Override
    public void exportQualityMonitorEvaluate(Integer detailsEvaluateId, HttpServletResponse response) {
        // æŸ¥è¯¢ç›‘控评价信息
        QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate = qualityMonitorDetailsEvaluateMapper.selectOne(Wrappers.<QualityMonitorDetailsEvaluate>lambdaQuery().eq(QualityMonitorDetailsEvaluate::getQualityMonitorDetailsId,detailsEvaluateId));
        // æ¸²æŸ“word模板对象
        QualityMonitorDetailsEvaluateDto qualityMonitorDetailsEvaluateDto = new QualityMonitorDetailsEvaluateDto();
        BeanUtils.copyProperties(qualityMonitorDetailsEvaluate, qualityMonitorDetailsEvaluateDto);
        // æ ¼å¼åŒ–æ—¶é—´
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        qualityMonitorDetailsEvaluateDto.setRatifyTimeStr(qualityMonitorDetailsEvaluate.getRatifyTime().format(dateTimeFormatter));
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor-evaluate.docx");
        Configure configure = Configure.builder()
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("qualityMonitorDetailsEvaluate", qualityMonitorDetailsEvaluateDto);
                    put("implementUserUrl", UserUtils.getFinalUserSignatureUrl(Integer.valueOf(qualityMonitorDetailsEvaluate.getImplementUserId())));
                    put("ratifyUserUrl", UserUtils.getFinalUserSignatureUrl(qualityMonitorDetailsEvaluate.getRatifyUserId()));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "监控评价", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /************************************************** ç›‘控完成报告 ****************************************************************/
    /**
     * ä¸Šä¼ ç›‘控完成报告
     * @param file
     * @param qualityMonitorDetailsId
     * @return
     */
    @Override
    public boolean uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId) {
        if (qualityMonitorDetailsId == null) {
            throw new ErrorException("缺少监控详情id");
        }
        Integer userId =SecurityUtils.getUserId().intValue();
        String urlString;
        String pathName;
        try {
            String path = wordUrl;
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            wordInsertUrl(new HashMap<String, Object>() {{
                put("writeUrl", UserUtils.getFinalUserSignatureUrl(userId));
            }}, wordUrl + "/" + pathName.replace("/word", wordUrl));
            qualityMonitorDetailsService.update(Wrappers.<QualityMonitorDetails>lambdaUpdate()
                    .eq(QualityMonitorDetails::getQualityMonitorDetailsId, qualityMonitorDetailsId)
                    .set(QualityMonitorDetails::getFinishReportUrl, pathName));
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            throw new ErrorException("文件上传失败");
        }
    }
    /**
     * æ‰¹å‡†å®ŒæˆæŠ¥å‘Š
     * @param qualityMonitorDetails
     * @return
     */
    @Override
    public boolean ratifyFinishReport(QualityMonitorDetails qualityMonitorDetails) {
        Integer userId =SecurityUtils.getUserId().intValue();
        LambdaUpdateWrapper<QualityMonitorDetails> wrapper = Wrappers.<QualityMonitorDetails>lambdaUpdate()
                .eq(QualityMonitorDetails::getQualityMonitorDetailsId, qualityMonitorDetails.getQualityMonitorDetailsId())
                .set(QualityMonitorDetails::getRatifyUserId, userId)
                .set(QualityMonitorDetails::getRatifyRemark, qualityMonitorDetails.getRatifyRemark())
                .set(QualityMonitorDetails::getRatifyStatus, qualityMonitorDetails.getRatifyStatus())
                .set(QualityMonitorDetails::getRatifyTime, LocalDateTime.now());
        if (qualityMonitorDetails.getRatifyStatus().equals(0)) {
            wrapper.set(QualityMonitorDetails::getFinishReportUrl, null);
        }
        qualityMonitorDetailsMapper.update(null, wrapper);
        // æ·»åŠ æ‰¹å‡†äºº
        QualityMonitorDetails details = qualityMonitorDetailsMapper.selectById(qualityMonitorDetails.getQualityMonitorDetailsId());
        if (StringUtils.isNotBlank(details.getFinishReportUrl())) {
            wordInsertUrl(new HashMap<String, Object>() {{
                put("ratifyUrl", UserUtils.getFinalUserSignatureUrl(userId));
            }}, wordUrl + "/" + details.getFinishReportUrl().replace("/word", wordUrl));
        }
        return true;
    }
    public int wordInsertUrl(Map<String, Object> map, String url) {
        XWPFTemplate template = XWPFTemplate.compile(url).render(map);
        try {
            template.writeAndClose(Files.newOutputStream(Paths.get(url)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return 1;
    }
}
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 {
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1118 @@
package com.ruoyi.process.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.PictureRenderData;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.core.domain.entity.InformationNotification;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.DateImageUtil;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.inspect.util.UserUtils;
import com.ruoyi.process.dto.QualitySuperviseDetailsAccordingDto;
import com.ruoyi.process.dto.QualitySuperviseDetailsCorrectDto;
import com.ruoyi.process.dto.QualitySuperviseDetailsDto;
import com.ruoyi.process.excel.QualitySuperviseDetailsUpload;
import com.ruoyi.process.mapper.*;
import com.ruoyi.process.pojo.*;
import com.ruoyi.process.service.QualitySuperviseDetailsService;
import com.ruoyi.process.service.QualitySuperviseService;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.InformationNotificationService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * è´¨é‡ç›‘督主表
 *
 * @author zhuo
 * @since 2024-11-07
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class QualitySuperviseServiceImpl extends ServiceImpl<QualitySuperviseMapper, QualitySupervise> implements QualitySuperviseService {
    @Resource
    private QualitySuperviseDetailsService qualitySuperviseDetailsService;
    @Resource
    private QualitySuperviseDetailsMapper qualitySuperviseDetailsMapper;
    @Resource
    private QualitySuperviseDetailsRecordMapper qualitySuperviseDetailsRecordMapper;
    @Resource
    private QualitySuperviseDetailsAccordingMapper qualitySuperviseDetailsAccordingMapper;
    @Resource
    private QualitySuperviseDetailsCorrectMapper qualitySuperviseDetailsCorrectMapper;
    @Resource
    private QualitySuperviseDetailsCorrectFileMapper qualitySuperviseDetailsCorrectFileMapper;
    @Resource
    private InformationNotificationService informationNotificationService;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Resource
    private UserMapper userMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Value("${wordUrl}")
    private String wordUrl;
    /**
     * å¯¼å…¥ç›‘督计划
     * @param file
     * @return
     */
    @Override
    public boolean importQualitySupervise(MultipartFile file, QualitySupervise supervise) {
        if (supervise.getRatifyUserId() == null) {
            throw new ErrorException("缺少批准人");
        }
        User ratifyUser = userMapper.selectById(supervise.getRatifyUserId());
        // å½“前登录用户
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        // æ–‡ä»¶åç§°
        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
        QualitySupervise qualitySupervise = new QualitySupervise();
        qualitySupervise.setSuperviseName(fileName);
        qualitySupervise.setSuperviseYear(supervise.getSuperviseYear());
        qualitySupervise.setRecordUserIds(supervise.getRecordUserIds());
        qualitySupervise.setWriteUserId(userId);
        qualitySupervise.setWriteUserName(user.getName());
        qualitySupervise.setWriteTime(LocalDateTime.now());
        qualitySupervise.setRatifyUserId(supervise.getRatifyUserId());
        qualitySupervise.setRatifyUserName(ratifyUser.getName());
        baseMapper.insert(qualitySupervise);
        // æ¶ˆæ¯å‘送
        InformationNotification info = new InformationNotification();
        // å‘送人
        info.setCreateUser(user.getName());
        info.setMessageType("6");
        info.setTheme("CNAS质量监督计划审核通知");
        info.setContent("您有一条质量监督计划待批准");
        info.setSenderId(userId);
        // æŽ¥æ”¶äºº
        info.setConsigneeId(supervise.getRatifyUserId());
        info.setJumpPath("a7-quality-control-plan");
        informationNotificationService.addInformationNotification(info);
        // å‘送企业微信通知
        threadPoolTaskExecutor.execute(() -> {
            // æŸ¥è¯¢å‘送人
            User people = userMapper.selectById(supervise.getRatifyUserId());
            String message = "";
            message += "CNAS质量监督计划批准通知";
            message += "\n请去过程要求-质量监督计划";
            message += "\n" + fileName + "质量监督计划待批准";
            //发送企业微信消息通知
            try {
                WxCpUtils.inform(people.getAccount(), message, null);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
        List<QualitySuperviseDetails> detailsUploadList = new ArrayList<>();
        // å¯¼å…¥é™„件内容
        try {
            // excel解析
            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);
    }
    /**
     * æŸ¥è¯¢è¯¥è®¡åˆ’监督员
     * @param superviseDetailsId
     * @return
     */
    @Override
    public List<Map<String, String>> getRecordUser(Integer superviseDetailsId) {
        return baseMapper.getRecordUser(superviseDetailsId);
    }
    /**
     * å¯¼å‡ºç›‘督计划
     * @param superviseId
     * @param response
     */
    @Override
    public void exportQualitySupervise(Integer superviseId, HttpServletResponse response) {
        QualitySupervise qualitySupervise = baseMapper.selectById(superviseId);
        //获取提交人的签名地址
        String writeUrl = userMapper.selectById(qualitySupervise.getWriteUserId()).getSignatureUrl();
        if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
            throw new ErrorException("找不到检验人的签名");
        }
        //获取批准人的签名地址
        String ratifyUrl = null;
        if (qualitySupervise.getRatifyUserId() != null) {
            ratifyUrl = userMapper.selectById(qualitySupervise.getRatifyUserId()).getSignatureUrl();
            if (StringUtils.isBlank(ratifyUrl)) {
                throw new ErrorException("找不到复核人的签名");
            }
        }
        // å®šä¹‰ä¸€ä¸ªé›†åˆå­˜æ”¾äººå‘˜ç­¾å
        ArrayList<PictureRenderData> recordUserDataList = new ArrayList<>();
        // TODO:确认最多会有5个人
        String recordUserIds = qualitySupervise.getRecordUserIds();
        if (StringUtils.isNotBlank(recordUserIds)) {
            // å¯¹äººå‘˜id字符串进行分割成数组
            String[] userIds = recordUserIds.split(",");
            // å¾ªçŽ¯èŽ·å–äººå‘˜ç­¾å
            for (String userIdStr : userIds) {
                // è½¬æ¢ä¸ºint类型
                Integer userId = Integer.valueOf(userIdStr);
                // èŽ·å–äººå‘˜ç­¾åå¯¹è±¡
                PictureRenderData finalUserSignatureUrl = UserUtils.getFinalUserSignatureUrl(userId);
                // å°†äººå‘˜ç­¾åå¯¹è±¡æ·»åŠ åˆ°é›†åˆä¸­
                recordUserDataList.add(finalUserSignatureUrl);
            }
        }
        // åˆ¤æ–­é›†åˆé•¿åº¦ï¼Œå¹¶è¡¥null到2个
        while (recordUserDataList.size() < 2) {
            recordUserDataList.add(null);
        }
        // æŸ¥è¯¢è¯¦æƒ…
        List<QualitySuperviseDetails> qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.<QualitySuperviseDetails>lambdaQuery()
                .eq(QualitySuperviseDetails::getSuperviseId, superviseId));
        int index = 1;
        for (QualitySuperviseDetails qualitySuperviseDetail : qualitySuperviseDetails) {
            qualitySuperviseDetail.setIndex(index);
            index++;
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-supervise.docx");
        String finalRatifyUrl = ratifyUrl;
        Configure configure = Configure.builder()
                .bind("superviseDetailList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("year", qualitySupervise.getSuperviseYear());
                    put("superviseDetailList", qualitySuperviseDetails);
                    put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
                    put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
                    put("writeDateUrl", qualitySupervise.getWriteTime() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(qualitySupervise.getWriteTime())).create() : null);
                    put("ratifyDateUrl", qualitySupervise.getRatifyTime() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(qualitySupervise.getRatifyTime())).create() : null);
                    put("recordUserUrl1", recordUserDataList.get(0));
                    put("recordUserUrl2", recordUserDataList.get(1));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    qualitySupervise.getSuperviseName(), "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /************************************************ è®°å½• ******************************************************/
    /**
     * æŸ¥è¯¢ç›‘督记录信息
     * @param superviseDetailsId
     * @return
     */
    @Override
    public QualitySuperviseDetailsRecord getSuperviseDetailRecord(Integer superviseDetailsId) {
        QualitySuperviseDetailsRecord detailsRecord;
        detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetailsId));
        if (detailsRecord == null) {
            detailsRecord = new QualitySuperviseDetailsRecord();
        }
        // æ·»åŠ æ‰¹å‡†äººåç§°
        if (detailsRecord.getRatifyUserId() != null) {
            User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
            detailsRecord.setRatifyUserName(user.getName());
        }
        return detailsRecord;
    }
    /**
     * æ–°å¢žç›‘督记录信息
     * @param qualitySuperviseDetailsRecord
     * @return
     */
    @Override
    public boolean addSuperviseDetailRecord(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
        if (qualitySuperviseDetailsRecord.getSuperviseDetailsId() == null) {
            throw new ErrorException("缺少监督详细信息id");
        }
        qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord);
        if (qualitySuperviseDetailsRecord.getRatifyUserId() != null) {
            // æŸ¥è¯¢è¯¦æƒ…信息
            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(qualitySuperviseDetailsRecord.getSuperviseDetailsId());
            Integer userId = SecurityUtils.getUserId().intValue();
            User user = userMapper.selectById(userId);
            // æ¶ˆæ¯å‘送
            InformationNotification info = new InformationNotification();
            // å‘送人
            info.setCreateUser(user.getName());
            info.setMessageType("6");
            info.setTheme("CNAS质量监督记录审批通知");
            info.setContent("监督项目为: " + superviseDetails.getSuperviseProject() + " ç›‘督记录带审批");
            info.setSenderId(userId);
            // æŽ¥æ”¶äºº
            info.setConsigneeId(qualitySuperviseDetailsRecord.getRatifyUserId());
            info.setJumpPath("a7-quality-control-plan");
            informationNotificationService.addInformationNotification(info);
            // å‘送企业微信通知
            threadPoolTaskExecutor.execute(() -> {
                // æŸ¥è¯¢å‘送人
                User people = userMapper.selectById(qualitySuperviseDetailsRecord.getRatifyUserId());
                String message = "";
                message += "CNAS质量监督记录审批通知";
                message += "\n请去过程要求-质量监督计划";
                message += "\n" + "监督项目为: " + superviseDetails.getSuperviseProject() + " ç›‘督记录带审批";
                //发送企业微信消息通知
                try {
                    WxCpUtils.inform(people.getAccount(), message, null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        }
        return true;
    }
    /**
     * ç›‘督记录批准
     * @param qualitySuperviseDetailsRecord
     * @return
     */
    @Override
    public boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
        if (qualitySuperviseDetailsRecord.getIsAccording() == null) {
            throw new ErrorException("缺少最终结果");
        }
        qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, qualitySuperviseDetailsRecord.getSuperviseDetailsId())
                .set(QualitySuperviseDetailsRecord::getRatifyOpinion, qualitySuperviseDetailsRecord.getRatifyOpinion())
                .set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now())
                .set(QualitySuperviseDetailsRecord::getIsAccording, qualitySuperviseDetailsRecord.getIsAccording())
                .set(QualitySuperviseDetailsRecord::getIsFinish, 1));
        return true;
    }
    /**
     * å¯¼å‡ºç›‘督记录表
     * @param superviseDetailsId
     * @param response
     */
    @Override
    public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response) {
        QualitySuperviseDetailsRecord recordDto =  qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId);
        //获取技术负责人的签名地址
        String ratifyUrl = null;
        if (recordDto.getRatifyUserId() != null) {
            ratifyUrl = userMapper.selectById(recordDto.getRatifyUserId()).getSignatureUrl();
            if (StringUtils.isBlank(ratifyUrl)) {
                throw new ErrorException("找不到技术负责人的签名");
            }
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-record.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        String finalRatifyUrl = ratifyUrl;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("supervision", recordDto);
                    put("supervisoruUrl", UserUtils.getFinalUserSignatureUrl(recordDto.getSupervisor()));
                    put("technicalDirectorUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
                    put("technicalDirectorDateUrl", recordDto.getRatifyTime() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(recordDto.getRatifyTime())).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "导出监督记录表", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /*************************************************  ä¸åˆæ ¼å·¥ä½œæŽ§åˆ¶å• ********************************************************/
    /**
     * æ–°å¢žç›‘督记录不符合控制信息
     * @param detailsAccording
     * @return
     */
    @Override
    public boolean addSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
        QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
        // å½“前登录用户信息和部门
        User user = userMapper.selectById( SecurityUtils.getUserId().intValue());
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        switch (detailsAccording.getFlowType()) {
                // ä¸ç¬¦åˆå·¥ä½œæƒ…况记录
            case 0:
                if (detailsAccording.getSuperviseDetailsId() == null) {
                    throw new ErrorException("缺少质量监督详情Id");
                }
                according.setSuperviseDetailsId(detailsAccording.getSuperviseDetailsId());
                according.setOccurrenceDepartment(detailsAccording.getOccurrenceDepartment());//发生部门
                according.setHeadDepartment(detailsAccording.getHeadDepartment());//部门负责人
                according.setFindWay(detailsAccording.getFindWay());//发现途径
                according.setRecordDetail(detailsAccording.getRecordDetail());//不符合记录详细
                according.setRecordAccording(detailsAccording.getRecordAccording());//不合格记录依据
                according.setFoundDepartment(departmentLimsName);//发现部门
                according.setRecordUserId(user.getId());//记录人id
                according.setRecordUserName(user.getName());//记录人
                according.setRecordTime(LocalDate.now());//记录时间
                // å¤„理人信息
                User actionsUser = userMapper.selectById(detailsAccording.getActionsUserId());
                String actionsDepartmentLims = userMapper.selectUserDepartmentLimsName(actionsUser.getId());
                according.setResponsibleDepartment(actionsDepartmentLims);//责任部门
                according.setActionsUserId(actionsUser.getId());//处理人id
                according.setActionsUserName(actionsUser.getName());//处理人
                according.setSupervisedUserId(detailsAccording.getSupervisedUserId());//被监督人id
                // è¢«ç›‘督人
                User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId());
                according.setSupervisedUserName(supervisedUser.getName());//被监督人
                according.setActionsTime(detailsAccording.getSupervisedTime());//被监督时间
                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());//纠正负责人id
                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());//质量负责人id
                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());//记录人id
        detailsAccording.setRecordUserName(user.getName());//记录人
        // è¢«ç›‘督人
        User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId());
        detailsAccording.setSupervisedUserName(supervisedUser.getName());//被监督
        qualitySuperviseDetailsAccordingMapper.insert(detailsAccording);
        if (detailsAccording.getApproverUserId() != null) {
            // æŸ¥è¯¢è¯¦æƒ…信息
            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(detailsAccording.getSuperviseDetailsId());
            // æ¶ˆæ¯å‘送
            InformationNotification info = new InformationNotification();
            // å‘送人
            info.setCreateUser(user.getName());
            info.setMessageType("6");
            info.setTheme("CNAS质量监督不合格控制单填写通知");
            info.setContent("监督项目为: " + superviseDetails.getSuperviseProject() + " ç›‘督不合格控制单待填写");
            info.setSenderId(userId);
            // æŽ¥æ”¶äºº
            info.setConsigneeId(detailsAccording.getApproverUserId());
            info.setJumpPath("a7-quality-control-plan");
            informationNotificationService.addInformationNotification(info);
            // å‘送企业微信通知
            threadPoolTaskExecutor.execute(() -> {
                // æŸ¥è¯¢å‘送人
                User people = userMapper.selectById(detailsAccording.getApproverUserId());
                String message = "";
                message += "CNAS质量监督记录审批通知";
                message += "\n请去过程要求-质量监督计划";
                message += "\n" + "监督项目为: " + superviseDetails.getSuperviseProject() + " ç›‘督不合格控制单待填写";
                //发送企业微信消息通知
                try {
                    WxCpUtils.inform(people.getAccount(), message, null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        }
        return true;
    }
    /**
     * (装备流程)批准监督记录不符合控制信息
     * æ‰¹å‡†å®ŒæˆåŽç»Ÿä¸€å¡«å†™ä¸‰ä¸ªæµç¨‹äººid和部门
     * @param detailsAccording
     * @return
     */
    @Override
    public boolean approverEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
        QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
        according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
        // å½“前登录用户信息和部门
        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        according.setResponsibleDepartment(departmentLimsName);//责任部门
        according.setActionsUserId(user.getId());//处理人id
        according.setActionsUserName(user.getName());//处理人
        according.setCorrectUserId(user.getId());//纠正负责人id
        according.setCorrectUserName(user.getName());//纠正负责人
        according.setQualityManagerUserId(user.getId());//质量负责人id
        according.setQualityManagerUserName(user.getName());//质量负责人
        according.setIsFinish(1);
        qualitySuperviseDetailsAccordingMapper.updateById(according);
        return true;
    }
    /**
     * æŸ¥è¯¢ç›‘督记录不符合控制信息
     * @param superviseDetailsId
     * @return
     */
    @Override
    public QualitySuperviseDetailsAccording getSuperviseDetailAccording(Integer superviseDetailsId) {
        QualitySuperviseDetailsAccording detailsAccording;
        detailsAccording = qualitySuperviseDetailsAccordingMapper.selectOne(Wrappers.<QualitySuperviseDetailsAccording>lambdaQuery()
                .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsId, superviseDetailsId));
        if (detailsAccording == null) {
            detailsAccording = new QualitySuperviseDetailsAccording();
            // æŸ¥è¯¢ç›‘督计划详情
            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
            detailsAccording.setSupervisedUserId(superviseDetails.getSupervisedUserId());
            detailsAccording.setSupervisedUserName(superviseDetails.getSupervisee());
        }
        return detailsAccording;
    }
    /**
     * æŸ¥è¯¢ä¸ç¬¦åˆé¡¹
     * @param page
     * @param detailsAccording
     * @return
     */
    @Override
    public IPage<QualitySuperviseDetailsAccording> pageSuperviseDetailAccording(Page page, QualitySuperviseDetailsAccording detailsAccording) {
        return qualitySuperviseDetailsAccordingMapper.pageSuperviseDetailAccording(page, QueryWrappers.queryWrappers(detailsAccording));
    }
    /**
     * å¯¼å‡ºç›‘督记录不符合控制信息
     * @param superviseDetailAccordingId
     * @param response
     */
    @Override
    public void superviseDetailAccordingExport(Integer superviseDetailAccordingId, HttpServletResponse response) {
        QualitySuperviseDetailsAccordingDto exportDto = qualitySuperviseDetailsAccordingMapper.selectSuperviseDetailsAccording(superviseDetailAccordingId);
        // å‘现部门
        String discovererUrl = null;
        if (exportDto.getRecordUserId() != null) {
            discovererUrl = userMapper.selectById(exportDto.getRecordUserId()).getSignatureUrl();
            if (StringUtils.isBlank(discovererUrl)) {
                throw new ErrorException("找不到发现部门人的签名");
            }
        }
        // å¤„理措施负责人
        String responsibleUrl = null;
        if (exportDto.getCorrectUserId() != null) {
            responsibleUrl = userMapper.selectById(exportDto.getCorrectUserId()).getSignatureUrl();
            if (StringUtils.isBlank(responsibleUrl)) {
                throw new ErrorException("找不到处理措施负责人的签名");
            }
        }
        // æŠ€æœ¯è´Ÿè´£äºº
        String correctiveUrl = null;
        if (exportDto.getQualityManagerUserId() != null) {
            correctiveUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl();
            if (StringUtils.isBlank(correctiveUrl)) {
                throw new ErrorException("找不到技术负责人的签名");
            }
        }
        // è´¨é‡è´Ÿè´£äºº
        String qualityUrl = null;
        if (exportDto.getQualityManagerUserId() != null) {
            qualityUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl();
            if (StringUtils.isBlank(qualityUrl)) {
                throw new ErrorException("找不到质量负责人的签名");
            }
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-according.docx");
        ConfigureBuilder builder = Configure.builder();
        String finalDiscovererUrl = discovererUrl;
        String finalResponsibleUrl = responsibleUrl;
        String finalCorrectiveUrl = correctiveUrl;
        String finalQualityUrl = qualityUrl;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("control", exportDto);
                    put("discovererUrl", StringUtils.isNotBlank(finalDiscovererUrl) ? Pictures.ofLocal(imgUrl + "/" + finalDiscovererUrl).create() : null);
                    put("responsibleUrl", StringUtils.isNotBlank(finalResponsibleUrl) ? Pictures.ofLocal(imgUrl + "/" + finalResponsibleUrl).create() : null);
                    put("correctiveUrl", StringUtils.isNotBlank(finalCorrectiveUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectiveUrl).create() : null);
                    put("qualityUrl", StringUtils.isNotBlank(finalQualityUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "监督记录不符合控制信息", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    /*************************************************  çº æ­£æŽªæ–½å¤„理单 ********************************************************/
    @Override
    public boolean addSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
        QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect();
        // å½“前登录用户信息和部门
        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        switch (detailsCorrect.getFlowType()) {
                // ä¸åˆæ ¼æå‡º
            case 0:
                if (detailsCorrect.getSuperviseDetailsId() == null) {
                    throw new ErrorException("缺少质量监督详情Id");
                }
                correct.setSuperviseDetailsId(detailsCorrect.getSuperviseDetailsId());
                correct.setRaiseResult(detailsCorrect.getRaiseResult());//不合格表述
                correct.setVdeRaiseResult(detailsCorrect.getVdeRaiseResult());//vde专家发现
                correct.setRaiseDepartment(departmentLimsName);//提出部门
                correct.setRaiseUserId(user.getId());//提出人id
                correct.setRaiseUserName(user.getName());// æå‡ºäºº
                correct.setRaiseTime(LocalDate.now());// æå‡ºæ—¶é—´
                // åŽŸå› åˆ†æžäººä¿¡æ¯
                User causeUser = userMapper.selectById(detailsCorrect.getCauseUserId());
                String causeDepartmentLims = userMapper.selectUserDepartmentLimsName(causeUser.getId());
                correct.setCauseDepartment(causeDepartmentLims);//原因分析责任部门
                correct.setCauseUserId(causeUser.getId());//1原因分析人id
                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纠正责任部门
                correct.setCorrectUserId(correctUser.getId());//2纠正人id
                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验证人id
                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());//提出人id
        detailsCorrect.setRaiseUserName(user.getName());// æå‡ºäºº
        qualitySuperviseDetailsCorrectMapper.insert(detailsCorrect);
        if (detailsCorrect.getApproverUserId() != null) {
            // æŸ¥è¯¢è¯¦æƒ…信息
            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(detailsCorrect.getSuperviseDetailsId());
            // æ¶ˆæ¯å‘送
            InformationNotification info = new InformationNotification();
            // å‘送人
            info.setCreateUser(user.getName());
            info.setMessageType("6");
            info.setTheme("CNAS质量监督纠正措施填写通知");
            info.setContent("监督项目为: " + superviseDetails.getSuperviseProject() + " ç›‘督纠正措施待填写");
            info.setSenderId(userId);
            // æŽ¥æ”¶äºº
            info.setConsigneeId(detailsCorrect.getApproverUserId());
            info.setJumpPath("a7-quality-control-plan");
            informationNotificationService.addInformationNotification(info);
            // å‘送企业微信通知
            threadPoolTaskExecutor.execute(() -> {
                // æŸ¥è¯¢å‘送人
                User people = userMapper.selectById(detailsCorrect.getApproverUserId());
                String message = "";
                message += "CNAS质量监督纠正措施填写通知";
                message += "\n请去过程要求-质量监督计划";
                message += "\n" + "监督项目为: " + superviseDetails.getSuperviseProject() + " ç›‘督纠正措施待填写";
                //发送企业微信消息通知
                try {
                    WxCpUtils.inform(people.getAccount(), message, null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        }
        return true;
    }
    /**
     * (装备流程)批准监督纠正处理信息
     * @return
     */
    @Override
    public boolean approveEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
        QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect();
        // å½“前登录用户信息和部门
        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
        correct.setCauseDepartment(departmentLimsName);//原因分析责任部门
        correct.setCauseUserId(user.getId());//1原因分析人id
        correct.setCauseUserName(user.getName());// 1原因分析人
        correct.setCorrectDepartment(departmentLimsName);//2纠正责任部门
        correct.setCorrectUserId(user.getId());//2纠正人id
        correct.setCorrectUserName(user.getName());// 2纠正人
        correct.setValidationDepartment(departmentLimsName);//3验证部门
        correct.setValidationUserId(user.getId());//3验证人id
        correct.setValidationUserName(user.getName());// 3验证人
        correct.setIsFinish(1);
        qualitySuperviseDetailsCorrectMapper.updateById(correct);
        return true;
    }
    /**
     * æŸ¥è¯¢ç›‘督纠正处理
     * @param superviseDetailsId
     * @return
     */
    @Override
    public QualitySuperviseDetailsCorrect getSuperviseDetailCorrect(Integer superviseDetailsId) {
        QualitySuperviseDetailsCorrect detailsCorrect;
        detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectOne(Wrappers.<QualitySuperviseDetailsCorrect>lambdaQuery()
                .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsId, superviseDetailsId));
        if (detailsCorrect == null) {
            detailsCorrect = new QualitySuperviseDetailsCorrect();
        }
        return detailsCorrect;
    }
    /**
     * æŸ¥è¯¢ç›‘督纠正措施列表
     * @param page
     * @param detailsCorrect
     * @return
     */
    @Override
    public IPage<QualitySuperviseDetailsCorrect> pageSuperviseDetailCorrect(Page page, QualitySuperviseDetailsCorrect detailsCorrect) {
        return qualitySuperviseDetailsCorrectMapper.pageSuperviseDetailAccording(page, QueryWrappers.queryWrappers(detailsCorrect));
    }
    /**
     * æ–°å¢žç›‘督纠正措施附件
     * @param superviseDetailsCorrectId
     * @param file
     * @return
     */
    @Override
    public boolean uploadSuperviseDetailCorrectFile(Integer superviseDetailsCorrectId, MultipartFile file) {
        if (superviseDetailsCorrectId == null) {
            throw new ErrorException("缺少纠正措施id");
        }
        String urlString;
        String pathName;
        String path;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        QualitySuperviseDetailsCorrectFile superviseDetailsCorrectFile = new QualitySuperviseDetailsCorrectFile();
        superviseDetailsCorrectFile.setSuperviseDetailsCorrectId(superviseDetailsCorrectId);
        superviseDetailsCorrectFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // æ˜¯å›¾ç‰‡
            path = imgUrl;
            superviseDetailsCorrectFile.setType(1);
        } else {
            // æ˜¯æ–‡ä»¶
            path = wordUrl;
            superviseDetailsCorrectFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            superviseDetailsCorrectFile.setFileUrl(pathName);
            qualitySuperviseDetailsCorrectFileMapper.insert(superviseDetailsCorrectFile);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            throw new ErrorException(e.getMessage());
        }
    }
    /**
     * æŸ¥è¯¢ç›‘督纠正措施附件
     * @param superviseDetailsCorrectId
     * @return
     */
    @Override
    public List<QualitySuperviseDetailsCorrectFile> getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId) {
        return qualitySuperviseDetailsCorrectFileMapper.selectList(Wrappers.<QualitySuperviseDetailsCorrectFile>lambdaQuery()
                .eq(QualitySuperviseDetailsCorrectFile::getSuperviseDetailsCorrectId, superviseDetailsCorrectId));
    }
    /**
     * å¯¼å‡ºç›‘督纠正措施
     * @param superviseDetailsCorrectId
     * @param response
     */
    @Override
    public void exportSuperviseDetaillCorrect(Integer superviseDetailsCorrectId, HttpServletResponse response) {
        QualitySuperviseDetailsCorrect detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectById(superviseDetailsCorrectId);
        QualitySuperviseDetailsCorrectDto detailsCorrectDto = new QualitySuperviseDetailsCorrectDto();
        BeanUtils.copyProperties(detailsCorrect, detailsCorrectDto);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        // æå‡ºæ—¶é—´
        detailsCorrectDto.setRaiseTimeString(detailsCorrectDto.getRaiseTime() != null
                ? detailsCorrectDto.getRaiseTime().format(formatter) : null);
        // åŽŸå› åˆ†æžæ—¶é—´
        detailsCorrectDto.setCauseTimeString(detailsCorrectDto.getCauseTime() != null
                ? detailsCorrectDto.getCauseTime().format(formatter) : null);
        // çº æ­£æ—¶é—´
        detailsCorrectDto.setCorrectTimeString(detailsCorrectDto.getCorrectTime() != null
                ? detailsCorrectDto.getCorrectTime().format(formatter) : null);
        // éªŒè¯æ—¶é—´
        detailsCorrectDto.setValidationTimeString(detailsCorrectDto.getValidationTime() != null
                ? detailsCorrectDto.getValidationTime().format(formatter) : null);
        // æå‡ºäººç­¾å
        String raiseUrl = null;
        if (detailsCorrectDto.getRaiseUserId() != null) {
            raiseUrl = userMapper.selectById(detailsCorrectDto.getRaiseUserId()).getSignatureUrl();
            if (StringUtils.isBlank(raiseUrl)) {
                throw new ErrorException("找不到提出人的签名");
            }
        }
        // åŽŸå› åˆ†æžäºº
        String causeUrl = null;
        if (detailsCorrectDto.getCauseUserId() != null) {
            causeUrl = userMapper.selectById(detailsCorrectDto.getCauseUserId()).getSignatureUrl();
            if (StringUtils.isBlank(causeUrl)) {
                throw new ErrorException("找不到原因分析人的签名");
            }
        }
        // çº æ­£äºº
        String correctUrl = null;
        if (detailsCorrectDto.getCorrectUserId() != null) {
            correctUrl = userMapper.selectById(detailsCorrectDto.getCorrectUserId()).getSignatureUrl();
            if (StringUtils.isBlank(correctUrl)) {
                throw new ErrorException("找不到纠正人的签名");
            }
        }
        // éªŒè¯äºº
        String validationUrl = null;
        if (detailsCorrectDto.getValidationUserId() != null) {
            validationUrl = userMapper.selectById(detailsCorrectDto.getValidationUserId()).getSignatureUrl();
            if (StringUtils.isBlank(validationUrl)) {
                throw new ErrorException("找不到验证人的签名");
            }
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/supervise-detail-correct.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        String finalRaiseUrl = raiseUrl;
        String finalCauseUrl = causeUrl;
        String finalCorrectUrl = correctUrl;
        String finalValidationUrl = validationUrl;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("correct", detailsCorrectDto);
                    put("raiseUrl", StringUtils.isNotBlank(finalRaiseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRaiseUrl).create() : null);
                    put("causeUrl", StringUtils.isNotBlank(finalCauseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCauseUrl).create() : null);
                    put("correctUrl", StringUtils.isNotBlank(finalCorrectUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectUrl).create() : null);
                    put("validationUrl", StringUtils.isNotBlank(finalValidationUrl) ? Pictures.ofLocal(imgUrl + "/" + finalValidationUrl).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "监督纠正措施", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.process.task;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.process.mapper.QualitySuperviseDetailsMapper;
import com.ruoyi.process.pojo.QualitySuperviseDetails;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
 * åŸ¹è®­è®¡åˆ’使用提醒记录提醒
 */
@Component
public class QualitySuperviseSchedule {
    @Resource
    private QualitySuperviseDetailsMapper qualitySuperviseDetailsMapper;
    @Resource
    private UserMapper userMapper;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    /**
     * æé†’填写设备使用记录
     */
//    @Scheduled(cron = "0/5 * * * * *")
    @Scheduled(cron = "0 0 9 1 * *") // æ¯æœˆ1号执行
    public void task1() {
        // æŸ¥è¯¢å½“月监督计划
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M");
        String format = LocalDateTime.now().format(formatter);
        List<QualitySuperviseDetails> qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.<QualitySuperviseDetails>lambdaQuery()
                .eq(QualitySuperviseDetails::getSuperviseTime, format));
        for (QualitySuperviseDetails qualitySuperviseDetail : qualitySuperviseDetails) {
            threadPoolTaskExecutor.execute(() -> {
                // æŸ¥è¯¢è¢«ç›‘督人信息
                User user = userMapper.selectById(qualitySuperviseDetail.getSupervisedUserId());
                // ä¼ä¸šå¾®ä¿¡é€šçŸ¥åŸ¹è®­
                String message = "";
                message += "质量监督计划提醒通知";
                message += "\n监督日期: " + qualitySuperviseDetail.getSuperviseTime();
                message += "\n监督目的: " + qualitySuperviseDetail.getSupervisePurpose();
                message += "\n监督项目: " + qualitySuperviseDetail.getSuperviseProject();
                message += "\n被监督人: " + qualitySuperviseDetail.getSupervisee();
                message += "\n计划当月进行监督计划";
                //发送企业微信消息通知
                try {
                    WxCpUtils.inform(user.getAccount(), message, null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        }
    }
}
cnas-process/src/main/java/com/ruoyi/process/test.java
ÎļþÒÑɾ³ý
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>
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>
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>
cnas-process/src/main/resources/mapper/InspectionOrderMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.process.mapper.InspectionOrderMapper">
    <!--检验委托单分页查询-->
    <select id="pageInspectionOrder" resultType="com.ruoyi.process.dto.InspectionOrderDto">
        select *
        from (select *
        from cnas_inspection_order
        order by create_time desc) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <!--委托单查询成品订单-->
    <select id="getInsOrderOnInspection" resultType="com.ruoyi.inspect.pojo.InsOrder">
        select *
        from (select *
        from ins_order
        where state = 4 and ifs_inventory_id is null
        order by entrust_code desc) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
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>
cnas-process/src/main/resources/mapper/ProcessDealMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.process.mapper.ProcessDealMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessDeal">
        <id column="id" property="id"/>
        <result column="sample_name" property="sampleName"/>
        <result column="sample_code" property="sampleCode"/>
        <result column="sample_supplier" property="sampleSupplier"/>
        <result column="num" property="num"/>
        <result column="deal_method" property="dealMethod"/>
        <result column="deal_time" property="dealTime"/>
        <result column="create_user" property="createUser"/>
        <result column="update_user" property="updateUser"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
        <result column="totaldeal_id" property="totaldealId"/>
    </resultMap>
    <select id="pageProcessDeal" resultType="com.ruoyi.process.pojo.ProcessDeal">
        select *
        from (select * from cnas_process_deal) A
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
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>
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>
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>
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>
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>
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>
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>
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>
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>
cnas-process/src/main/resources/mapper/ProcessReportMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.process.mapper.ProcessReportMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessReport">
        <id column="id" property="id"/>
        <result column="ins_report_code" property="insReportCode"/>
        <result column="pages" property="pages"/>
        <result column="number" property="number"/>
        <result column="send" property="send"/>
        <result column="method" property="method"/>
        <result column="send_time" property="sendTime"/>
        <result column="send_user" property="sendUser"/>
        <result column="signatory" property="signatory"/>
        <result column="remark" property="remark"/>
        <result column="create_user" property="createUser"/>
        <result column="create_time" property="createTime"/>
        <result column="update_user" property="updateUser"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    <select id="pageProcessReport" resultType="com.ruoyi.process.pojo.ProcessReport">
        select * from (select cpr.* ,
        u1.name sendUserName
        from cnas_process_report cpr
        left join user u1 on send_user=u1.id )A
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="getIds" resultType="com.ruoyi.process.pojo.ProcessReport">
        select cpr.* ,
        u1.name sendUserName
        from cnas_process_report cpr
        left join user u1 on send_user=u1.id
        where 1=1
        and cpr.id in
        <foreach collection="ids" separator="," item="id" open="(" close=")">
            #{id}
        </foreach>
    </select>
</mapper>
cnas-process/src/main/resources/mapper/ProcessSampleMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.process.mapper.ProcessSampleMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessSample">
        <id column="id" property="id" />
        <result column="sample_name" property="sampleName" />
        <result column="sample_code" property="sampleCode" />
        <result column="sample_supplier" property="sampleSupplier" />
        <result column="num" property="num" />
        <result column="sample_state" property="sampleState" />
        <result column="create_user" property="createUser" />
        <result column="update_user" property="updateUser" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
        <result column="total_sample_id" property="totalSampleId" />
        <result column="receive_date" property="receiveDate" />
        <result column="leave_date" property="leaveDate" />
        <result column="deal_time" property="dealTime" />
    </resultMap>
    <select id="pageProcessSample" resultType="com.ruoyi.process.pojo.ProcessSample">
        select *
        from (select * from cnas_process_sample) A
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
cnas-process/src/main/resources/mapper/ProcessTotalSampleMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.process.mapper.ProcessTotalSampleMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessTotalSample">
        <id column="id" property="id" />
        <result column="examine_user" property="examineUser"/>
        <result column="examine_state" property="examineState"/>
        <result column="examine_url" property="examineUrl"/>
        <result column="examineUserName" property="examineUserName"/>
        <result column="ratify_user" property="ratifyUser"/>
        <result column="ratify_state" property="ratifyState"/>
        <result column="ratify_url" property="ratifyUrl"/>
        <result column="ratifyUserName" property="ratifyUserName"/>
        <result column="submit_user" property="submitUser"/>
        <result column="submit_state" property="submitState"/>
        <result column="submit_url" property="submitUrl"/>
        <result column="submitUserName" property="submitUserName"/>
        <result column="total_num" property="totalNum"/>
        <result column="month" property="month"/>
        <result column="url" property="url"/>
    </resultMap>
    <select id="pageProcessTotalSample" resultType="com.ruoyi.process.pojo.ProcessTotalSample">
        select *
        from (select cpt.*, u1.name examineUserName , u2.name ratifyUserName,u3.name submitUserName
        from cnas_process_total_sample cpt
        left join user u1 on u1.id = examine_user
        left join user u2 on u2.id = ratify_user
        left join user u3 on u3.id = submit_user) A
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
cnas-process/src/main/resources/mapper/ProcessTotaldealMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.process.mapper.ProcessTotaldealMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.process.pojo.ProcessTotaldeal">
        <id column="id" property="id"/>
        <result column="examine_user" property="examineUser"/>
        <result column="examine_state" property="examineState"/>
        <result column="examine_url" property="examineUrl"/>
        <result column="examineUserName" property="examineUserName"/>
        <result column="ratify_user" property="ratifyUser"/>
        <result column="ratify_state" property="ratifyState"/>
        <result column="ratify_url" property="ratifyUrl"/>
        <result column="ratifyUserName" property="ratifyUserName"/>
        <result column="submit_user" property="submitUser"/>
        <result column="submit_state" property="submitState"/>
        <result column="submit_url" property="submitUrl"/>
        <result column="submitUserName" property="submitUserName"/>
        <result column="total_num" property="totalNum"/>
        <result column="month" property="month"/>
        <result column="url" property="url"/>
    </resultMap>
    <select id="pageProcessTotaldeal" resultType="com.ruoyi.process.pojo.ProcessTotaldeal">
        select *
        from (select cpt.*, u1.name examineUserName , u2.name ratifyUserName,u3.name submitUserName
        from cnas_process_totaldeal cpt
        left join user u1 on u1.id = examine_user
        left join user u2 on u2.id = ratify_user
        left join user u3 on u3.id = submit_user) A
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
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>
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>
cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ruoyi.process.mapper.QualityMonitorDetailsMapper">
    <select id="pageQualityMonitorDetail" resultType="com.ruoyi.process.pojo.QualityMonitorDetails">
        select * from (
        select *
        from cnas_quality_monitor_details
        order by quality_monitor_details_id
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
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>
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>
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,             <!-- è¢«ç›‘督时间 -->
        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>
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>
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>
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ruoyi.process.mapper.QualitySuperviseDetailsMapper">
    <!-- è´¨é‡ç›‘督计划详情列表 -->
    <select id="pageQualitySuperviseDetail" resultType="com.ruoyi.process.dto.QualitySuperviseDetailsDto">
        select *
        from (select cd.*,
                     cr.is_according,
                     ca.is_correct,
                     cc.supervise_details_correct_id
              from cnas_quality_supervise_details cd
                       left join cnas_quality_supervise_details_record cr
                                 on cr.supervise_details_id = cd.supervise_details_id
                       left join cnas_quality_supervise_details_according ca
                                 on ca.supervise_details_id = cd.supervise_details_id
                       left join cnas_quality_supervise_details_correct cc
                                 on cc.supervise_details_id = cd.supervise_details_id
        where 1=1
        <choose>
            <when test="causeType != null and causeType == 1">
                and cd.supervise_reason not like '%动态%'
            </when>
            <when test="causeType != null and causeType == 2">
                and cd.supervise_reason like '%动态%'
            </when>
            <otherwise>
                and cd.supervise_reason not like '%动态%'
            </otherwise>
        </choose>
              order by STR_TO_DATE(CONCAT(cd.supervise_time, '.01'), '%Y.%m.%d')) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
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>
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>
    <!-- æŸ¥è¯¢è¯¥è®¡åˆ’监督员 -->
    <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>
cnas-process/src/main/resources/static/excel/check-records.xlsx
Binary files differ
cnas-process/src/main/resources/static/inconsistent-distribution.docx
Binary files differ
cnas-process/src/main/resources/static/inspection-order.docx
Binary files differ
cnas-process/src/main/resources/static/method-verify.docx
Binary files differ
cnas-process/src/main/resources/static/quality-monitor-details-ratify.docx
Binary files differ
cnas-process/src/main/resources/static/quality-monitor-evaluate.docx
Binary files differ
cnas-process/src/main/resources/static/quality-monitor.docx
Binary files differ
cnas-process/src/main/resources/static/quality-supervise.docx
Binary files differ
cnas-process/src/main/resources/static/report-deal.docx
Binary files differ
cnas-process/src/main/resources/static/sample-deal.docx
Binary files differ
cnas-process/src/main/resources/static/sample-receive.docx
Binary files differ
cnas-process/src/main/resources/static/supervise-detail-correct.docx
Binary files differ
cnas-process/src/main/resources/static/supervision-detail-according.docx
Binary files differ
cnas-process/src/main/resources/static/supervision-detail-record.docx
Binary files differ
pom.xml
@@ -278,6 +278,13 @@
                <version>${ruoyi.version}</version>
            </dependency>
            <!--cnas人员-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>cnas-personnel</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!-- minio -->
            <dependency>
                <groupId>io.minio</groupId>
@@ -392,6 +399,7 @@
        <module>cnas-manage</module>
        <module>cnas-device</module>
        <module>cnas-process</module>
        <module>cnas-personnel</module>
    </modules>
    <packaging>pom</packaging>
ruoyi-admin/pom.xml
@@ -97,6 +97,18 @@
            <artifactId>cnas-device</artifactId>
        </dependency>
        <!--cnas资源要求-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>cnas-process</artifactId>
        </dependency>
        <!--cnas人员-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>cnas-personnel</artifactId>
        </dependency>
    </dependencies>
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.common.core.domain.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DepartmentDto {
    private Integer id;
    private String name;
    private Integer userId;
    private Integer fatherId;
    private List<DepartmentDto> children;
}
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
 * éƒ¨é—¨æ˜Žç»†
 * @TableName department_lims
 */
@TableName(value ="department_lims")
@Data
public class DepartmentLims implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("父级id")
    private Integer fatherId;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private List<DepartmentLims> children;
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.common.core.domain.entity.DepartmentDto;
import com.ruoyi.common.core.domain.entity.DepartmentLims;
import java.util.List;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€department_lims(部门明细)】的数据库操作Mapper
* @createDate 2024-05-22 14:08:17
* @Entity com.yuanchu.mom.pojo.DepartmentLims
*/
public interface DepartmentLimsMapper extends BaseMapper<DepartmentLims> {
    //获取部门树
    List<DepartmentDto> selectDepartment();
    //根据部门id,查询他的所有子类id
    List<Integer> selectSonById(Integer id);
}
ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.DepartmentLimsMapper">
    <select id="selectDepartment" resultType="com.ruoyi.common.core.domain.entity.DepartmentDto">
        SELECT id, name, father_id
        FROM department_lims
    </select>
    <select id="selectSonById" resultType="java.lang.Integer">
        SELECT au.id
        FROM (SELECT * FROM department_lims WHERE father_id IS NOT NULL) au,
             (SELECT @father_id := #{id}) pd
        WHERE FIND_IN_SET(father_id, @father_id) > 0
                  AND @father_id := concat(@father_id, ',', id)
        UNION
        SELECT id
        FROM department_lims
        WHERE id = #{id}
        ORDER BY id
    </select>
</mapper>